Frage

Ich bin derzeit ein VBO für die Texturkoordinaten, Normalen und den Eckpunkten eines (3DS) Modell I mit „glDrawArrays (GL_TRIANGLES, ...),“ bin Zeichnung. Zum Debuggen möchte ich (vorübergehend) auf die Normalen zeigen, wenn mein Modell zeichnen. Muß ich unmittelbaren Modus verwenden, um jede Zeile von vert zu ziehen + normalen -ODER- Sachen eines andere VBO mit vert und vert vert + normalen allen Normalen zu ziehen ... -ODER- gibt es eine Möglichkeit für die Vertex-Shader den Scheitelpunkt zu verwenden, und normale Daten bereits eingeleitet, wenn das Modell Ziehen des V + N zu berechnen, wenn die normalen zu zeichnen?

War es hilfreich?

Lösung

Nein, es ist nicht möglich, zusätzliche Linien von einem Vertex-Shader zu ziehen.

Ein Vertex-Shader nicht über das Erstellen von Geometrie ist, handelt es sich um pro Vertex Berechnung zu tun. Mit Vertex-Shader, wenn Sie glDrawArrays(GL_TRIANGLES,0,3) sagen, das ist, was genau angibt, was Sie zeichnen, das heißt 1 Dreieck. Sobald die Verarbeitung der Vertex-Shader erreicht, können Sie nur die Eigenschaften der Eckpunkt ändern dieses Dreiecks , ändert in keiner Weise oder Form, die Topologie und / oder Zählung der Geometrie.

Was Sie suchen ist, was OpenGL 3.2 definiert als Geometrie-Shader , das aus einer Shaderanzahl / Topologie zur Ausgabe beliebiger Geometrie ermöglicht. Beachten Sie jedoch, dass dies nur durch OpenGL 3.2 unterstützt werden, dass nicht viele Karten / Treiber jetzt unterstützen (es ist schon jetzt für ein paar Monate out).

Allerdings muss ich darauf hinweisen, dass Normalen (in den meisten Motoren, die eine Art von Debug-Unterstützung) zeigt in der Regel mit der traditionellen Linie Rendering, mit einem zusätzlichen Eckpunktpufferspeicher erfolgt, die in den richtigen Positionen gefüllt wird (P, P + C * N) für jede Maschenposition, wobei C eine konstante ist, die die Länge, die Sie verwenden möchten, darstellt, um die Normalen zu zeigen. Es ist nicht so komplex zu schreiben ...

Andere Tipps

Sie können dies annähernd durch die Geometrie zweimal zeichnen. Einmal zieht es wie gewohnt. Das zweite Mal, ziehen, um die Geometrie als GL_POINTS, und einen Vertex-Shader befestigen, die jede Scheitelpunkt-Position durch den Scheitelpunkt ausgleicht normal.

Dies würde im Modell über der Oberfläche schwimmen eine Menge von Punkten aufweist. Jeder Punkt würde zeigt die Richtung der Normalen vom Scheitel es entspricht.

Das ist nicht perfekt, aber ausreichend sein, je nachdem, was es ist, Sie hoffen, für sie zu verwenden.

UPDATE: AHA! Und wenn Sie in einem konstanten Skalierungsfaktor auf den Vertex-Shader übergeben, und haben Ihre Anwendung diesen Faktor zwischen 0 interpoliert und 1 wie die Zeit vergeht, um Ihre Punkte durch den Vertex-Shader gerendert wird im Laufe der Zeit animieren, an der Spitze beginnen sie anzuwenden, und dann in Richtung seiner normalen Schwimm aus.

Es ist wahrscheinlich möglich, mehr oder weniger die richtige Wirkung mit einem klug geschrieben Vertex-Shader, aber es wäre eine Menge Arbeit. Da dies für Zwecke ohnehin Debuggen ist, scheint es besser, nur ein paar Linien zu zeichnen; die Performance-Einbußen nicht schwer sein wird.

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