我有一个简单的 IRenderable 类,它具有位置、缩放和旋转的成员:
XMFLOAT3 _position;
XMFLOAT3 _scaling;
XMVECTOR _rotation;
我正在尝试使用构造函数设置它们。这里的第一种方法给出了访问冲突 0x00000000 试图设置 _rotation (_position 和 _scaling 都设置好):
IRenderable() : _position(XMFLOAT3(0, 0, 0)), _scaling(XMFLOAT3(1, 1, 1)), _rotation(XMQuaternionIdentity()) { }
将 _rotation 改为 XMVECTOR* 并在构造函数中使用 _rotation(new XMVECTOR()) 将其设置为空 XMVECTOR,但稍后在尝试设置身份四元数时会引发访问冲突:
*_rotation = XMQuaternionIdentity();
在创建对象时,在构造函数中使用 XMQuaternionIdentity 的地址可以正常工作,
IRenderable() : _position(new XMFLOAT3(0, 0, 0)), _scaling(new XMFLOAT3(1, 1, 1)), _rotation(&XMQuaternionIdentity()) { }
但是四元数本身在需要用于渲染时包含垃圾数据。_position 和 _scaling 在所有这些情况下都可以正常工作。
在这种情况下使用 XMVECTOR的正确方法是什么?