转换ID3D11Buffer的一部分
Transform part of an ID3D11Buffer
我正在制作一款赛车游戏,作为使用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。
相关文章:
- C++:如何使函数只返回作为列表一部分的字符串
- std::sort()函数无法对向量的一部分进行排序
- 将类型声明为类型模板参数的模板参数的一部分是否合法?
- 反转整数的一部分(一半)的函数
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- C 指针和对象作为不同类的一部分
- 如何分析代码的哪一部分创建了线程?
- 如何使用接口指针调用方法,该指针是其具体类的一部分,而不是接口的一部分
- 复制矩阵的一部分并粘贴到另一个矩阵C++上
- 我可以将c ++清理器仅应用于程序的一部分而不是第三方库吗?
- C++向量的哪一部分在传递给函数时被复制
- C++结构的一部分
- 在 MPI 中共享数组的一部分
- 如何检测文件夹是否太重,如果是,请删除其中的一部分
- 如何将文件的一部分读取到std::list缓冲区?
- c++中的交叉编译(作为跨平台应用程序的一部分或作为服务)
- 将constexpr字节数组与缓冲区的一部分(指向数据的指针)进行比较
- 如何将字符串的一部分转换为整数
- 如何有效地将一个大std::字符串的一部分转换为float
- OpenCV-如何将vale添加到图像一部分的所有像素