Quad auf Kamera ausrichten
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Quad auf Kamera ausrichten
Hallo,
ich habe mir ein kleines Programm zusammengestellt. Damit kann man Quad darstellen. Es funktioniert auch alles schön, aber jetzt würde ich diese Quads gerne zur Kamera ausrichten.
Was brauche ich alles um ein Quad (bestehend aus vier Vertices) auf die Kamera auszurichten. Am Anfang dachte ich ich nehme die Rotation der Kamera und übertrage diese auf das Quad, aber das scheint so nicht zu funktionieren.
ich habe mir ein kleines Programm zusammengestellt. Damit kann man Quad darstellen. Es funktioniert auch alles schön, aber jetzt würde ich diese Quads gerne zur Kamera ausrichten.
Was brauche ich alles um ein Quad (bestehend aus vier Vertices) auf die Kamera auszurichten. Am Anfang dachte ich ich nehme die Rotation der Kamera und übertrage diese auf das Quad, aber das scheint so nicht zu funktionieren.
- dot
- Establishment
- Beiträge: 1734
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Quad auf Kamera ausrichten
Am einfachsten platzierst du die Quads direkt im Viewspace (also ohne World Matrix).
- kimmi
- Moderator
- Beiträge: 1405
- Registriert: 26.02.2009, 09:42
- Echter Name: Kim Kulling
- Wohnort: Luebeck
- Kontaktdaten:
Re: Quad auf Kamera ausrichten
Das nennt man ein Billboard. Hier findest du, falls nötig, etwas darüber für OpenGL: http://www.lighthouse3d.com/opengl/billboarding/ .
Gruß Kimmi
Gruß Kimmi
Re: Quad auf Kamera ausrichten
Danke für das Tutorial :)
Aber jetzt funktioniert es.
Aber jetzt funktioniert es.
Re: Quad auf Kamera ausrichten
Ich habe es mit dem atan() berechnet, aber das geht sicher auch anders. Oder?
Obwohl mir das Ergebnis noch nicht gefällt.
Obwohl mir das Ergebnis noch nicht gefällt.
- dot
- Establishment
- Beiträge: 1734
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Quad auf Kamera ausrichten
HLTO hat geschrieben:Ich habe es mit dem atan() berechnet, aber das geht sicher auch anders. Oder?
:roll:dot hat geschrieben:Am einfachsten platzierst du die Quads direkt im Viewspace (also ohne World Matrix).
Re: Quad auf Kamera ausrichten
Und wie macht man das?dot hat geschrieben:Am einfachsten platzierst du die Quads direkt im Viewspace (also ohne World Matrix).
Gehts um DirecX oder OpenGL?
- dot
- Establishment
- Beiträge: 1734
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Quad auf Kamera ausrichten
Ist doch egal um welche API es geht. Platzier das Billboard im Viewspace, relativ zur Kamera, aka World Matrix auf Identity setzen...
- Artificial Mind
- Establishment
- Beiträge: 802
- Registriert: 17.12.2007, 17:51
- Wohnort: Aachen
Re: Quad auf Kamera ausrichten
Ich weiß nicht wie du darauf kommst das man nur die World Matrix weglassen muss ... Ich bin der Meinung du musst die View Matrix weglassen. Wenn du nur die World-Matrix auf Identity setzt, dann ist das Billboard ja noch nicht zwingen immer Camera-facing.dot hat geschrieben:Ist doch egal um welche API es geht. Platzier das Billboard im Viewspace, relativ zur Kamera, aka World Matrix auf Identity setzen...
Also ich habe solche Billboards in meinen Partikeln und die funktionieren so, dass ich per normaler WorldViewProjection den Mittelpunkt des Billboards in Cameraspace (vor Rehomogenisierung) transformiere und dann die entsprechnenden Billboardgrößen auf die x und y Koordinate addiere. Da das noch nicht wieder homogene Koordinaten sind, haben die Eckpunkte danach die richtige Skalierung. Das sollte eigentlich den gleichen Effekt haben als wenn man die Ausdehnung des Billboards erst nach der View und vor der Projection Matrix bestimmt.
Ich habe das allerdings im Geometry Shader:
Code: Alles auswählen
gl_Position = geometryPosition_cameraspace[0] + vec4(size, -size, 0, 0);
EmitVertex();
gl_Position = geometryPosition_cameraspace[0] + vec4(-size, -size, 0, 0);
EmitVertex();
gl_Position = geometryPosition_cameraspace[0] + vec4(size, size, 0, 0);
EmitVertex();
gl_Position = geometryPosition_cameraspace[0] + vec4(-size, size, 0, 0);
EmitVertex();
EndPrimitive();
Code: Alles auswählen
gl_Position = geometryPosition_cameraspace = mWorldViewProjection * vec4(vertexPosition, 1);
Zuletzt geändert von Artificial Mind am 28.02.2012, 22:33, insgesamt 1-mal geändert.
- dot
- Establishment
- Beiträge: 1734
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Quad auf Kamera ausrichten
Sry, da hast du natürlich recht, man muss sowohl World als auch View Matrix (bzw. in OpenGL eben die ModelView Matrix ) weglassen...
- Artificial Mind
- Establishment
- Beiträge: 802
- Registriert: 17.12.2007, 17:51
- Wohnort: Aachen
Re: Quad auf Kamera ausrichten
Gut, ich dachte schon ich hätte was falsch verstanden^^ "Einfach weglassen" ist natürlich nicht ganz vollständig, du solltest dir vorher den richtigen Billboardmittelpunkt ausrechnen und dafür brauchst du noch die World und View oder ModelView Matrix. Außer dein Billboard soll relativ zur Kamera bewegt werden :)
- dot
- Establishment
- Beiträge: 1734
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Quad auf Kamera ausrichten
Ja natürlich. Der Punkt ist eben, wie gesagt, das Quad im Viewspace zu platzieren...