Frage

I Direct3D bin mit einer Reihe von I-Profilen in Stahlkonstruktion verwendet, um anzuzeigen. Es könnte Hunderte von Instanzen dieser I-Abschnitte am ganzen Szene sein.

Das kann ich zwei Möglichkeiten:

I-Sections

Methode A, habe ich weniger Flächen. Jedoch mit Backface-Culling eingeschaltet, werden die Oberflächen von nur einer Seite sichtbar. Wenn Backface-Culling ausgeschaltet ist, dann werden die Flansche (horizontale Platten) und Steg (vertikale Platte) können in der falschen Reihenfolge wiedergegeben werden.

Methode B scheint korrekt (und ich konnte Backface-Culling eingeschaltet bleiben), aber die Dicke der Platten in der I-Abschnitt in meinem Modell nicht von Bedeutung ist, und ich möchte, um zu vermeiden ein separates Dreiecksstreifen für jeden zu schaffen Seite der Platten.

Gibt es eine bessere Lösung? Gibt es eine Möglichkeit Backface-Culling für nur bestimmte Anrufe von DrawIndexedPrimitives auszuschalten? Ich möchte auch eine plattformneutrale Antwort auf diese Frage, wenn es einen gibt.

War es hilfreich?

Lösung

Zunächst einmal, Backface-Culling hat nichts mit dem zu tun, in denen Objekte gerendert werden. Other than that, würde ich für Ansatz B ohne besonderen Grund gehen außer, dass es wahrscheinlich besser aussehen. Auch dieses Objekt ist wahrscheinlich nicht mehr als eine Hand voll Dreiecken; Hunderte in einer Szene, das sollte kein Problem sein. Wenn ja, versuchen suchen in Hardware Instancing.

Andere Tipps

In OpenGL Sie können für jedes Dreieck wechseln von Backface-Culling Sie ziehen:

glEnable(GL_CULL_FACE);
glCullFace(GL_FRONT);
// or
glCullFace(GL_BACK);

Ich denke, etwas Ähnliches ist auch möglich, in Direct3D

Wenn Ihre I-Profile haben, dass nicht oft ändern, laden alle Abschnitte in einen großen Vertex / Indexpuffer und ziehen sie mit einem einzigen Anruf. Das ist die performante Art und Weise, Dinge zu zeichnen, und die Grafikkarte wird auch einen schnellen Job tun, wenn Sie eine halbe Million Dreieck schieben.

Ja, das erfordert, dass Sie die Vertexdaten für alle Abschnitte zu vervielfältigen, aber das ist, wie D3D9 soll verwendet werden.

I mit A als der Abstand gehen würden Sie von der B werden sehen, wäre eine Verschwendung wäre Macht der Verarbeitung all jene entarteten Dreiecke zu ziehen.

Auch würde ich sie einfach an einem z-Puffer Feuer und ermöglichen, dass sie alle heraus zu sortieren.

Wenn es zu langsam bekommen, dann würde ich bei der Optimierung beginnen suchen, aber auch Verbraucher-Grafikkarten können Millionen von Polygonen pro Sekunde zeichnen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top