Seite 1 von 1
Assertion failed: !XMVector3Equal(Axis, XMVectorZero())
Verfasst: 18.09.2010, 10:56
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:
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 )
Re: Assertion failed: !XMVector3Equal(Axis, XMVectorZero())
Verfasst: 18.09.2010, 11:10
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?
Re: Assertion failed: !XMVector3Equal(Axis, XMVectorZero())
Verfasst: 18.09.2010, 11:31
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);

Was mich da ebenfalls verwundert, oben steht 1, 0, 0, 0
und in den eigenschaften dann 0, 0, 0, 1.
Ist das so normal?
Re: Assertion failed: !XMVector3Equal(Axis, XMVectorZero())
Verfasst: 18.09.2010, 13:57
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
Re: Assertion failed: !XMVector3Equal(Axis, XMVectorZero())
Verfasst: 18.09.2010, 16:49
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
Re: Assertion failed: !XMVector3Equal(Axis, XMVectorZero())
Verfasst: 18.09.2010, 17:01
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.