У меня есть простой класс 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 в этой ситуации?