DirectX 11 移动我的正方形

DirectX 11 Moving my square

本文关键字:正方形 我的 移动 DirectX      更新时间:2023-10-16

我正在学习 DirectX 11,并且已经达到了显示正方形的程度。我的 4 个顶点定义为:

VertexPos vertices[] = 
{
    XMFLOAT3(-0.2f, 0.2f, 0.2f),
    XMFLOAT3(0.2f, 0.2f, 0.2f),
    XMFLOAT3(-0.2f, -0.2f, 0.2f),
    XMFLOAT3(0.2f, -0.2f, 0.2f)
};

然后,他们经历必要的阶段以呈现到屏幕上(例如 DirectX 编程的 hello 世界)。我结合了来自直接输入演示的一些代码,并希望能够使用箭头键移动正方形。到目前为止,我有:

void SquareMove::Update( float dt )
{    
    keyboardDevice_->GetDeviceState(sizeof(keyboardKeys_), (LPVOID)&keyboardKeys_);
    // Button down event.
    if (KEYDOWN(prevKeyboardKeys_, DIK_DOWN) && !KEYDOWN(keyboardKeys_, DIK_DOWN))
    {
    PostQuitMessage(0);
    }

(这是为了测试我的例如向下箭头回调是否有效)。我现在不知如何实际实施移动广场所需的步骤。我知道这与D3DXMatrixTranslation有关,但我很难看到它们如何聚集在一起以执行必要的操作。谢谢

我不太清楚你是否真的理解翻译矩阵的效果。有很多很棒的教程可以指导您完成实现细节,所以我只想分享我感兴趣的内容 - 我首先理解渲染的方式。

简而言之,你必须学会可视化数学对你的对象的影响。正方形的顶点当前位于所谓的"模型"和"局部"空间中。也就是说,它们只是提供关于模型形状和大小(与 0,0,0 世界坐标相关的)的实际信息。现在你必须把它放在你的"世界"中。为此,您必须将对象的每个顶点移动("平移")到新位置,保持您刚刚在模型空间中定义的大小和形状 - 以相同的长度和方向平移每个顶点,以便具有相同向量的单词,将相同的计算应用于每个顶点。

在渲染中,对象的转换是通过矩阵实现的。每个矩阵在某些位置都有值,当与对象的坐标相乘时,这些值将以某种方式改变它。它们随后在对象坐标上的应用(通过乘法)应用了随后的转换 - 对象可能首先被旋转 - 这将围绕你的世界中心旋转它,即围绕(0,0,0),然后平移,然后再次旋转......这只是 3 个矩阵的乘法。

具体的实现可以在很多地方找到:http://www.directxtutorial.com/Lesson.aspx?lessonid=9-4-5

只是为了完整起见,这就是我设法做到的。在渲染函数中,我添加了以下内容

XMMATRIX m_Translation = XMMatrixTranslation(0.0f, fY, 0.0f);
XMMATRIX mvp = world*vpMatrix_*m_Translation;

(以前只是world*viewPortMatrix

其中 fY 通过按钮关闭事件进行控制

if (KEYDOWN(prevKeyboardKeys_, DIK_DOWN) && !KEYDOWN(keyboardKeys_, DIK_DOWN))
{
    fY -= 0.1f;
}

当运行应用程序时,我的对象会移动!