01 2012 档案

摘要:本文主要总结创建、结束线程和WIN32 API提供的一些线程同步方法。同步方法包括用户态同步方式:InterLock、CriticalSection、SRWLock和内核态同步方式:Event、Semaphore、Mutex等。本文通过简单的例子演示API的使用,没有包含原理的说明,假定读者具有其他语言或者平台的并发编程经验。创建、结束线程WIN32 API虽然提供了CreateThead和ExitThread方法,但是在C++中,永远不应该使用这两个方法创建或结束线程。而应该使用VC++提供的_beginthread、_beginthreadex方法,相应的结束线程方法_endthread、 阅读全文
posted @ 2012-01-29 10:56 oayx 阅读(807) 评论(0) 推荐(0) 编辑
摘要:最近总是和卷积打交道,工作需要,每天都要碰到它好几次,不胜烦恼,因为在大学时候学信号与系统的时候就没学会,我于是心想一定要把卷积完全搞明白。正好同办公室的同学也问我什么是卷积,师姐昨天也告诉我说:“我也早就想把这个问题搞明白了!”经过一段时间的思考之后,有一些很有趣的体会和大家分享。听说卷积这种运算式物理学家发明的,在实际中用得不亦乐乎,而数学家却一直没有把运算的意义彻底搞明白。仔细品以下,还是有那么点滋味的。下面先看一下剑桥大学的教科书对卷积的定义:我们都知道这个公式,但是它有什么物理意义呢,平时我们用卷积做过很多事情,信号处理时,输出函数是输入函数和系统函数的卷积,在图像处理时,两组幅分辨 阅读全文
posted @ 2012-01-20 15:51 oayx 阅读(729) 评论(1) 推荐(0) 编辑
摘要:完美的画面已经离我们不再遥远——反锯齿技术浅析不管现今的游戏画面有多完美,人物和环境有多真实,但游戏画面的构成的主要方式仍然没有得到改善:一帧画面由成千上万像素构成。这意味着物体多边形的轮廓最终是锯齿状的图形。所以画面质量不可能达到理想的标准,除非完全消除“锯齿”。 别担心,精美的画面品质是要牺牲速度的代价来换取的,并且各大显卡厂商都有自己独到的反锯齿技术,他们新的图形加速卡都纷纷支持全屏抗锯齿。完美的画面已经离我们再遥远。超级采样(Supersampling)无论是什么样的抗锯齿技术都是在超级采样技术的基础上发展而来的。在超级采样技术中,画面里的每一个像素点都被拆分成了几个子像素点,然后对它 阅读全文
posted @ 2012-01-20 15:27 oayx 阅读(1615) 评论(0) 推荐(0) 编辑
摘要:懒病又犯了,很多事情,你自以为囫囵吞枣,会了,可其实你不会,但亦有很多事情,你害怕你不会,但其实不妨来个囫囵吞枣先!戒贪戒急,戒骄戒躁,多谢多想多练,得时常打开RM和Word压压自己,好吧,继续上篇所讲,由于前人已有铺路,我就偷懒了,仅作实现,本篇内容同样转自逍遥剑客的Blog:1, 热流扰动 柏松分布• 每个人都对自然界中的这种大气效果很熟悉• 光线在穿过不同密度的介质时会弯曲热微光• 热空气密度比冷空气小• 密度影响介质的折射率• 热空气上升的同时会被冷空气替代, 这会改变光射入眼睛的路线折射率的部分改变会导致我们看到的景物发生扭曲,具体可以参照一下实现:• 渲染场景到RGBA离屏缓存(可 阅读全文
posted @ 2012-01-20 15:26 oayx 阅读(2538) 评论(0) 推荐(0) 编辑
摘要:本文主要总结创建、结束线程和WIN32 API提供的一些线程同步方法。同步方法包括用户态同步方式:InterLock、CriticalSection、SRWLock和内核态同步方式:Event、Semaphore、Mutex等。本文通过简单的例子演示API的使用,没有包含原理的说明,假定读者具有其他语言或者平台的并发编程经验。创建、结束线程WIN32 API虽然提供了CreateThead和ExitThread方法,但是在C++中,永远不应该使用这两个方法创建或结束线程。而应该使用VC++提供的_beginthread、_beginthreadex方法,相应的结束线程方法_endthread、 阅读全文
posted @ 2012-01-19 18:06 oayx 阅读(3683) 评论(0) 推荐(1) 编辑
摘要:卡尔·弗里德里奇·高斯(1777—1855),18世纪德国数学家,物理和天文学造诣也很深。对超几何级数、复变函数论、统计数学、椭圆函数论都有重大贡献。此外,还有关于向量分析的高斯定理,正态分布的正规曲线等研究成果。与牛顿、阿基米德并称为史上最杰出数学家。 高斯模糊(Gaussian Blur)是美国Adobe图像软件公司开发的一个做图软件:Adobe Photoshop(系列)中的一个滤镜,具体的位置在:滤镜—模糊——高斯模糊!高斯模糊的原理中,它是根据高斯曲线调节象素色值,它是有选择地模糊图像。说得直白一点,就是高斯模糊能够把某一高斯曲线周围的像素色值统计起来,采用数学上 阅读全文
posted @ 2012-01-19 14:34 oayx 阅读(1318) 评论(0) 推荐(1) 编辑
摘要:Bloom,又称“全屏泛光”,是大名鼎鼎的虚幻3游戏引擎中最通用的后期特效技术~ Bloom特效的实现主要依赖于PostProcess框架,即实时绘制当前场景到一后台渲染表面,而后针对其对应贴图进行像素级渲染~ 大家还记得我们之前实现的水面效果中的反射和折射贴图吗?此即为PostProcess的典型 阅读全文
posted @ 2012-01-18 10:31 oayx 阅读(2135) 评论(0) 推荐(1) 编辑
摘要:这是个最近几年才开始出现在实时游戏中的技术,其实概念早在2001年的时候就由一个日本人在论文中提出了,而后又有很多人在实时贴图方面上发表过各式各样的论文,到2006年的时候由另一个日本人(看来日本人在视频游戏中做出的努力和贡献确实不小)在论文中较好的实时呈现了这个算法,这些人为了区分自己的算法,不停地添加了各种各样的副名称”with offset limited”、“Occlusion”、”with Approximate Soft”等等,不过宗旨都是一样的~ 我在网上大概搜了搜,找到几篇也都是把它讲的很玄的,真正清楚阐述的,不多,呵呵,在这里把我的理解记下来,权作笔记。 视差映射的宗旨和.. 阅读全文
posted @ 2012-01-18 10:12 oayx 阅读(3354) 评论(2) 推荐(0) 编辑
摘要:2009年3月17日 阅读评论 发表评论 这个应该算是补遗漏,去年在MSN Space上写过一篇关于凹凸贴图的,当时写了半天其实写的一点也不明白,呵呵,因为有很多细节其实我也没搞太清楚,现在这里发一点关于其中一个用来完成凹凸贴图计算中将光向量转向顶点所在的切向量的细节,这个在当时的例子中是通过API实现的,这里简单描述一下原理,以下翻译自OpenGL.org中关于Tangent Space的阐述。 为了能够正确的完成凹凸贴图中偏移的计算,光向量L必须转换到切向空间中,所谓的切向空间包括3个轴:T,B和N。其中T是该点切线向量,平行于参数曲面上S方向上的增量(我理解应该就是在多边形曲面上的切.. 阅读全文
posted @ 2012-01-18 10:12 oayx 阅读(1885) 评论(0) 推荐(0) 编辑
摘要:动态模糊近几年广泛应用于游戏制作的一种特效,可以使得游戏所呈现出的运动画面更接近于真实相机所拍摄出的效果。 在真实世界中,运动模糊是指在相机拍摄画面时,由于被拍摄物体在相机快门曝光的短暂时间内有一定幅度的运动,造成拍摄出的画面产生残影和模糊的效果,通常相机只有在捕捉高速运动物体或者相机本身处在高速旋转中会出现这种效果。 那么如何能利用GPU在游戏画面中实现这一效果的呢? 其实原理和实现都非常的简单,实现Motion blur的方法也有很多,这里以DirectX9自带Sample中的方法为例进行说明。 我们知道在游戏中对于画面的渲染是一种单帧渲染,通常情况下,两帧之间并没有直接关联,但是... 阅读全文
posted @ 2012-01-18 10:11 oayx 阅读(805) 评论(1) 推荐(0) 编辑
摘要:如何能够高效的产生更接近真实的阴影一直是视频游戏的一个很有挑战的工作,本文介绍目前所为人熟知的两种阴影技术之一的ShadowMap(阴影图)技术。 ShadowMap技术的概念应该说是最早应用在视频游戏中的阴影实现技术,有着非常高效和快速的特点,在实现阴影的同时只需要相对很小的计算负担。 ShadowMap绘制阴影主要是通过一张额外的阴影贴图来实现的,在早期的3D游戏中人物等动态运动的物体通常不绘制阴影,而场景内遮蔽关系相对确定的静态物体的阴影通常是在建立模型之初便已绘制到场景的贴图之中,这是利用ShadowMap来实现阴影概念的最初形成,而现在我们说到的 ShadowMap只是在游戏绘制.. 阅读全文
posted @ 2012-01-18 10:10 oayx 阅读(3686) 评论(0) 推荐(0) 编辑
摘要:Percentage Closer Filtering简称PCF是常用于柔化Shadow Map边缘,产生软阴影的一种技术,最早来源于1987年Computer Graphics上的论文,因为算法原理简单,实现快速而且并不会占用太多运算,所以广泛的应用于实时视频游戏的阴影计算中。 前面我们介绍过了Shadow Map的实现原理,Shadow Map的一个比较明显的缺点即是在生成的阴影边缘锯齿化很严重,而PCF则能有效地克服Shadow Map阴影边缘的锯齿。 PCF通过在绘制阴影时,除了绘制该点阴影信息之外还对该点周围阴影情况进行多次采样并混合来实现锯齿的柔化,这也是抗锯齿最通用也是最简易.. 阅读全文
posted @ 2012-01-18 10:09 oayx 阅读(2631) 评论(0) 推荐(0) 编辑
摘要:Multiple Render Target(MRT)是一种指可以使绘制程序在单帧中同时渲染多个Render Target,也就是一次Draw可以将不同的信息分别画入多个Surface。是利用Pixel Shader实现Post-Process效果中很重要的一部分。 如在上一篇Pixel Motion Blur中,单帧渲染中返回了场景中原有的画面颜色同时还有该像素点的运动速度,超出单一Surface所能表现的数据宽度的部分就是通过Multiple Render Target渲染到另一个Surface上,有了Multiple Render Target的支持,我们在Pixel Shader中就. 阅读全文
posted @ 2012-01-18 10:08 oayx 阅读(2453) 评论(0) 推荐(0) 编辑
摘要:Post Process一般是指后期效果处理,在游戏中诸如全屏模糊一些可以在渲染完整个场景后通过PS独立实现的一些效果都可以算在Post Process之列,DirectX SDK中自带了一个Post Process的例子,通过几个简单的效果阐述了后期特效的原理。 Monochrome 单色效果作用是将彩色图案转为同样对比关系的黑白图,原理很简单就是将表示颜色的RGB值转换相应的亮度值即可,这里所用的是一个亮度公式 L = 0.27R + 0.67G + 0.06B; Blur 模糊是很常见的一种后期效果,实现的方式也很简单,通过对像素点周围点多次采样混合即可得到理想的模糊效果,通... 阅读全文
posted @ 2012-01-18 10:08 oayx 阅读(2855) 评论(0) 推荐(1) 编辑
摘要:这个比较基础了,不过基础最重要,往往应该理解透彻,并且反复复习。 我们知道在3D画面渲染过程中对于模型的计算的一部分被称为Transforming and Lighting(T&L)阶段,其中Lighting表示光照,而Transforming就是指的坐标变换,这两部分的计算也是3D场景中计算最重要基础的一步。 空间坐标变换主要的工作就是将处于局部坐标系的模型转换到用户屏幕所在的屏幕坐标系内。 而这个过程的计算上主要是来自线性代数中的知识,我们知道在线性代数中,线性的变换是可以用矩阵来表示的,而通过将向量[x,y,z,w]同变换矩阵相乘即可完成相应的变换,这正是我们实现空间坐标变换的数 阅读全文
posted @ 2012-01-18 10:07 oayx 阅读(13064) 评论(1) 推荐(0) 编辑
摘要:环境映射是一种用来模拟光滑表面对周围环境的反射的技术,常见的如镜子、光亮漆面的金属等等。 这种技术的实现主要通过将一张带有周围环境的贴图附在所需要表现的多边形表面来实现的。目前在实时3D游戏画面渲染中经常使用的有两种环境映射。 球形环境映射(Spherical Environment Mapping) 球形环境映射是模拟在球体表面产生环境映射的技术,通过对普通贴图的UV坐标进行调整计算来产生在球体表面应产生的扭曲。 UV的计算利用球体表面的法线来计算。计算公式如下: u=Nx/2+0.5 v=Ny/2+0.5 计算公式中的Nx和Ny是表面法线的x和y分量,除以2将区间限制在[-0... 阅读全文
posted @ 2012-01-18 10:06 oayx 阅读(1644) 评论(0) 推荐(0) 编辑
摘要:好吧,既然顶点变换都花那么多时间写了,把光照也写了吧。 不过这个比起顶点变换应该好写多了,至少不用画那么多矩阵和公式了。 经过是空间坐标变换的模型的位置和角度得到了正确的诠释,但是这些信息只够我们来绘制模型的边框,对于物体表面的细节表现,就无能为力了,这就需要我们来进行光照的计算。 实时渲染的游戏画面通常使用经典的Phong光照模型来进行计算,不同的情况下可能计算的公式会有细微调整,但都是利用环境光+漫反射光+镜面反射光的模型来描述光对物体表面的影响。 环境光 环境光主要模拟场景中普遍存在的光源和各个物体反射过来的光线,位于理想的模型中的环境光是均匀的分布在场景的各个角落,均匀的照射在... 阅读全文
posted @ 2012-01-18 10:06 oayx 阅读(747) 评论(0) 推荐(0) 编辑
摘要:Tone Mapping原是摄影学中的一个术语,因为打印相片所能表现的亮度范围不足以表现现实世界中的亮度域,而如果简单的将真实世界的整个亮度域线性压缩到照片所能表现的亮度域内,则会在明暗两端同时丢失很多细节,这显然不是所希望的效果,Tone Mapping就是为了克服这一情况而存在的,既然相片所能呈现的亮度域有限则我们可以根据所拍摄场景内的整体亮度通过光圈与曝光时间的长短来控制一个合适的亮度域,这样既保证细节不丢失,也可以不使照片失真。人的眼睛也是相同的原理,这就是为什么当我们从一个明亮的环境突然到一个黑暗的环境时,可以从什么都看不见到慢慢可以适应周围的亮度,所不同的是人眼是通过瞳孔来调节亮度 阅读全文
posted @ 2012-01-18 10:04 oayx 阅读(4887) 评论(0) 推荐(0) 编辑
摘要:老早就想实现 Depth of field 的效果了,这几天终于有点时间来好好学习并加以实现。使用的是Render Monkey 1.71, Render Monkey的sample里的DOF的稍微有点复杂,不过效果很漂亮。我觉得只要知道了原理并实现了基本的效果就可以了o(∩_∩)o...一共分为4个pass 前两个pass效果一样 在两个不同的位置渲染两个teapot到BackBuffer这张纹理,并保存下相对聚焦区域的深度值 //渲染物体的VS代码structVS_OUTPUT{float4Pos:POSITION;float2Tex:TEXCOORD0;float3View:TEXCO. 阅读全文
posted @ 2012-01-18 10:02 oayx 阅读(958) 评论(0) 推荐(0) 编辑
摘要:原文链接: http://www.ownself.org/oswpblog/?p=50 算法原理来自ATI实验室Guennadi Riguer、Natalya Tatarchuk、John Isidoro的论文“Real-Time Depth of Field Simulation”,本文只是对原理和过程进行简述,具体内容请参见原文。 我们知道视频游戏追求的目标就是完全真实的画面,但是早先的大部分游戏的画面在看上去似乎都缺了些什么,让画面看上去在任何角度任何距离都是完全锐利的,而这种情况在现实中是不存在的,因为有景深的存在。完全锐利的画面虽然完美,但是却让人看上去感觉不真实,这是因为在现实世. 阅读全文
posted @ 2012-01-18 09:59 oayx 阅读(1960) 评论(0) 推荐(0) 编辑
摘要:概述 加壳的全称应该是可执行程序资源压缩,是保护文件的常用手段。 加壳过的程序可以直接运行,但是不能查看源代码.要经过脱壳才可以查看源代码。 加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,做一些额外的工作。大多数病毒就是基于此原理。 加壳的程序经常想尽办法阻止对程序的反汇编分析或者动态分析,以达到它不可告人的目的。这种技术也常用来保护软件版权,防止被软件破解。 编辑本段详细信息概念 加壳:其实是利用特殊的算法,对EXE、DLL文件里的资源进行压缩、加密。类似WINZIP 的效果,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,... 阅读全文
posted @ 2012-01-17 14:50 oayx 阅读(1259) 评论(0) 推荐(0) 编辑
摘要:为了便于说明,首先假设存在下列的顶点缓冲和索引缓冲vb={{-1.0, 1.0, 0.0},index 0{ 1.0, 1.0, 0.0},index 1{ 1.0,-1.0, 0.0},index 2{-1.0,-1.0, 0.0},index 3 {-2.0, 2.0, 0.0},index4{ 2.0, 2.0, 0.0},index 5}和对应该顶点缓冲的一组索引缓冲ib初学D3D,DrawIndexedPrimitive这个函数是个难点,主要是MSDN中的解释不是很明确,这个函数共6个参数,下面对这6个参数进行一下详细的解释。参数1:D3DPRIMITIVETYPE type-图元类 阅读全文
posted @ 2012-01-07 21:53 oayx 阅读(483) 评论(0) 推荐(0) 编辑
摘要:CRC原理及其逆向破解方法 介绍: 这篇短文包含CRC原理介绍和其逆向分析方法,很多程序员和破解者不是很清楚了解CRC的工作原理,而且几乎没人知道如何逆向分析它的方法,事实上它是非常有用的.首先,这篇教程教你一般如何计算CRC,你可以将它用在数据代码保护中.第二,主要是介绍如何逆向分析CRC-32,你可以以此来分析程序中的CRC保护(象反病毒编码).当然有很多有效的工具用来对付CRC,但我怀疑它是否会说明原理. 我要告诉你,这篇短文里中应用了很多数学知识,这不会影响一些人,而且会被一般的 程序员与逆向分析者很好理解.为什么?那么如果你不知道数学是如何被应用在CRC中, 我建议你可以停止... 阅读全文
posted @ 2012-01-01 09:53 oayx 阅读(10635) 评论(0) 推荐(0) 编辑
摘要:#include"stdafx.h"#include<windows.h>constunsignedlongglobe_Crc32Table[256]={0x00000000,0x04c11db7,0x09823b6e,0x0d4326d9,0x130476dc,0x17c56b6b,0x1a864db2,0x1e475005,0x2608edb8,0x22c9f00f,0x2f8ad6d6,0x2b4bcb61,0x350c9b64,0x31cd86d3,0x3c8ea00a,0x384fbdbd,0x4c11db70,0x48d0c6c7,0x4593e01 阅读全文
posted @ 2012-01-01 09:53 oayx 阅读(2833) 评论(0) 推荐(0) 编辑
摘要:在工程文件中, WinMain函数里加上以下代码(此代码在BCB6.0下运行): HANDLE hMutex = CreateMutex(NULL, false, "Process"); if (GetLastError() == ERROR_ALREADY_EXISTS) { CloseHandle(hMutex); MessageBox(Application->Handle, "程序已经在运行中,不能重复启动!", "提示", MB_OK +MB_ICONWARNING); Application->Terminat 阅读全文
posted @ 2012-01-01 09:23 oayx 阅读(1058) 评论(1) 推荐(0) 编辑