Ich erstelle eine 3D-Grafik-Engine und eine der Anforderungen ist Seile, die sich wie in Valve Source-Engine verhalten.Quelle Motor gestylt Seil Rendering
In der Quellmaschine ist ein Teil des Seils ein Vierer, der sich entlang seiner Richtung dreht, um der Kamera zugewandt zu sein. Wenn der Seilabschnitt also in + Z-Richtung ist, dreht er sich entlang der Z-Achse Das Gesicht zeigt auf die mittlere Position der Kamera.
Im Moment habe ich die Abschnitte von Seilen definiert, so dass ich ein schönes gebogenes Seil haben kann, aber jetzt versuche ich, die Matrix zu konstruieren, die sie entlang ihres Richtungsvektors dreht.
Ich habe bereits eine Matrix für die auf der Grundlage dieser Technik Billboard Billboarding Sprites Rendering: Constructing a Billboard Matrix Und im Moment habe ich versucht, es zu umrüsten, so dass rechts, oben, nach vorne Vektor der Seil Segment Richtungsvektor entsprechen.
Mein Seil besteht aus mehreren Abschnitten, jeder Abschnitt ist ein Rechteck aus zwei Dreiecken, wie ich oben sagte, kann ich die Position und Abschnitte perfekt, es ist das Drehen der Kamera, die mich viel verursacht von Problemen.
Diese in OpenGL ES2 ist und in C.
geschrieben I Doom 3 des Strahls Rendering-Code in Model_beam.cpp studiert haben, verwendet das Verfahren dort der Offset auf Normalen zu berechnen ist eher als Matrizen, so dass ich habe eine ähnliche Technik in meinem C-Code erstellt und es funktioniert zumindest so, wie ich es gerade brauche.
Also für diejenigen, die auch versuchen, diese herauszufinden, verwenden Sie das Kreuzprodukt des Mittelpunkts des Seils gegen die Kameraposition, normalisieren Sie das und multiplizieren Sie es dann, wie breit Sie das Seil sein möchten Wenn Sie die Scheitelpunkte konstruieren, versetzen Sie jeden Scheitelpunkt entweder in + oder - Richtung des resultierenden Vektors.
Weitere Hilfe wäre toll, aber das ist nicht perfekt!
Danke
Um etwas um einen bestimmten Winkel um eine bestimmte Achse zu drehen, verwenden Sie einen [quaternion] (https://en.wikipedia.org/wiki/Quaternion). –
Ich verwende derzeit Quaternionen, aber ich bin mir nicht sicher, wie man es in Richtung der Kameraposition dreht –
Lassen Sie die normale Rechteck/Abschnitt ist normal "N", und der Vektor entlang der Achse des Rechtecks sein "V". Dann gibt "VxN" den dritten Vektor "U", wobei "U" und "N" eine "horizontale Ebene" relativ zu Ihrem Seilabschnitt bilden. Berechnen Sie nun 'EyePos - C' (wobei' C' der Schwerpunkt Ihres Rechtecks ist) und normalisieren Sie es, um 'E', die Kamerarichtung, zu erhalten. Projizieren Sie 'E' auf die' UN'-Ebene, um 'E'zu erhalten. Schließlich ist die gewünschte Rotation (um die Achse "V") "Arccos (N. E ')". –