转换ID3D11Buffer的一部分

Transform part of an ID3D11Buffer

本文关键字:一部分 ID3D11Buffer 转换      更新时间:2023-10-16

我正在制作一款赛车游戏,作为使用DirectX 11的任务的一部分,我已经将汽车模型加载到ID3D11Buffer中。由此,我想知道如何将汽车的车轮分别旋转到模型的其余部分。我有小车每一部分的起始和结束指标,所以我知道它是要旋转的那一部分,只是不知道如何分别平移它。(我不确定我包括代码是否有帮助,但如果有,只是让我知道)

为什么不加载模型到混乱?车轮是汽车的一部分,因此是汽车的一部分。使用submess,你可以在不改变其他部分的情况下单独转换和渲染它。

如果你真的想把它加载到ID3DBuffer中,我建议你创建两个缓冲区,一个容纳汽车的静态部分,另一个容纳车轮,这样,你可以在保持静态部分不变的情况下变换和渲染车轮。

在询问之后,我马上弄明白了,现在我已经实现了它,所以它工作得很好。

考虑到。obj文件支持顶点组,当您加载文件时,存储每组顶点的开始和结束位置,在。obj文件中以"g"开头的每个部分的名称,并计算每个组的中心点。

然后,确保要分别转换的每个部分都有一个XMFLOAT4X4,以及一个用于整个对象的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方法中,确保你使用了drawwindexed方法,将每个组的开始和结束索引都传递给它,如果它是一个车轮,则使用相关的车轮矩阵更新常量缓冲区的世界观矩阵,或者在所有其他情况下使用objectMatrix。