Übung3 praktisch: Camera

Moderator: Graphische Datenverarbeitung 1

Benutzeravatar
Maradatscha
Computerversteher
Computerversteher
Beiträge: 353
Registriert: 2. Okt 2006 18:53

Übung3 praktisch: Camera

Beitrag von Maradatscha » 6. Dez 2008 14:00

Ich hab da mal so einige Fragen zur Camera Klasse:

was bedeuten die Vektoren view, up und right?

ist view die Richtung in die die Kamera schaut?
up und right machen dann aber keinen Sinn mehr.

Damit zusammenhängend: was bedeutet der Vektor up in der lookat funktion?

ich nehme an fov soll der vertikale Sichtwinkel in radiant sein?!?

banshee
Nerd
Nerd
Beiträge: 684
Registriert: 22. Okt 2006 18:46

Re: Übung3 praktisch: Camera

Beitrag von banshee » 6. Dez 2008 14:34

Jo, view ist die Blickrichtung und up der Vektor der lokalen y-Achse, weil wenn die Kamera fest auf nen Punkt guckt, kann man sie ja noch beliebig um die lokale z-Achse rotieren, ohne den view-Punkt zu ändern und das soll dann wohl mit dem up-Vektor festgelegt werden. Für right sehe ich dann allerdings auch keine Bedeutung mehr.

Mich würde auch mal interessieren, was lookat(float, float) und getRay(float, float) machen sollen. Sind das in beiden Fällen Winkel, um die man rotieren soll?

Benutzeravatar
Render
Windoof-User
Windoof-User
Beiträge: 32
Registriert: 12. Okt 2008 17:21

Re: Übung3 praktisch: Camera

Beitrag von Render » 6. Dez 2008 15:07

up und right hab ich auch so interpretiert. Ich vermute das ist so wie in dem Bild hier gemeint: http://www.povray.org/documentation/view/3.6.1/246/
banshee hat geschrieben: Mich würde auch mal interessieren, was lookat(float, float) und getRay(float, float) machen sollen. Sind das in beiden Fällen Winkel, um die man rotieren soll?
Ich vermute auch bei lookat(float,float) soll die Kamera um die winkel gedreht werden.
Bei getRay sollst du einen Sichtstrahl erzeugen, der durch (X,Y) in der Projektionsebene (Film in der Kamera) geht.

SebFreutel
Computerversteher
Computerversteher
Beiträge: 317
Registriert: 30. Okt 2006 21:54

Re: Übung3 praktisch: Camera

Beitrag von SebFreutel » 6. Dez 2008 15:11

banshee hat geschrieben:Mich würde auch mal interessieren, was [..] getRay(float, float) machen soll[...]
Ich hätte angenommen, dass x und y die Koordinaten des Pixels sind, durch den der Strahl geschossen wird, dessen Farbe man also letzten Endes berechnen will.

Wofür man right braucht, weiß ich auch nicht, bei der einen lookat-Variante wird ja auch nur up übergeben, sollte also reichen...

Und bei der zweiten lookat-Variante würde ich davon ausgehen, dass es sich um Winkel handelt, um die Richtung der Kamera-Mittelachse festzulegen (Breitengrad und Längengrad sozusagen), aber dann würde auch noch ein dritter Winkel fehlen um die Rotation des Bilds um diese Mittelachse zu bestimmen.

Benutzeravatar
Ronny
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 133
Registriert: 18. Nov 2005 14:33
Wohnort: IGD

Re: Übung3 praktisch: Camera

Beitrag von Ronny » 6. Dez 2008 15:15

Render hat geschrieben:up und right hab ich auch so interpretiert. Ich vermute das ist so wie in dem Bild hier gemeint: http://www.povray.org/documentation/view/3.6.1/246/
Der lookat(float,float) Befehl ist leider ein Relikt und sollte garnicht im Header sein.
View, Up und Right sollen das lokale Koordinatensystem der Kamera in Weltkoordinaten darstellen. Man benötigt sie, um den Befehl getRay zu implementieren. Der von Render angegebene Link beschreibt die Vektoren ganz gut.

Benutzeravatar
Ronny
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 133
Registriert: 18. Nov 2005 14:33
Wohnort: IGD

Re: Übung3 praktisch: Camera

Beitrag von Ronny » 6. Dez 2008 15:23

SebFreutel hat geschrieben:
banshee hat geschrieben:Mich würde auch mal interessieren, was [..] getRay(float, float) machen soll[...]
Ich hätte angenommen, dass x und y die Koordinaten des Pixels sind, durch den der Strahl geschossen wird, dessen Farbe man also letzten Endes berechnen will.
Genau das soll die Methode leisten. Die Parameter sind vom Typ float, damit man sich Strahlen erzeugen kann, die nicht genau durch die Pixelzentren gehen. Das kann verwendet werden um z.B. Anti-Aliasing zu implementieren.

banshee
Nerd
Nerd
Beiträge: 684
Registriert: 22. Okt 2006 18:46

Re: Übung3 praktisch: Camera

Beitrag von banshee » 11. Dez 2008 11:18

hallo,

wo ist denn genau der Unterschied zwischen den beiden intersect Methoden von Primitive? Am Beispiel der Kugel machen die doch exakt das gleiche, nur die eine füllt noch die Übergebene Intersection-Struktur. Oder soll das Prädikat immer den Schnitt mit dem Umgebungsquader testen?

Benutzeravatar
Red*Star
Kernelcompilierer
Kernelcompilierer
Beiträge: 510
Registriert: 28. Nov 2006 19:40

Re: Übung3 praktisch: Camera

Beitrag von Red*Star » 11. Dez 2008 11:25

Wenn du es intelligent (oder eher: "effizient") machst, machen sie nicht exakt das gleiche. Die eine Funktion bricht bereits nach der Berechnung von lambda ab, die andere rechnet noch den Schnittpunkt aus.
Was Sonnenschein für das schwarze Erdreich ist,
ist wahre Aufklärung für die Verwandten des Erdreichs.

- N.F.S. Grundtvig

Benutzeravatar
tm_n
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 105
Registriert: 3. Nov 2005 17:16
Wohnort: Frankfurt am Main
Kontaktdaten:

Re: Übung3 praktisch: Camera

Beitrag von tm_n » 12. Dez 2008 12:25

Ronny hat geschrieben:
SebFreutel hat geschrieben:
banshee hat geschrieben:Mich würde auch mal interessieren, was [..] getRay(float, float) machen soll[...]
Ich hätte angenommen, dass x und y die Koordinaten des Pixels sind, durch den der Strahl geschossen wird, dessen Farbe man also letzten Endes berechnen will.
Genau das soll die Methode leisten. Die Parameter sind vom Typ float, damit man sich Strahlen erzeugen kann, die nicht genau durch die Pixelzentren gehen. Das kann verwendet werden um z.B. Anti-Aliasing zu implementieren.
ich hab davor die Method getRay() etwas anders implementiert, und zwar bei meiner implementierung liegt das look-Point auf der Image-Ebene. Laut eures Link: http://www.povray.org/documentation/view/3.6.1/246/ kann das look-Point nicht auf Image-Ebene liegt, man braucht hier halt nur die Richtung. Wenn es so ist, kann man die getRay() Method nicht implementieren, weil die Richtung des Sichtstrahl nicht bestimmen kann. Ich meine es fehlt hier die z-Wert, weil nur durch Angabe von float x, float y hat man hier mehrere parallele Image-Ebenen, die die angegebenen Punkt(x,y,_) beinhaltet.
"Research works on disclosure, not on secrets"

Benutzeravatar
tm_n
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 105
Registriert: 3. Nov 2005 17:16
Wohnort: Frankfurt am Main
Kontaktdaten:

Re: Übung3 praktisch: Camera

Beitrag von tm_n » 12. Dez 2008 12:32

ich hab grad die z-Wert folgendes gerechnet, hoffentlich es stimmt:

z = width/2*tan(fov/2)

ist die z-Wert so gerechnet?
"Research works on disclosure, not on secrets"

Antworten

Zurück zu „Graphische Datenverarbeitung 1“