11 2013 档案
摘要:http://blog.csdn.net/huazai434/article/details/5650146一,法线贴图实际上是一张纹理图,但纹理中存储的并不是颜色值,而是法向量坐标。这项技术的主要目的是实现物体表面的粗糙细节。二,法向量在纹理中的存储形式。对于24位纹理格式,r g b 三个元素中分别存储了法向量的三个坐标值。然而,法向量三个坐标值 的取值范围均为(-1.1),而纹理格式中rgb分量的范围是(0,255),因此我们必须做相应的变换。变换方程如下:f(x)=(0.5x+0.5)*255当我们从纹理文件中读取纹素值后,我们便需要将其从(0,255)转换成(-1,1)。由于tex2
阅读全文
摘要:我在学习D3D的深度测试和Alpha混合的时候,有一些遗憾。书上提供的例子里说一定要先渲染不透明物体,再渲染透明物体,对渲染状态的设置也有特殊要求。我看的很晕。自己查图形学的书,上网找资料,结果还是糊里糊涂。在和一个正在做游戏开发的大学同学的一点点的讨论中,我慢慢理解了深度测试和Alpha混合的关系,也就是为什么要那样设置渲染状态,为什么对渲染顺序有特殊要求。在继续看之前,我推荐您看一下这个链接里的内容http://www.cnblogs.com/cocoaleaves/archive/2009/04/19/1438978.html,其中讲了一些理论知识,但是不够精细。所以我做了下面的补充。我
阅读全文
摘要:重要注释——矩阵的顺序:有一件事需要牢记,HLSL允许你使用2种不同方式处理矩阵和向量相乘——mul(v,m)或者mul(m,v)。二者之间唯一的区别就是矩阵被有效地变换。在OGRE中传递矩阵你应该使用mul(m,v)——因为这与渲染器从像RenderMonkey一样的工具中生成的结果保持一致,并且也和Cg一致,但是与使用mul(v,m)的Dx9 SDK和FX合成器不一致——在使用那些渲染器时,你不得不转换mul()的参数。注意,如果你在渲染器中使用了float3x4 / matrix3x4类型,且绑定了OGRE自动定义(例如骨骼矩阵),那么你在程序定义时或许需要使用column_major_
阅读全文
摘要:像素和纹素,都是点,像素是左上角第一个像素为中心开始计算;纹素,以左上角的点为中心开始计算的;存取纹理时,D3D的像素中心不在纹理点的中心,所以要偏半个像素,也就是:纹理坐标U = u +0.5 * (1 / screenSize.x); V = v + 0.5 * (1 / screentSize.y) ;参考:http://www.cnblogs.com/ttthink/archive/2009/10/13/1582588.htmlhttp://www.opengpu.org/bbs/forum.php?mod=viewthread&tid=2912http://www.25k5.
阅读全文
摘要:Sets whether or not this pass renders with depth-buffer writing on or not.Format: depth_write If depth-buffer writing is on, whenever a pixel is written to the frame buffer the depth buffer is updated with the depth value of that new pixel, thus affecting future rendering operations if future pixels
阅读全文
摘要:使用Z-偏移量 在一个三维场景中,我们可以对共面的多边形使用z-偏移量来使它们不再共面。这项技术通常用于在场景中正确的显示阴影。例如,一堵墙上的阴影与这堵墙的深度值是相同的,如果我们先渲染了墙再来渲染阴影,那么阴影就有可能看不到,或者会出现一些深度上的失真。这时,我们可以颠倒渲染的顺序希望能使得到的效果也产生相应的颠倒,但是深度上的失真仍然无法避免。 在渲染共面的多边形时,我们可以给z值增加一些偏移量,这样就能正确的显示共面的多边形了。要给多边形增加一个z-偏移量,我们可以在渲染前调用IDirect3DDevice3::SetRenderState方法,并将dwRenderStateTyp..
阅读全文
摘要:http://blog.csdn.net/xoyojank/article/details/4352090选人界面的角色出现时的效果非常酷, 一直不知道咋做的还是中speedtree在镜头前时的消隐也是这种溶解效果, 跟的圆形透明消隐差不多, 但是这种方法不用alphablend, 效率高些. (当时我形容是被虫子啃了...这机器上没装, 不截图了)最近研究ShadowMap的Alpha穿透, 用到了clip()函数, 恍然大悟, 原来如此啊~clip (DirectX HLSL)Discards the current pixel if the specified value is less
阅读全文
摘要:一) 有效的性能评测 对于任何一个3D应用程序来说,追求场景画面真实感是一个无止尽的目标,其结果就是让我们的场景越来越复杂,模型更加精细,这必然给图形硬件带来极大的负荷以致于无法达到实时绘制帧率。因此,渲染优化是必不可少的。在渲染优化之前,我们需要对应用程序性能进行系统的评测,找出瓶颈,对症下药。对于3D应用程序来说,影响性能的十分多,同时不同的硬件配置条件下,瓶径也会有所不同。因此,对应用程序进行有效的性能评测,不仅需要对整个渲染管线原理有深入地了解,此外借助一些评测工具能让我们的工作事倍功半。 我们知道渲染流水线的速度是由最慢的阶段决...
阅读全文
摘要:http://blog.csdn.net/xoyojank/article/details/2028898热浪扭曲•每个人都对自然界中的这种大气效果很熟悉•光线在穿过不同密度的介质时会弯曲热微光•热空气密度比冷空气小•密度影响介质的折射率•热空气上升的同时会被冷空气替代, 这会改变光射入眼睛的路线•渲染场景到RGBA离屏缓存(可渲染的纹理)•颜色写入RGB值•扭曲度写入Alpha通道•绘制全屏长方形到后备缓冲区•对离屏缓冲采样以获得扭曲度•用扰动贴图来确定扰动向量, 用扭曲度放缩后偏移原始纹理坐标•基于扰动纹理坐标的可增长泊松分布(根据扭曲度来进行偏移)扭曲度•逐像素判断当前像素被扭曲的程度•
阅读全文
摘要:http://www.cnblogs.com/ixnehc/archive/2008/09/02/1282356.html*.先说内部结构.vector就是一块连续的内存,这块连续的内存会随着成员的添加而不断的re-alloc,而且在重分配的时候,分配的内存的大小会 比实际需要的多一些,下次再添加成员时,就可以添加在这些多余的空间里,而不会导致每添加一个成员就需要重分配内存.vector封装的是一块连续的内 存,这是我最喜欢它的地方,因为可以把它的成员直接转换成指针来进行访问,很灵活. *.deque可以根据一个索引进行随机访问,所以我一度也以为它内部有一块连续的内存,直到有一次我真这么干的时
阅读全文
摘要:http://www.cnblogs.com/ixnehc/articles/1282350.html先从最基础的写起吧,关于Device的渲染流程.D3D9的Device就是D3D给我们提供的一个绘制3D图形的工具,它的绘制流程大致是这样的:*.首先Device的使用者要准备好顶点数据,也就是一个顶点的数组,称为A*.然后这个数组A被传入device的渲染管线*.device内部依次对每个顶点进行处理,有两种模式,固定管线和shader模式,所谓固定管线就是device内部实现的一个固定的程 序,用户只能通过设定各种参数(一些RenderState)来控制它,当然这不够灵活,所以有了shad
阅读全文
摘要:转自:http://www.zwqxin.com/archives/shaderglsl/review-normal-map-bump-map.htmlNormal Map法线贴图,想必每个学习计算机图形学的人都不陌生。今天在这里按我的理解总结一下,作为复习,也作为深入学习吧。——ZwqXin.com自从看完那本《数学在计算机图形学上的应用》后,一直想好好地真正实践一次法线贴图/凹凸贴图呢(以前是根据橙书弄了一下罢了)。昨天偶尔看到篇涉及BumpMap的文,正好觉得是个机会,便在网上狂找相关资料——果然,越看越觉得自己还有很多理论的地方需要弄明白呢。说起Normal Map(法线贴图),就会想
阅读全文
摘要:什么是法线贴图技术呢?这是一种用来实现3D效果的一种技术,要想理解这种技术还请您听我慢慢道来。 我们知道,在游戏中经常会有这样的情况,就是一个平面——这个平面在现实中并不是一 个“平”面,例如砖墙的表面带有石质浮雕等等。这样的情况如果要求游戏开发人员将复杂的3D细节都做出来是不现实的,因为即使不计较在建模时候的复杂度, 过多的3D细节也同样会大量消耗显示芯片的性能,让游戏根本没有可玩性。如何利用贴图实现凹凸效果呢? 可行的方法就是将这个平面用一个贴图覆盖,用贴图的纹理实现一定的凹凸效果。但是这种方法实现的效果并不是很好,因为如果视角一变化,看起来就会像一张简单的画有图案的平面了。 后来...
阅读全文