D3DFVF_XYZRHW directx fvf格式

D3DFVF_XYZRHW directx fvf格式,directx,Directx,顶点结构 struct Vertex { float x, y, z; float rhw; D3DCOLOR diffuse; float u, v; Vertex(){} Vertex(float px, float py, D3DCOLOR pdiffuse, float pu, float pv) { x = px; y = py; z = 0.0f; rhw = 1.0f; diff

顶点结构

struct Vertex
{
    float x, y, z;
    float rhw;
    D3DCOLOR diffuse;
    float u, v;
    Vertex(){}
    Vertex(float px, float py, D3DCOLOR pdiffuse, float pu, float pv)
    {
        x = px; y = py; z = 0.0f;
        rhw = 1.0f;
        diffuse = pdiffuse;
        u = pu; v = pv;
    }
    static const DWORD FVF;
};
const DWORD Vertex::FVF = D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1;
顶点数据

lpVbData[0] = Vertex(0.0f, 0.0f, 0xFF000000, 0.0f, 0.0f);
lpVbData[1] = Vertex(20.0f, 0.0f, 0xFF000000, 1.0f, 0.0f);
lpVbData[2] = Vertex(20.0f, 100.0f, 0xFF000000, 1.0f, 1.0f);
lpVbData[3] = Vertex(0.0f, 100.0f, 0xFF000000, 0.0f, 1.0f);
我的问题是
rect的大小应该是20x100宽x高像素,但在显示器上是20x97宽x高像素。为什么?谢谢

问题已经解决了。
backbuffer大小与窗口大小不匹配,请忽略窗口的边框,以便在窗口中缩放backbuffer曲面,并且显示的像素大小不正确。

这取决于投影矩阵和outputwindow。你是如何创建矩阵的?directx曲面的大小是多少?你使用vertexshader还是固定函数管道?你是如何在显示中测量你的rect的?我使用截图软件,并在photoshop中测量截图jpg文件。另一种方法是,使用win32 api,将鼠标在客户端区域的位置设置为x:20 y:100像素位置。我使用固定的函数管道。fvf是D3DFVF_XYZRHW,因此它不会通过管道中的矩阵和顶点着色器进行变换。可能与纹理/像素映射有关: