Vertex Transformation(顶点变换)

  在前面的章节里面我们已经知道定义一个model需要顶点buffer,索引buffer和primitives,也知道可以使用多路流来实现动态顶点components.如果我们想要移动一个model,我们可以通过锁住顶点buffer,然后编辑它某些组件来达到这样的效果。Direct3D提供了顶点处理流水线来执行这样的转换,它包括平移,旋转和缩放。

  顶点处理是指发生在被渲染的每个primitive的每个顶点上的所有计算。顶点处理的每一个stage都会对它的一个或者多个components产生作用。Direct3D允许应用程序选择顶点的处理方式(硬件处理,软件处理或者两者结合)。也可以只是对顶点进行处理,而不进行渲染。

   顶点的变换矩阵一般是一个4*4的浮点矩阵。这个矩阵一般只执行平移,旋转或者缩放。

   当使用多个转换矩阵的时候,变换矩阵的顺序一般也会改变产生的结果,这是因为矩阵乘法不支持交换律。

   世界变换是顶点处理的第一步,它可以把模型空间的顶点转换到世界空间。转换矩阵可以通过方法GetTransform,SetTransform和MultiplyTransform来操作。

   也可以用矩阵变换来实现场景的层次结构。场景的层次结构可以用于绘制那些被连接起来的人物结构或者有相对定位的模型,例如一个机器人的手臂。

   一个顶点可以使用多个世界变换,这些变换结果通过加权结合在一起产生想要的结果,这样的变换方式叫做顶点blending. Direct3D提供了很多blending操作选项设置。最简单的顶点transform是Tweening,就是使用一个浮点值作为通过两个世界变换矩阵变换后顶点的权重值。顶点的权重值在顶点components里面被给出。

    通常的顶点blending一般会提供2到3个权重值以及相应的3个或者4个变换矩阵。被索引的顶点blending可以允许多大4个不同矩阵用于变换。对于未被索引顶点的blending,一个primitive的所有的顶点变换矩阵必须是一样的,只是他们的权重值可以不一样。对于索引顶点blending,每个顶点的索引可以变化,这样顶点的变换矩阵可以不一样。

    在这一章里面,我们将讲述雾化,面拣选,用户自定义剪裁面,视截体,同次除法和view port的应用。

 

顶点处理

   在以前的章节里面,设备支持软件,硬件以及软硬结合的顶点处理方式。当设备使用软硬结合的处理方式的时候,GetSoftwareVertexProcessing和SetSoftwareVertexProcessing用来控制是软件处理还是硬件处理。当这个render state为true时,就意味着软处理被选择,否则则硬处理被选择。当这个render state改变时,当前流,当前索引以及当前顶点shader需要重新还原到默认值。顶点处理包括:世界变换,纹理坐标产生,纹理变换,视觉变换(View Transform),顶点雾化,面拣选,用户剪裁面处理,视截体剪裁,同次除法和视口映射。顶点处理的结果被称为“transformed and lit”顶点,它携带一个屏幕空间的位置,diffuse和specular颜色,最多8组纹理坐标。这些信息都是需要传递给光栅器。如果顶点位置格式是D3DFVF_XYZRHW,就会忽略所有的顶点处理,直接传递给光栅器。

 

变换矩阵

   在数学上,坐标变换是从一个坐标系映射到另外一个坐标系。在三维坐标系,我们需要能够旋转,缩放,平移一个物体。我们可以列出一个跟一维类似的方程:

P'  =  PM +  b  = [x , y z ] M + [b1 b2 b3]

   这里M是一个3*3的矩阵, 它实现了旋转和缩放,而b实现了平移。但是如果使用同次坐标,我们则只需要一个矩阵就能实现这三个功能。当P的笛卡尔坐标扩展到同次坐标时,4*4的矩阵可以同时对三维的点做平移,旋转和缩放。P'= PM',M'是由M和b组成的,如:[x',y',z',1]= [x,y,z,1]M'。这个同次转换矩阵也可以利用它最右边的一栏用于透视图的距离缩短处理。

   当一个顶点包含一个面法线时,面法线将和顶点在同一坐标系。当顶点被转换到新的坐标系是,面法线也应该要转换。但是法线不应该被扭曲。所以,如果顶点用M做转换,面法线的变换矩阵应该是M的逆矩阵的转置。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值