我正在使用DirectX 11制作赛车游戏作为任务的一部分,我已经将车型加载到ID3D11Buffer中。由此,我想知道如何将汽车的轮子分别旋转到模型的其余部分。我有汽车每个部分的起始和结束指数,所以我知道它要旋转的部分,而不是如何单独翻译它。 (我不确定我是否包含代码会有所帮助,但如果是这样,请告诉我)
答案 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更新常量缓冲区的世界视图矩阵在所有其他情况下。