可变顶点格式
typedef struct{
FLOAT x,y,z,rhw; //2-D坐标
FLOAT x,y,z; //3-D坐标
FLOAT nx,ny,nz; //法线
D3DCOLOR diffuse; //漫反射色
FLOAT u,v; //纹理坐标
}sVertex;
唯一冲突的变量就是那些表示坐标和法线的变量。法线(normal)是定义了一个方向的坐标,并且只能同3-D坐标一起使用。需要挑选决定波保留哪些坐标以及抛弃哪些坐标。如果使用的是2-D坐标,就不能包含3-D坐标,反之亦然。
2-D坐标同3-D坐标的唯一本质区别就是,2-D坐标多了个rhw变量,rhw是齐次变量W的倒数。在英语表达中,rhw通常表示沿着Z-轴从观察点到顶点的距离。在许多情况下,可以安全地将rhw设置为1.0。
在顶点结构体中没有RHW时,Direct3D将执行视、投影、世界等变换以及进行光线计 算,之后你才能在窗口中得到你所绘制的物体。当顶点结构体中有RHW时,就像上面那段英文所述,告知Direct3D使用的顶点已经在屏幕坐标系中了,不 再执行视图、投影、世界等变换和光线计算,因为D3DFVF_XYZRHW标志告诉它顶点已经经过了这些处理,并直接将顶点进行光栅操作,任何用 SetTransform进行的转换都对其无效。不过这时的原点就在客户区的左上角了,其中x向右为正,y向下为正,而z的意义已经变为z-buffer 的象素深度。
D3DFVF_XYZRHW和D3DFVF_XYZ、D3DFVF_NORMAL不能共存,因为后两个标志与前一个矛盾。
构造FVF的下一步就是创建由一些标志组合而成的FVF描述符。
D3DFVF_XYZ 包含3D坐标
D3DFVF_XYZRHW 包含2D坐标
D3DFVF_NORMAL 包含法线(一个矢量)
D3DFVF_DIFFUSE 包一个含漫反射色分量
D3DFVF_TEX1 包含一个纹理坐标对
本文介绍了Direct3D中可变顶点格式的概念及其组成部分,包括2-D与3-D坐标、法线、漫反射色及纹理坐标等。讨论了如何通过FVF描述符指定顶点数据布局,并解释了D3DFVF_XYZRHW、D3DFVF_XYZ和D3DFVF_NORMAL等标志的使用场景。
2611

被折叠的 条评论
为什么被折叠?



