今天早上看了一个DirectX的程序想自己写一个,可是写了半天就是什么都无法显示,让人很是郁闷,最后只上一行一行的比较,终于发现问题在哪了:
struct CUSTOMVERTEX//例子中的定点格式
{
FLOAT x, y, z, rhw; // The transformed position for the vertex.
DWORD color; // The vertex color.
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
而我自己定义的格式为:
struct CUSTOMVERTEX
{
D3DXVECTOR3 position; // The position
D3DCOLOR color; // The color
FLOAT tu, tv; // The texture coordinates
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE | D3DFVF_TEX1)
问题就出在这个rhw分量上,虽然将rhw全部设为一在绘制的时候并没有起什么很大的作用,但在实际中有与没有rhw分量却是两个不同的概念:
RHW : Reciprocal Homogeneous W as 'Single'
D3D里头当这个标志的值为1.0f时表示你传入的顶点坐标是位于变换后的屏幕空间,而不是世界空间坐标
当FVF格式里有RHW存在,并且将RHW设为1时,所有的顶点坐标按照屏幕平面坐标系设置,就会在屏幕上显示平面2D的图形.此时Z不再管用,所以说如果我在在没有rhw的时候仍将定点的坐标设置的那么大,在我的视口中肯定看不到我画的图形.