我正在学习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 :(得分:2)
我不太清楚你是否真正了解翻译矩阵的效果。有许多很棒的教程可以指导您完成实现细节,所以我只想分享一下我感兴趣的东西 - 我理解渲染的方式。
简而言之,你必须学会想象数学对你的对象的影响。您的方块的顶点当前位于所谓的“模型”和“本地”空间中。即他们只是提供有关模型形状和大小的信息(与0,0,0世界坐标相关)。现在你必须把它放在你的“世界”中。为此,您必须将对象的每个顶点移动(“平移”)到新位置,保持您在模型空间中定义的大小和形状 - 以相同的长度和相同的方向平移每个顶点和形状,按照具有相同向量的单词,将相同的计算应用于每个顶点。
在渲染中,对象的变换是通过矩阵实现的。每个矩阵在某些位置具有值,当与对象的坐标相乘时将以某种方式改变它。它们随后在物体坐标上的应用(通过乘法)应用随后的变换 - 一个物体可能首先被旋转 - 这将围绕你的世界的中心旋转它,即大约(0,0,0),然后平移,然后再旋转。 ..这只是3个矩阵的乘法。
具体实施可以在很多地方找到:http://www.directxtutorial.com/Lesson.aspx?lessonid=9-4-5
答案 1 :(得分:0)
为了完整起见,我就是这样做的。在渲染功能中,我添加了以下内容
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;
}
运行应用程序时,我的对象会移动!