【问题标题】:How to build XMMATRIX using four FMVECTOR如何使用四个 FMVECTOR 构建 XMMATRIX
【发布时间】:2023-03-14 05:29:01
【问题描述】:

是否可以使用四个 FMVECTOR 构建 XMMATRIX?我从 Frank Luna 的书中汲取了这个想法,并试图围绕它构建一些东西,但不幸的是,很明显我没有很好地掌握这个概念。 这是我写的。好的,我知道这段代码很烂,但我是想要学习所有东西(甚至可能更多)的人之一,所以我尝试了。

XMVECTOR MyArray[4];
XMMATRIX() {}

XMMATRIX MyMatrix(FXMVECTOR MyArray0, FXMVECTOR MyArray1, FXMVECTOR MyArray2, CXMVECTOR My Array3 )
{
    r[0] = MyArray1;  r[1] = MyArray1; r[2] = MyArray1; r[3] = MyArray1;
}

float MyArray1[4] = { 1.0f, 3.0f, 6.0f, 5.0f };
float MyArray2[4] = { 4.0f, 3.0f, 3.0f, 7.0f };
float MyArray3[4] = { 1.0f, 3.0f, 6.0f, 3.0f };
float MyArray4[4] = { 1.0f, 0.0f, 6.0f, 0.0f };

【问题讨论】:

标签: c++ directxmath


【解决方案1】:

正如here 所说,您需要一个构造函数。

使用示例:

XMVECTOR vec_array[4] = 
{
    { 1.0f, 3.0f, 6.0f, 5.0f },
    { 4.0f, 3.0f, 3.0f, 7.0f },
    { 1.0f, 3.0f, 6.0f, 3.0f },
    { 1.0f, 0.0f, 6.0f, 0.0f }
}; 

XMMATRIX matrix(vec_array[0], vec_array[1], vec_array[2], vec_array[3]);

【讨论】:

  • 太棒了。谢谢!
  • 如果您已经有四个 XMVECTOR 值,请注意一种稍微更有效的方法:XMMATRIX matrix; matrix.r[0] = vec_array[0]; matrix.r[1] = vec_array[1]; matrix.r[2] = vec_array[2]; matrix.r[3] = vec_array[3]; 也就是说,请记住 XMVECTORXMMATRIX 确实是 SSE 寄存器的代理,而不是数据-类型。请参阅 [Microsoft Docs(docs.microsoft.com/en-us/windows/win32/dxmath/…)。
  • 感谢 Chuck 再次回复我。抱歉迟到了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
  • 1970-01-01
  • 2012-11-28
  • 2023-02-16
  • 2022-11-02
相关资源
最近更新 更多