Wie man richtig mit einem XMVECTOR member-variable

Habe ich eine einfache IRenderable Klasse, die Mitglieder hat, die position, Skalierung und rotation:

XMFLOAT3 _position;
XMFLOAT3 _scaling;
XMVECTOR _rotation;

Ich bin versucht, Ihnen mit der Konstruktor. Die erste Methode, hier gibt eine Zugriffsverletzung, 0x00000000 versuchen, _rotation (_position und _scaling sind beide in Ordnung):

IRenderable() : _position(XMFLOAT3(0, 0, 0)), _scaling(XMFLOAT3(1, 1, 1)), _rotation(XMQuaternionIdentity()) { }

Machen _rotation eine XMVECTOR* statt und mit _rotation(neue XMVECTOR () in den Konstruktor legt Sie auf einen leeren XMVECTOR, aber dann löst eine Zugriffsverletzung, später, wenn Sie versuchen, um die Identität Quaternion:

*_rotation = XMQuaternionIdentity();

Unter der Adresse der XMQuaternionIdentity im Konstruktor funktioniert gut, wenn Sie das Objekt erstellen,

IRenderable() : _position(new XMFLOAT3(0, 0, 0)), _scaling(new XMFLOAT3(1, 1, 1)), _rotation(&XMQuaternionIdentity()) { }

aber dann das quaternion selbst Müll enthält Daten, die durch die Zeit, die es braucht, um verwendet werden, zu machen. Beide _position und _scaling sind in Ordnung, die in all diesen Situationen.

Was ist der richtige Weise zu verwenden XMVECTOR in dieser situation?

Sieht aus wie ein bug mit XMVECTOR selbst: asawicki.info/news_1429_xna_math_and_access_violation.html

InformationsquelleAutor mikeschuld | 2011-07-24

Schreibe einen Kommentar