sldbtree

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

2011年6月28日

摘要: 第一部分:ShaderModel版本和DirectX版本的关系DirectX8.0-ShaderModel1.0&1.1DirectX8.0a-ShaderModel1.3DirectX8.1-ShaderModel1.4DirectX9.0-ShaderModel2.0DirectX9.0a-ShaderModel2.0aDirectX9.0b-ShaderModel2.0bDirectX9.0c-ShaderModel3.0DirectX10.0*-ShaderModel4.0DirectX10.1*-ShaderModel4.1DirectX11.0*-ShaderModel5. 阅读全文
posted @ 2011-06-28 15:25 sldbtree 阅读(377) 评论(0) 推荐(0)

摘要: ShadowVolume,中文译为阴影体。这个名字中间包含了整个算法的思想:阴影的生成是通过一个“阴影体”来进行的。在3D中,带“体”字的很多术语,我们都可以联系到一个具体的三维物体,它在空间的x、y、z方向占据一定的“体积”。下面是一张wiki上的图片,左边的场景描述了光照环境中的阴影表现,墙上和地板上有逆光的球体阴影。右边的图表现的是这个阴影的实现方式-shadowvolume,我上面提到的“物体”,包含了球和球发出的那些黄色的线组成的整个部分,这个部分也就是阴影体(阴影物体)。这个阴影物体是计算阴影的过程中,我们通过一定的算法生成的,生成这个阴影物体的作用就是用来计算最后球体在墙面、地面 阅读全文
posted @ 2011-06-28 15:13 sldbtree 阅读(812) 评论(0) 推荐(2)

摘要: 可能有同名的书,我这里指的是David H. Eberly著的,第二版的具体小题目是“A Practical Approach to Real-Time Computer Graphics”。首先可以很快就说明的是,如果你在寻找一本关于游戏引擎的书,那么这本书可能很大程度上不是你想找的。你要找的书名字更可能是“Game Engine Architecture”,作者Jason Gregory。David的这本书,着重点在它的小题目中,大多数是在讲游戏引擎中的实时图形引擎。作者原来的意思,可能觉得3D图形引擎在整个游戏引擎中算是重中之重,所以起名叫游戏引擎设计也无妨。但是,这点在书名的角度,有误 阅读全文
posted @ 2011-06-28 15:12 sldbtree 阅读(1130) 评论(0) 推荐(1)

摘要: Bumpmapping是凹凸映射技术,这种技术用于显示物体表面的立体感、凹凸感。这种技术用于细节的表现,最新的名称可能叫“Parallax Mapping",Quake4中大量使用,表现场景中的地板和墙的凹凸、沧桑感。本文解释DOT3BumpMapping,也是Bump mapping其中的一种方法。Bumpmapping是一种像素级操作(如Phone照明方式,光照是作用到每个像素上的,也就是每个像素都有不同法线值),基本上都用到TangentSpace(切面空间)这个概念。这个空间是3D中继LocalSpace、WorldSpace、ViewSpace、ScreenSpace和Te 阅读全文
posted @ 2011-06-28 15:11 sldbtree 阅读(414) 评论(0) 推荐(0)

摘要: 公告牌技术应该在每款游戏应用中都会用到,因为粒子系统大量用到该技术。对粒子系统来说,每个粒子都是一直朝向相机的一个位图。在早期的PC游戏中,树的表现也多用公告牌技术,现在随着硬件发展和玩家(player)胃口的改变,树很少用此技术了。但是,因为很多手持设备上的3D应用越来越多,在这样的设备上,采用对CPU要求比较低的公告牌还是很有吸引力的。现实应用中,公告牌一般都围绕x轴(Pitch)和y轴(Yaw)转动,不考虑z轴的转动(Roll),因此公告牌技术中有所谓的CylinderBillboard和SphericalBillboard。现在的MMORPG中,大量运用绕Y轴和X轴旋转的公告牌技术。这 阅读全文
posted @ 2011-06-28 15:10 sldbtree 阅读(859) 评论(0) 推荐(0)

摘要: 进入DirectX8后,微软移除了DirectDraw。对很多熟悉了“读取framebuffer(帧缓冲)句柄和内存跨度(pitch),然后对帧缓冲进行像素级操作”的程序员来说,很大的一个疑问是2D的图形该怎么做,因为即使在3D世界中,UI(人机界面)等很多元素还是需要通过2D来实现的。在知道D3D的做法前,我们了解一下原理:对正常的3D的数据来说,无论是多大的一个几何体(geometric),最终都是有一系列的顶点(vertex)来构成,这些顶点用3D坐标,因此具备(x,y,z)三个分量来表示在空间中的位置。在3D渲染流程中,每个正常的顶点必然经过3个变换过程。第一个是转化到世界坐标(设置D 阅读全文
posted @ 2011-06-28 15:09 sldbtree 阅读(809) 评论(0) 推荐(0)

摘要: 粒子系统是大量的粒子组成一个特定的渲染物,如烟火、喷泉等。一般每个粒子使用Billboard(http://blog.sina.com.cn/s/blog_7ef6556e0100tx43.html)方式,因为粒子本身很小,所以不需要有空间的表现力。既然不需要空间的表现力,那么如果动用三维的网格(mesh)方式,就显得浪费计算机资源了。DirectX对粒子也做了封装,也有了新的名称,“pointsprite”。我这里不会用到这个东西,因为封装的一个原因就是让用户不需要注意细节,这与本博文是相悖的。下面我们开始熟悉自己的粒子系统。概念上,我们需要大量的粒子来组成一个粒子系统,因此在程序中,我们可 阅读全文
posted @ 2011-06-28 15:08 sldbtree 阅读(444) 评论(0) 推荐(0)

摘要: 关键帧动画(keyframe animation)在3D中很大的一个缺点是占用的数据量比较大,如果动画衔接需要更细致一些、自然一些,那么要加入的关键帧就更多。但是,对于关键帧动画来说,每一帧的顶点数量是固定的。所以,对稍微复杂的模型,每加入一帧,就意味着又加入那么多的顶点。解决这个问题的是现在我们要讲的另外一种动画技术,骨骼动画(skeletal animation)。骨骼动画的关键概念是骨骼,在英文文献里,也被称作joint。和关键帧动画一样,我们需要依靠顶点来组成一个物体(mesh),只是在骨骼动画中不同的是:关键帧动画每一帧都直接记录顶点在该帧中的位置信息;而在骨骼动画中,每一帧的顶点信 阅读全文
posted @ 2011-06-28 15:07 sldbtree 阅读(1903) 评论(0) 推荐(0)

摘要: 关键帧动画来源很久,在wiki上查的话可以得到很多的示例,主要集中在2D方面的。很多早期的动画形式,都是用这种方式做出来。甚至是在业界,资深的美术师都是进行关键帧的创作,其他细节(插值)都是由其他美工制作或者计算机辅助设计。下图是2D的关键帧技术示例:灰色底部分是关键帧,白底部分的是非关键帧(图像资源来源于网络)。3D关键帧动画跟2D的关键帧动画是紧密相连的,因为它们的核心概念都一样。创作者在创作动画的时候,只对组成一系列动画至关重要的帧(frame)进行创作加工。举例来说,如果创作者创作一个两秒的动画,按他对该动画的理解(和相关设计软件的功能性),他可能只需要创作10个关键帧就可以了。如果把 阅读全文
posted @ 2011-06-28 15:06 sldbtree 阅读(1627) 评论(0) 推荐(0)

摘要: 前言:任何一种LOD (Level Of Detail) 方式最终想解决的问题,是在需要更多细节的地方尽量多的显示细节,也就是那些地方会有更多的面。解释一下:在没有LOD的时候,我们显示一个地形或者一个其他模型(LOD不仅是对地形而言),无论地形或模型跟镜头(视点)多远,在计算机内部运算的时候,都按照地形或模型拥有的所有面的数量来进行一系列基于数学模型下的运算,最终得到二维屏幕上的画面。在输出结果上,更远的模型占据到的屏幕的面积很小,极端情况可能就是几个像素。因此,计算机研究人员就一直致力于方法来优化这个状况。因为如果把很多不必要的运算(很多三维面经过几轮裁剪,最后没有在二维屏幕上显示)消除, 阅读全文
posted @ 2011-06-28 15:04 sldbtree 阅读(1549) 评论(0) 推荐(0)