Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

18.10.2014, 12:48

CMO Problem mit Backface culling

Hi,

ich wollte mal fragen, ob das normal ist, dass ich, wenn ich das Modell aus dem FBX-SDK-ViewScene-Beispiel mit Visual Studio in das CMO-Format konvertiere und dieses mit dem DirectX Toolkit in meinem Spiel zeichnen lasse, die Innenseite des Modell sehe. Die Oberfläche der Dreiecke zeigt nach innen. Wenn ich in das (viel zu groß dargestellte) Modell hineinfliege, sehe ich das komplette Modell von innen. Ich weiß, dass ich das über den Depth Stencil anpassen kann, sodass die andere Seite gezeichnet wird und man den Menschen von außen sieht, aber ich würde das lieber anders lösen, da ich eigentlich nicht den Depth Stencil verändern möchte, wenn ich Charaktere, Bäume etc. zeichne. Woran könnte das liegen, dass die Dreiecke alle nach innen zeigen? Ist einfach nur das Modell aus dem SDK falsch oder muss ich das irgendwo einstellen oder wie?

Grüße,
Magogan
Cube Universe
Entdecke fremde Welten auf deiner epischen Reise durchs Universum.

2

18.10.2014, 20:23

Zitat

über den Depth Stencil anpassen

Was meinst du damit?

Ich kenne mich weder mit FBX-SDK, noch mit DX-TK, noch mit dem CMO File format aus. Ich vermute einfach, dass die beiden Tools die Backfaces unterschiedlich bestimmen (CCW != CW). Möglicherweise kannst du das einstellen. "Falsch" ist das Modell deswegen nicht.
EnvisionGame(); EnableGame(); AchieveGame(); - Visionen kann man viele haben. Sie umzusetzen und auf das Ergebnis stolz zu sein ist die eigentliche Kunst.

3

18.10.2014, 21:12

Man kann das Backface-Culling ja anpassen: http://msdn.microsoft.com/de-de/library/…0(v=vs.85).aspx

Mich wundert das nur, dass es falsch herum ist... Na ja, mal sehen, dann ändere ich eben den Depth Stencil. Eine andere Lösung fällt mir auch gerade nicht ein...
Cube Universe
Entdecke fremde Welten auf deiner epischen Reise durchs Universum.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

18.10.2014, 23:01

Die Normalen Deiner Faces zeigen in die falsche Richtung. Da musst Du überhaupt nichts mit Stencil machen, sondern die Normalen fixen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

5

18.10.2014, 23:11

Dann wären die Flächen dunkler, stattdessen sind sie aber einfach von außen durchsichtig. Die Normalen sollten damit nichts zu tun haben, die werden nur für Lichtberechnung etc. verwendet. Außerdem müssten die eigentlich richtig sein. Hab das noch nicht ausprobiert, ich muss den Code vom DirectXTK eh noch anpassen, damit Deferred Shading unterstützt wird, dann sehe ich auch, ob das Licht richtig ist.
Cube Universe
Entdecke fremde Welten auf deiner epischen Reise durchs Universum.

6

18.10.2014, 23:26

Doch doch das hat schon was mit den normalen zu tun es wird sogar in der gelinkten Dokumentation explizit erwähnt, das Backface Culling ist ja dazu gedacht nur die Dreiecke zu rendern, deren Normalen in Richtung Kamera zeigen.
Es sollte also genügen, die normalen zu invertieren.

7

18.10.2014, 23:39

In DirectX wird das anhand der Reihenfolge der Eckpunkte bestimmt. Je nach Angaben bei der Initialisierung sind Dreiecke entweder dem Betrachter zugewandt, wenn die Eckpunkte im Uhrzeigersinn angeordnet sind oder wenn sie gegen den Uhrzeigersinn angeordnet sind (macht auch Sinn, da das weniger aufwendig zu berechnen ist). Mit den Normalen des Modells hat das nichts zu tun. Die stehen im Normalfall nicht einmal senkrecht auf den Flächen, sondern zeigen leicht schräg in verschiedene Richtungen, um eine korrekte Beleuchtung zu gewährleisten.
Cube Universe
Entdecke fremde Welten auf deiner epischen Reise durchs Universum.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Magogan« (18.10.2014, 23:46)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

19.10.2014, 08:23

Wie meinst Du denn bestimmt DirectX ob ein Dreieck mit oder gegen den Uhrzeigersinn definiert ist? Ganz einfach indem es aus den Eckpunkten ein Kreuzprodukt bildet und die Richtung der Normale (des Polygons! Nicht der Vertices!) analysiert. Wenn Du das also fixen willst, ändere die Reihenfolge der Indices. Das ist doch der offensichtlich logische Schluss. Im Normalfall behebt man diesen Fehler, indem man im 3D-Modellierungs-Programm die Normalen der Polygone umkehrt. Das macht das Modell weder dunkler, noch heller, sondern ändert die Richtungsdefinition seiner Faces.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

9

19.10.2014, 18:07

Ich weiß nicht, ob ich das ändern kann, das ist aber eh nur ein Testmodell. Ich werde mal andere Modelle ausprobieren, sobald ich welche erhalte. In der Zwischenzeit werde ich einfach mal die Richtung, die DirectX zum Feststellen, ob das die Vorderseite ist, verwendet, umdrehen.

Ich bin mir aber nicht sicher, ob das im Modell nicht doch richtig ist und irgendwas beim Konvertieren in CMO umgedreht wird oder so. Ich dachte, das wüsste von euch jemand.
Cube Universe
Entdecke fremde Welten auf deiner epischen Reise durchs Universum.

Werbeanzeige