我正在使用imguizmo来转换我的项目中的一个场景中的对象,我正在使用DirectX11.imguizmo接受一个模型矩阵来转换gizmo。它工作得很好,但是为了将gizmo转换成一个顶点,我需要给它一个转换矩阵,将它转换成那个顶点,这就是我如何生成4x4翻译矩阵的方法。
[ 1.f, 0.f, 0.f, x ]
[ 0.f, 1.f, 0.f, y ]
[ 0.f, 0.f, 1.f, z ]
[ 0.f, 0.f, 0.f, 1.f ]
xyz是我想把它翻译到的和弦。
但是它不起作用。在这之后,我的吉兹莫消失了。翻译矩阵不是这样工作的吗?
发布于 2019-07-28 21:24:28
这取决于您是使用行主矩阵、行向量和预乘法(Direct3D样式)还是使用列主矩阵、列向量和后乘(OpenGL样式)。
上面的翻译乍一看是“OpenGL样式”。
对于Direct3D,我通常希望它编写如下:
[ 1.f, 0.f, 0.f, 0 ]
[ 0.f, 1.f, 0.f, 0 ]
[ 0.f, 0.f, 1.f, 0 ]
[ x, y, z, 1.f ]
一般来说,其中一种是另一种的转位。
它还取决于您是使用列主矩阵还是行主矩阵来处理HLSL着色器,这可能需要在将矩阵放入常量缓冲区时将其转换。
见这篇博客文章。
如果您是DirectX编程新手,那么应该考虑DirectXMath的SimpleMath助手包装器,该包装器包含在DirectX工具包中。
https://stackoverflow.com/questions/57242868
复制相似问题