Quad auf Kamera ausrichten

Design Patterns, Erklärungen zu Algorithmen, Optimierung, Softwarearchitektur
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Antworten
HLTO
Beiträge: 10
Registriert: 09.09.2002, 17:46
Kontaktdaten:

Quad auf Kamera ausrichten

Beitrag von HLTO »

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.
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Quad auf Kamera ausrichten

Beitrag von dot »

Am einfachsten platzierst du die Quads direkt im Viewspace (also ohne World Matrix).
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: Quad auf Kamera ausrichten

Beitrag von kimmi »

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
HLTO
Beiträge: 10
Registriert: 09.09.2002, 17:46
Kontaktdaten:

Re: Quad auf Kamera ausrichten

Beitrag von HLTO »

Danke für das Tutorial :)

Aber jetzt funktioniert es.
joggel

Re: Quad auf Kamera ausrichten

Beitrag von joggel »

Wie hast du's gelöst?
HLTO
Beiträge: 10
Registriert: 09.09.2002, 17:46
Kontaktdaten:

Re: Quad auf Kamera ausrichten

Beitrag von HLTO »

Ich habe es mit dem atan() berechnet, aber das geht sicher auch anders. Oder?

Obwohl mir das Ergebnis noch nicht gefällt.
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Quad auf Kamera ausrichten

Beitrag von dot »

HLTO hat geschrieben:Ich habe es mit dem atan() berechnet, aber das geht sicher auch anders. Oder?
dot hat geschrieben:Am einfachsten platzierst du die Quads direkt im Viewspace (also ohne World Matrix).
:roll:
joggel

Re: Quad auf Kamera ausrichten

Beitrag von joggel »

dot hat geschrieben:Am einfachsten platzierst du die Quads direkt im Viewspace (also ohne World Matrix).
Und wie macht man das?
Gehts um DirecX oder OpenGL?
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Quad auf Kamera ausrichten

Beitrag von dot »

Ist doch egal um welche API es geht. Platzier das Billboard im Viewspace, relativ zur Kamera, aka World Matrix auf Identity setzen...
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: Quad auf Kamera ausrichten

Beitrag von Artificial Mind »

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...
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.

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();
mit

Code: Alles auswählen

	gl_Position = geometryPosition_cameraspace = mWorldViewProjection * vec4(vertexPosition, 1);
im Vertex Shader
Zuletzt geändert von Artificial Mind am 28.02.2012, 22:33, insgesamt 1-mal geändert.
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Quad auf Kamera ausrichten

Beitrag von dot »

Sry, da hast du natürlich recht, man muss sowohl World als auch View Matrix (bzw. in OpenGL eben die ModelView Matrix ) weglassen...
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: Quad auf Kamera ausrichten

Beitrag von Artificial Mind »

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 :)
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Quad auf Kamera ausrichten

Beitrag von dot »

Ja natürlich. Der Punkt ist eben, wie gesagt, das Quad im Viewspace zu platzieren...
Antworten