Visual c++ XMMATRIX运算符()使用xnamath.h,但不使用DirectXMath.h 我是DirectX编程和Visual C++的新手,我有一个问题,我从XnasAT.h移植到DirectXMax.h的例子。我正在使用Visual Studio 2012
代码的目的只是初始化XMMATRIX,然后在控制台中显示它。原始代码如下所示(工作正常): 但是,当我将标题更改为DirectXMath时,它将不再工作:Visual c++ XMMATRIX运算符()使用xnamath.h,但不使用DirectXMath.h 我是DirectX编程和Visual C++的新手,我有一个问题,我从XnasAT.h移植到DirectXMax.h的例子。我正在使用Visual Studio 2012,visual-c++,directx,directx-11,Visual C++,Directx,Directx 11,代码的目的只是初始化XMMATRIX,然后在控制台中显示它。原始代码如下所示(工作正常): 但是,当我将标题更改为DirectXMath时,它将不再工作: #include <windows.h> #include <iostream> #include <DirectXMath.h> #include <DirectXPackedVector.h> using namespace DirectX; using namespace DirectX
#include <windows.h>
#include <iostream>
#include <DirectXMath.h>
#include <DirectXPackedVector.h>
using namespace DirectX;
using namespace DirectX::PackedVector;
using namespace std;
ostream& operator<<(ostream& os, CXMMATRIX m)
{
for(int i = 0; i < 4; ++i)
{
for(int j = 0; j < 4; ++j)
os << m(i, j) << "\t";
os << endl;
}
return os;
}
int main()
{
XMMATRIX A(1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 2.0f, 0.0f, 0.0f,
0.0f, 0.0f, 4.0f, 0.0f,
1.0f, 2.0f, 3.0f, 1.0f);
cout << "A = " << endl << A << endl;
return 0;
}
当我将鼠标悬停在m(I,j)
下的红色曲线上时,它告诉我:
DirectX::CXMMATRIX m
Error: call of an object of a class type without appropriate operator() or conversion function to pointer-to-function type
如果您有任何建议,我们将不胜感激。这取决于您用于DirectXMath的版本,您可以定义_XM\u NO\u intrinsic以获得所需的结果。有关更多信息,请参见我将示例代码更改为使用
ostream& operator<<(ostream& os, CXMMATRIX m)
{
for(int i = 0; i < 4; ++i)
{
for(int j = 0; j < 4; ++j)
os << m.r[i].m128_f32[j] << "\t";
os << endl;
}
return os;
}
ostream&operator在Direct X 11+中,直接访问矩阵的能力
matrix (row, column)
由于性能问题,已删除。Microsoft建议通过r
成员访问这些值。我建议使用
XMStoreFloat4 (row, column)
对于4x4矩阵,您不需要担心数据类型
ostream& operator<< (ostream& os, CXMMATRIX m)
{
for (int i = 0; i < 4; i++)
{
XMVECTOR row = m.r[i];
XMFLOAT4 frow;
XMStoreFloat4(&frow, row);
os << frow.x << "\t" << frow.y << "\t" << frow.z << "\t" << frow.w << endl;
}
return os;
}
ostream和操作符
matrix (row, column)
XMStoreFloat4 (row, column)
ostream& operator<< (ostream& os, CXMMATRIX m)
{
for (int i = 0; i < 4; i++)
{
XMVECTOR row = m.r[i];
XMFLOAT4 frow;
XMStoreFloat4(&frow, row);
os << frow.x << "\t" << frow.y << "\t" << frow.z << "\t" << frow.w << endl;
}
return os;
}