随笔分类 - 游戏开发
D3D类游戏开发技术
摘要:1.3.2 Multisampling由于使用像素矩阵来表示图像,在显示时会出现锯齿状,Multisampling就是使其变得平滑的技术。它的一种最普通的用法即为——全屏抗锯齿(看图1.3)。 D3DMULTISAMPLE_TYPE枚举类型使我们可以指定全屏抗锯齿的质量等级: D3DMULTISAMPLE_NONE——不使用全屏抗锯齿。 D3DMULTISAMPLE_1_SAMPLE…D3DM...
阅读全文
摘要:Direct3D是一种低层图形API,它能让我们利用3D硬件加速来渲染3D世界。我们可以把Direct3D看作是应用程序和图形设备之间的中介。例如通知图形设备清空屏幕,应用程序将调用Direct3D的IDirect3DDevice9::Clear方法。图1.1显示了应用程序、Direct3D和图形设备之间的关系。 图1.1中Direct3D所表示的是Direct3D中已定义的,供程序员使用的Di...
阅读全文
摘要:平面 D3DX平面 在代码中描述一个平面:仅仅需要一个法向量n和常数d就可以了。因此我们就使用一个4D向量(我们记录成(n, d))来实现它。D3DX库中用如下的结构来定义一个平面:typedef struct D3DXPLANE{#ifdef __cpluspluspublic: D3DXPLANE() {} D3DXPLANE( CONST FLOAT* ); D3DXPL...
阅读全文
摘要:基本变换 当用Direct3D编程时,我们使用4×4矩阵来进行矩阵变换。用它的原因是:我们设置一个4×4矩阵X是为了更精确的描述矩阵变换。同样我们设置一个相匹配的点或者把向量的分量放置到一个1×4的行矩阵V中。VX的乘积返回一个新的向量V’。例如:让X沿着x轴平移10个单位同时V = [2, 6, –3, 1],乘积VX = V’= [12, 6, –3, 1]。 有一些东西需要阐明。我们使用4×...
阅读全文
摘要:矩阵 在这一部分我们关注的焦点是数学中的矩阵。它们在3D图形学中的应用将在下一部分讲解。 一个m×n的矩阵是由m行和n列的数字组成的矩阵列。行和列的数字就是这个矩阵的维数。我们通过写在下方的数字识别矩阵清单,数字中的第一个表示行第二个表示列。例如下边的M是3×3矩阵,B是2×4矩阵, C是3×2矩阵。 我们使用加粗的大写字母表示矩阵。有时一个矩阵只包含一行或者一列。我们用行矩阵和列矩阵这个特殊的...
阅读全文
摘要:向量相加 我们能够通过分别把两个向量的各个分量相加得到向量之和,注意在相加之前必须保证它们有相同的维数。 u + v = (ux+ vx, uy+ vy, uz+ vz) 图5显示的是几何学上的向量相加。 两个向量相加的代码,我们使用重载的加法操作符: D3DXVECTOR3 u(2.0f, 0.0f, 1.0f); D3DXVECTOR3 v(0.0f, -1.0f, 5.0f); // (2...
阅读全文
摘要:三维空间中的向量 几何学中,我们用有向线段表示向量,如图1。向量的两个属性是他的长度和他的顶点所指的方向。因此,可以用向量来模拟既有大小又有方向的物理模型。例如,以后我们要实现的粒子系统。我们用向量来模拟粒子的速度和加速度。在3D计算机图形学中我们用向量不仅仅模拟方向。例如我们常常想知道光线的照射方向,以及在3D世界中的摄象机。向量为在3维空间中表示方向的提供了方便。 向量与位置无关。有同样长...
阅读全文
摘要:2.3.5光照(Lighting)光照定义在世界坐标系中,但必须变换到视图坐标系才可使用。视图坐标系中光源给物体施加的光照大大增加了场景中物体的真实性。 2.3.6裁剪(Clipping) 我们删除那些超出了可视体范围的几何图形的过程就叫做裁剪。这会出现三种情况: 完全包含——三角形完全在可视体内,这会保持不变,并进入下一级。 完全在外——三角形完全在可视体外部,这将被删除。 部分在内(部分在外...
阅读全文
摘要:2.3 渲染管线 一旦我们描述几何学上的3D场景和设置了虚拟照相机,我们要把这个场景转换成2D图象显示在显示器上。这一系列必须完成的操作就叫做渲染管线。图2.7展示了一个简化的渲染管线,随后将详细解释图中的每一部分。 渲染管线中的许多级都是从一个坐标系到另一个坐标的几何变换。这些变换都通过矩阵变换来实现。Direct3D为我们进行变换计算并且如果显卡支持硬件变换的话那就更有利了。使用Dir...
阅读全文
摘要:这次主题是渲染管线。它是用来创建为3D世界进行几何描述的2D图形并设定一个虚拟照相机确定这个世界中哪一部分将被透视投影到屏幕上。 \ 2.1表现模型一个场景是多个物体或模型的集合。一个物体可以用三角形网格(triangle mesh)来近似表示,如图2.2所示。由三角形网格建立一个物体,我们称之为建模。3D世界中最基本的图元就是三角形,但是Direct3D也支持点图元和线图元但我们都不常用到。 ...
阅读全文
摘要:这个程序创建并渲染几种不同的能够使用D3DXCreate*函数创建的3D物体。 Uses a left-handed coordinate system to create a mesh containing an axis-aligned box.HRESULT D3DXCreateBox( LPDIRECT3DDEVICE9 pDevice, FLOAT Width, FLOAT He...
阅读全文
摘要:这个程序使用D3DXCreateTeapot函数创建并用DrawSubset函数渲染一个纺纱茶壶。 Uses a left-handed coordinate system to create a mesh containing a teapot.HRESULT D3DXCreateTeapot( LPDIRECT3DDEVICE9 pDevice, LPD3DXMESH * ppMesh,...
阅读全文
摘要:立方体——只比三角形稍微复杂一点,这个程序渲染一个线框立方体。 这个简单的绘制和渲染立方体的程序的运行结果如下图所示: 源程序: /************************************************************************************** Renders a spinning cube in wireframe mode. ...
阅读全文
摘要:Direct3D提供了多种渲染状态,它影响几何物体怎样被渲染。渲染状态有默认值,因此假如你的应用程序需要不同于默认设置的渲染时,你仅仅改变它即可。一种渲染效果会一直起作用,直到你下一次改变渲染状态为止。为了设置一个渲染状态,我们使用下面的方法: Sets a single device render-state parameter.HRESULT SetRenderState( D3DRENDE...
阅读全文
摘要:顶点和索引缓存有相似的接口并且共享相似的方法;因此我们把它们合在一起讲解。一个顶点缓存是一块连续的存储了顶点数据的内存。同样的,一个索引缓存是一块连续的存储了索引数据的内存。我们使用顶点和索引缓存保存我们的数据是因为它们能被放置在显存中。渲染显存中的数据要比渲染系统内存中的数据快的多。 在代码中,一个顶点缓存是通过IDirect3DVertexBuffer9接口来定义的。类似的,一个...
阅读全文
摘要:一般仿射变换 3x3矩阵仅能表达3D中的线性变换,不能包含平移。经过4x4矩阵的武装后,现在我们可以构造包含平移在内的一般仿射变换矩阵了。例如: (1)绕不通过原点的轴旋转。 (2)沿不穿过原点的平面缩放。 (3)沿不穿过原点的平面镜像。 (4)向不穿过原点的平面正交投影。 它们的基本思想是将变换的"中心点"平移到原点,接着进行线性变换,然后再将"中心点"平移回原来的位置。开始使用平移矩阵T将点P...
阅读全文
摘要:4D向量和4x4矩阵不过是对3D运算的一种方便的记忆而已。 4D齐次空间 4D向量有4个分量,前3个是标准的x,y和z分量,第4个是w,有时称作齐次坐标。 为了理解标准3D坐标是怎样扩展到4D坐标的,让我们先看一下2D中的齐次坐标,它的形式为(x, y, w)。想象在3D中w=1处的标准2D平面,实际的2D点(x, y)用齐次坐标表示为(x, y, 1),对于那些不在w=1平面上的点,则将它们...
阅读全文
摘要:正交矩阵的运算法则 若方阵M是正交的,则当且仅当M与它转置矩阵MT的乘积等于单位矩阵,见公式9.8: 矩阵乘以它的逆等于单位矩阵:M M-1 = I 所以,如果一个矩阵是正交的,那么它的转置等于它的逆: 这是一条非常有用的性质,因为在实际应用中经常需要计算矩阵的逆,而3D图形计算中正交矩阵出现又是如此频繁。比如旋转和镜像矩阵是正交的,如果知道矩阵是正交的,就可以完全避免计算逆矩阵了,这也将大大...
阅读全文
摘要:矩阵的逆 另外一种重要的矩阵运算是矩阵的求逆,这个运算只能用于方阵。 运算法则 方阵M的逆,记作M-1,也是一个矩阵。当M与M-1相乘时,结果是单位矩阵。表示为公式9.6的形式: 并非所有的矩阵都有逆。一个明显的例子是若矩阵的某一行或列上的元素都为0,用任何矩阵乘以该矩阵,结果都是一个零矩阵。如果一个矩阵有逆矩阵,那么称它为可逆的或非奇异的。如果一个矩阵没有逆矩阵,则称它为不可逆的或奇异矩阵...
阅读全文
摘要:向量几何在游戏编程中的使用 -Twinsen编写 Andre Lamothe说:“向量几何是游戏程序员最好的朋友”。一点不假,向量几何在游戏编程中的地位不容忽视,因为在游戏程序员的眼中,显示屏幕就是一个坐标系,运动物体的轨迹就是物体在这个坐标系曲线运动结果,而描述这些曲线运动的,就是向量。使用向量可以很好的模拟物理现象以及基本的AI。 简单的2-D追踪Andre Lamothe说:“向量几何是...
阅读全文