1

我正在开发我的第一个 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 )},
}
4

1 回答 1

2
  1. 常用方式:

    • 创建正交投影矩阵(XMMatrixOrthographicLH()如果您使用 XMMATH)
    • 在 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 方面。当然,您也可以将此代码移至着色器。

PS 可能你的书/手册/教程稍后会了解它。所以,你最好相信它并一步一步地流动。

快乐编码!=)

于 2013-10-07T19:47:58.943 回答