Posted on 2008-08-10 22:36
orlando 阅读(1294)
评论(1) 编辑 收藏 引用
OpenGL程序员们习惯于管理变换矩阵的堆栈的概念。虽然DirectX并没有一个像OpenGL所采用的关于堆栈的内置概念,但是D3DX库确实包括一个叫ID3DXMatrixStack的帮助接口。这个接口包含基本的堆栈操作,例如通过Push与Pop以及一些函数方法,来帮助构建变换。然而与OpenGL不同,你必须明确的将堆栈的内容传递给SetTransform,因为设备本身并不维护一个堆栈。当渲染一个复杂物体的时候,堆栈可以被用来跟踪和管理变换状态。
假设知道船只在海中的位置和取向,也知道炮塔相对于船的位置以及炮管相对于炮塔的位置。与为每个物体计算多个矩阵然后存储每个矩阵相反,可以使用一个堆栈并按下列的步骤来渲染整个船只:
1、使用D3DXCreateMatrixStack创建一个堆栈接口。
2、为船只的位置计算矩阵并将该矩阵压入堆栈。
3、将栈顶设置为当前世界变换并渲染船体。
4、对栈做Push操作并连接炮塔的相对变换。
5、将栈顶设置为当前世界变换并渲染炮塔。
6、对栈做Push操作并连接第一根炮管的相对变换。
7、将栈顶设置为当前世界变换并渲染第一根炮管。
8、对栈做Pop操作,这就将炮塔变换置于栈顶。
9、对栈叫做Push操作并连接第二根炮管的相对变换。
10、将栈顶设置为当前世界变换并渲染第二根炮管。
11、对栈做Pop操作,这就将炮塔变换置于栈顶。
12、对栈做Pop操作,这就将船只变换置于栈顶。
13、以同样的方式渲染船只的其他部分。