转换ID3D11Buffer的一部分

时间:2014-03-25 17:25:05

标签: c++ directx directx-11

我正在使用DirectX 11制作赛车游戏作为任务的一部分,我已经将车型加载到ID3D11Buffer中。由此,我想知道如何将汽车的轮子分别旋转到模型的其余部分。我有汽车每个部分的起始和结束指数,所以我知道它要旋转的部分,而不是如何单独翻译它。 (我不确定我是否包含代码会有所帮助,但如果是这样,请告诉我)

2 个答案:

答案 0 :(得分:0)

为什么不加载模型来搞乱?车轮是汽车的一部分,因此是汽车的一部分。 对于子混乱,您可以单独转换和渲染它而不更改其他部分。

如果你真的想把它加载到ID3DBuffer中,我建议你创建两个缓冲区,一个保持汽车的静态部分,另一个握住轮子,这样,你可以转换和渲染轮子,同时保持静态部分不变。

答案 1 :(得分:0)

在询问之后,我立即想出来了,现在我已经实施了它以便它可以正常工作。

鉴于.obj文件支持顶点组,当您加载文件时,存储每组顶点的起始和结束位置,.obj文件中前面的每个部分的名称带有'g'at一行的开头,并计算每个组的中心点。

然后,确保每个要分别变换的部分都有一个XMFLOAT4X4,以及整个对象的一个​​部分。在这种情况下,我有objectMatrix和wheel1-4Matrix。我将我想要的任何变换应用于objectMatrix,这是一般的世界变换,用于移动汽车。对于每个车轮,请执行以下翻译

        XMMATRIX translate;
        translate = XMMatrixTranslation(-centre.x, -centre.y, -centre.z);

        translate *= XMMatrixRotationX(angleToBeMoved);

        translate *= XMMatrixTranslation(centre.x, centre.y, centre.z);

        translate = XMMatrixMultiply(translate, XMLoadFloat4x4(&objectMatrix));

        XMStoreFloat4x4(&wheel1, translate);

在更新期间将其应用于每个滚轮。在Draw方法期间,确保您使用DrawIndexed方法,将每个组的开始和结束索引传递给它,并使用相关的轮矩阵(如果它是一个轮子)或者使用objectMatrix更新常量缓冲区的世界视图矩阵在所有其他情况下。