DirectX 11顶点坐标

时间:2013-10-07 13:26:48

标签: c++ directx coordinates directx-11 vertices

我正在开发我的第一个C ++和DirectX 11项目,我目前的目标是在屏幕上绘制一个彩色三角形。这没有任何问题,效果很好。但是,有一部分我想改变,但我不知道如何。我已经尝试过寻找解决方案,但我还没有找到任何解决方案,我想原因是因为我真的不知道应该搜索什么。

目前我设置了三角形3个顶点,如下所示:

VertexPos vertices[] =
{
    { XMFLOAT3(  0.5f,  0.5f, 1.0f )},
    { XMFLOAT3(  0.5f, -0.5f, 1.0f )},
    { XMFLOAT3( -0.5f, -0.5f, 1.0f )},
}

VertexPos的定义如下:

struct VertexPos
{
    XMFLOAT3 pos;
};

当前,我的顶点位置设置在-1.0F到1.0F的范围内,其中0.0F是中心。如何更改此设置,以便我可以使用“真实”坐标来定位顶点:

VertexPos vertices[] =
{
    { XMFLOAT3(  100.0f,  300.0f, 1.0f )},
    { XMFLOAT3(  200.0f,  200.0f, 1.0f )},
    { XMFLOAT3(  200.0f,  300.0f, 1.0f )},
}

1 个答案:

答案 0 :(得分:1)

  1. 通常的方式:

    • 如果您使用XMMATH,则创建正交投影矩阵(XMMatrixOrthographicLH()
    • 在CPU端(C ++代码)和GPU大小(顶点着色器)上使用此矩阵创建常量缓冲区
    • 通过顶点着色器中的正交投影矩阵乘以顶点位置
  2. 更简单的方式(来自F.Luna书):

    XMFLOAT3 SpriteBatch::PointToNdc(int x, int y, float z)
    {
        XMFLOAT3 p;
    
        p.x = 2.0f*(float)x/mScreenWidth - 1.0f;
        p.y = 1.0f - 2.0f*(float)y/mScreenHeight;
        p.z = z;
    
        return p;
    }
    

    几乎相同,但在CPU方面。当然,您也可以将此代码移动到着色器。

  3. P.S。可能你的书/手册/教程会在稍后了解你。所以,你最好相信它并逐步流动。

    快乐的编码! =)