位置、スケーリング、および回転のメンバーを持つ単純な IRenderable クラスがあります。
XMFLOAT3 _position;
XMFLOAT3 _scaling;
XMVECTOR _rotation;
コンストラクターでそれらを設定しようとしています。最初の方法では、_rotation を設定しようとしてアクセス違反 0x00000000 が発生します (_position と _scaling はどちらも適切に設定されています)。
IRenderable() : _position(XMFLOAT3(0, 0, 0)), _scaling(XMFLOAT3(1, 1, 1)), _rotation(XMQuaternionIdentity()) { }
代わりに _rotation を XMVECTOR* にし、コンストラクターで _rotation(new XMVECTOR()) を使用すると、空の XMVECTOR に設定されますが、後で ID クォータニオンを設定しようとすると、アクセス違反がスローされます。
*_rotation = XMQuaternionIdentity();
コンストラクターで XMQuaternionIdentity のアドレスを使用すると、オブジェクトの作成時に問題なく動作します。
IRenderable() : _position(new XMFLOAT3(0, 0, 0)), _scaling(new XMFLOAT3(1, 1, 1)), _rotation(&XMQuaternionIdentity()) { }
しかし、クォータニオン自体には、レンダリングに使用する必要があるまでにガベージ データが含まれます。これらすべての状況で、_position と _scaling の両方が正常に機能しています。
この状況で XMVECTOR を使用する正しい方法は何ですか?