Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ DirectX 11移动我的方块_C++_Matrix_Directx_Directx 11 - Fatal编程技术网

C++ DirectX 11移动我的方块

C++ DirectX 11移动我的方块,c++,matrix,directx,directx-11,C++,Matrix,Directx,Directx 11,我正在学习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 world)。我结

我正在学习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 world)。我结合了一些来自直接输入演示的代码,希望能够使用箭头键移动正方形。到目前为止,我已经:

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);
    }

(这是为了测试我的eg.向下箭头回调是否有效)。我现在不知所措,不知道如何实际执行移动方块所需的步骤。我知道这与D3DXMatrixTranslation有关,但我很难看到它们是如何卷积在一起执行必要的操作的。谢谢

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

简而言之,你必须学会想象数学对你的物体的影响。正方形的顶点当前位于所谓的“模型”和“局部”空间中。也就是说,他们只是给出了模型的形状和大小的实际信息(与0,0,0世界坐标相关)。现在你必须在你的“世界”中定位它。为此,必须将对象的每个顶点移动(“平移”)到新的位置,保持模型空间中刚刚定义的大小和形状-以相同的长度和方向平移每个顶点,以便使用相同的向量对每个顶点应用相同的计算

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


具体的实现可以在很多地方找到:

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

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;
}

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

你最好先学数学,然后从2D开始,因为你的第三个坐标是相同的。事实上,如果我是你,现在就忘了DirectX3d,做一些2d线框的东西,比如说一个油漆盒组件。这听起来很有用。事实上,我对矩阵操作非常有信心(我在MATLAB中做了很多编程),但我很难找到在direct X中如何将所有这些结合在一起的示例。您所说的Paintbox是什么?windows组件Paintbox…这是一个非常好的描述,谢谢。我现在明白了,我没有完全理解它。我低估了需要做的事情,但这个链接是非常有用的,我现在会努力克服它。