rhw

来源:互联网 发布:多重宇宙 知乎 编辑:程序博客网 时间:2024/05/17 00:52

今天早上看了一个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的时候仍将定点的坐标设置的那么大,在我的视口中肯定看不到我画的图形.

原创粉丝点击