2016-07-30 29 views
1

Ich habe eine C++ DirectX9-Rendering-Engine mit Y als meine Hochachse. Wenn ich ein Modell importiere, das mit Z als Hochachse modelliert wurde, vertausche ich einfach die Y- und Z-Werte aller Scheitelpunkte des Modells, um das Modell korrekt auszurichten. Dies funktioniert gut, außer dass die Wicklungsreihenfolge der meisten (nicht aller) Maschen falsch ist.So konvertieren Sie Z-Up-Scheitelpunkte in Y-Up-Scheitelpunkte, ohne die Wicklungsreihenfolge eines Polygonnetzes zu ändern. (DX9c)

Da ich das Modell mit aktiviertem Rückseitenauswählen rendert, sind die äußeren Hüllen der Modelle unsichtbar und die internen Hüllen sind sichtbar.

Ich habe die Indizes invertiert, um das Problem zu beheben, und es funktioniert gut ... aber da nicht alle Modelle die gleiche falsche Wicklungsreihenfolge haben, sitze ich mit der Hälfte der Modelle mit korrekten Wicklungsreihenfolgen und die andere Hälfte mit falschen Wickelanweisungen.

Also meine Frage ist dann: Wie konvertiere ich korrekt ein 3D-Modell mit Z als Hochachse zu einem 3D-Modell mit Y als Hochachse, ohne dabei die Wicklungsreihenfolge zu brechen.

Vielen Dank im Voraus.

+0

Vertauschen Sie das Y mit -Z. –

Antwort

1

Wickelanweisungen sind falsch, wenn Sie die Händigkeit Ihres Koordinatensystems nicht beibehalten. In der Regel ist (x, y, z) ein RECHTSHÄNDIGES Koordinatensystem: Wenn Sie also den rechten Daumen in die + x-Richtung und den rechten Zeigefinger in die + y-Richtung zeigen, werden die anderen drei Finger natürlich eingerollt sollte in Richtung + z zeigen. Möglicherweise haben Sie Ihre Koordinaten so umgedreht, dass das System von Rechts- auf Linkshänder geändert wurde. (x, y, z) kann zu (y, z, x) oder (z, x, y) geändert werden, aber die anderen Permutationen werden die falsche Windung zeigen.

+0

Hallo Bruce. Danke für die Antwort. Meine Engine verwendet ein linkshändiges Koordinatensystem (direct3D) und das Mesh, das ich importieren muss, stammt von einem Rechtshänder-System ... der folgende Link beschreibt schön, wie man mit dem exakten Fall umgeht ... aber mein Problem ist dass die Daten, die ich importieren muss, rechtshändig und die Hochachse Z ist. Also muss ich es für ein linkshändiges System mit Y- up umwandeln und die Wicklungsaufträge in Takt halten. – DPVisser

+0

https://msdn.microsoft.com/en-us/library/windows/desktop/bb204853(v=vs.85).aspx – DPVisser