Ich habe ein seltsames Problem mit meiner Direct3D11-Anwendung, die ich bereits seit einigen Stunden beheben möchte. Das Problem ist diese Methode:
%Vor%Alles ist gut, bis es diese Zeile erreicht:
%Vor%Irgendwie führt es zum Absturz der Anwendung (die Schalter reagieren nicht richtig).
Und hier sehen Sie, wie die tatsächlichen Anrufe aussehen:
%Vor%Im Voraus können Vertex- und Pixel-Shader problemlos kompiliert werden. Das ist also kein Problem. Höchstwahrscheinlich mache ich etwas falsch mit Xnamath (ich bin völlig neu damit), aber ich habe keine Ahnung, was auf der Erde das sein könnte. Danke im Voraus. Ich werde bei Bedarf weitere Informationen bereitstellen.
Bearbeiten @ 1: Mit Dutzenden von Änderungen konnte ich Projection- und World-Matrizen zum Laufen bringen. Allerdings kann ich die Ansichtsmatrix immer noch nicht einstellen. Ich habe den Code geändert, so dass er mit dem tatsächlichen Code übereinstimmt und nicht mehr wichtig ist.
Bearbeiten @ 2: Aktuelle Nachrichten von letzter Minute: Es gibt kein Problem mit der XMMatrixLookAtLH-Funktion, weil ich mich entschieden habe, das Ergebnis in einer lokalen Variablen zu speichern, und es funktioniert, aber wenn ich es zuweisen möchte Ergebnismatrix zum Klassenmitglied dann bekomme ich den Absturz. Das ist sehr interessant.
Nachdem ich viele Stunden damit verbracht habe, dieses Problem zu lösen, glaube ich, dass ich es endlich gelöst habe.
XMMATRIX stellt eine 16-Byte-ausgerichtete Matrix dar, und die nicht ausgerichtete Zuordnung von XMMATRIX verursacht diesen Fehler, wenn Sie versuchen, den Wert zu kopieren. Dies würde erklären, warum es nicht immer passiert und warum es in einem anderen Modus funktioniert.
Die beste Lösung, die ich für dieses Problem gefunden habe, ist die Verwendung eines XMFLOAT4X4 zum Speichern des Werts.
Hier ist ein einfaches Beispiel:
%Vor%Da der Absturz bei der Zuweisung passiert: m_ViewMatrix = XMMatrixLookAtLH (...
und der Build klappt besser in x64 als x86 Ich würde annehmen, dass die m_ViewMatrix oder sogar ihr Container m_Camera in einem Speicherbereich abgebildet ist, der mit etwas anderem geteilt wird. Memory-Posen. Die Verschiebung zu 64bit ist ein weiterer Indikator dafür, da möglicherweise die Erinnerung verschoben wurde, um das Problem zu verbergen.
Wie ordnen Sie das Feld m_Camera zu? Was ist der Hauptbehälter für alles?
Veröffentlichen Sie den vollständigen CameraClass-Header und den Ort, an dem Sie ihn zuweisen. Versuchen Sie auch, einige Felder um die Felder zu streuen und sehen Sie, ob das hilft. Das würde bedeuten, dass die Erinnerung auch nicht stimmt.
Tags und Links c++ matrix direct3d11 xna-math-library