Assertion failed: !XMVector3Equal(Axis, XMVectorZero())

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
spobat
Beiträge: 86
Registriert: 13.09.2010, 00:20
Kontaktdaten:

Assertion failed: !XMVector3Equal(Axis, XMVectorZero())

Beitrag von spobat »

Hallo,

Ich bekomme jedesmal folgenden asserion-error:
Assertion failed: !XMVector3Equal(Axis, XMVectorZero()), file c:\program files (x86)\microsoft directx sdk (june 2010)\include\xnamathmatrix.inl, line 1441

Code:

Code: Alles auswählen

XMMATRIX a= XMMatrixRotationAxis( v1, f1);
v1 ist 1, 0, 0, 0; f1 = 0;
Insoweit stimmt die assertion.
Ich finde es dennoch merkwürdig, schließlich kann ich rotationAxis auch auf andere Vektoren ohne fehler ausüben( beispiel vektor 0, 0, 1, 0 )
Jörg
Establishment
Beiträge: 296
Registriert: 03.12.2005, 13:06
Wohnort: Trondheim
Kontaktdaten:

Re: Assertion failed: !XMVector3Equal(Axis, XMVectorZero())

Beitrag von Jörg »

Wie erzeugst Du denn den Vektor v1? Sieht mir danach aus, als ob du einen mit (x=y=z=0,w=1) vorliegen hast. Benutzt Du denn auch ordentlich die Load bzw. Set-Funktionen, um v1 seine Werte zuzuweisen?
Benutzeravatar
spobat
Beiträge: 86
Registriert: 13.09.2010, 00:20
Kontaktdaten:

Re: Assertion failed: !XMVector3Equal(Axis, XMVectorZero())

Beitrag von spobat »

Klar:

Code: Alles auswählen

      XMFLOAT4 v2;
	XMStoreFloat4(&v2, XMVectorSet(1, 0, 0, 0));
	XMVECTOR v1 = XMVectorSet(v2.x, v2.y, v2.z, v2.w);
// aus gründen der oop(klasse wird dynamisch allokiert) wird es aus einem float4 gelesen

#EDIT #1
So sieht der vektor aus(v1 = vLook);
Bild
Was mich da ebenfalls verwundert, oben steht 1, 0, 0, 0
und in den eigenschaften dann 0, 0, 0, 1.
Ist das so normal?
Jörg
Establishment
Beiträge: 296
Registriert: 03.12.2005, 13:06
Wohnort: Trondheim
Kontaktdaten:

Re: Assertion failed: !XMVector3Equal(Axis, XMVectorZero())

Beitrag von Jörg »

Ja auf diese Weise sollte so funktionieren, und ich kann den Fehler mit den bisherigen Angaben leider nicht reproduzieren:

Code: Alles auswählen

XMFLOAT4 v2;
XMStoreFloat4(&v2, XMVectorSet(1, 0, 0, 0));
XMVECTOR v1 = XMVectorSet(v2.x, v2.y, v2.z, v2.w);
XMMATRIX a= XMMatrixRotationAxis( v1, 10.f);
Also muesstest Du wohl etwas mehr von dem "dynamischen Drumherum" zeigen, um zu schauen, ob der Fehler wirklich in diesen 4 Zeilen liegt.

Gruss!

Joerg
Benutzeravatar
spobat
Beiträge: 86
Registriert: 13.09.2010, 00:20
Kontaktdaten:

Re: Assertion failed: !XMVector3Equal(Axis, XMVectorZero())

Beitrag von spobat »

Gut, ich habe die gesamte klasse etwas anders initialisiert.
Und zwar in einer zweiten klasse
myclass *instance;
und in deren ctor dann eben mit new zugewiesen.
vorher hatte ich das ganze ding auf dem stack gehabt.

myclass instance(...);
instance.foo(...);

Ich bin mir nicht sicher, warum es dadurch gelöst wurde, aber ich freue mich trotzdem.
( Btw hat jemand eine erklärung für das bild oben? [ erst wird (1, 0, 0, 0) angezeigt, dann (0, 0, 0, 1) ] )

mfg,

dst :D
Benutzeravatar
eXile
Establishment
Beiträge: 1136
Registriert: 28.02.2009, 13:27

Re: Assertion failed: !XMVector3Equal(Axis, XMVectorZero())

Beitrag von eXile »

Sollte normal sein und auf allen Little-Endian-Systemen auftauchen. Dass die Elemente darüber anders angezeigt werden, wird wohl am standardmäßgen preview-Eintrag beim Debugger-Visualizer für den __m128-Datentyp liegen.
Antworten