PDA

View Full Version : [Frage] Viewing - Projection: ???


wrzsef
11-11-2002, 00:17
Die Umwandlung in World-Coordinates scheint ja jeder relativ frei durchführen zu können (ich verschiebe beispielsweise das Objekt, so wie aus der Datei geladen in vertexTable[][] , so verschiebe (translation-transformation) dass alle Punkte im Positiven Bereich liegen - wobei es wahrscheinlich gscheiter ist, die Punkte in einer Schleife so umzurechnen, dass sie zB nur Werte zwischen 0 und 1 einnehmen).

ABER: was ich absolut nicht behirne ist der (optionale) Teil der Viewing Coordinates. So wie ich es verstehe, definiere ich eine camera-view, also eine art Weltfenster, eine Position (und irgendwelche Vektoren) von wo und wie ich die Welt ansehe. Aber bei der Projektion (also die Umwandlung der 3-dimensionalen Koordinaten in die X,Y Koordinaten der 2-dimensionalen, konkreten Darstellung) wird ja etwas sehr ähnliches getan! Denn bei der nicht-generellen Perspectiv-Projection (die im Buch zuerst erklärt wird) bestimme ich wo sich der View-Plane (vp / der virtuelle Bildschirm?) und wo sich der Betrachter (prp / der Perspectiv-Projection-Point), jeweils auf der Z-Achse befindet. Damit sage ich doch nochmals auf eine bestimmte Art und Weise wo ich mich befinde, wie das Objekt also dargestellt wird.

Diese beiden Parameter verändern, je nachdem was ich für diese einsetze (welche Werte sollte man da überhaupt einsetzen?), die Sichtweise des Objekts. Wozu soll ich also davor noch mühsam Viewing-Coordinates einer camera-sicht berechnen? Diese wird dann durch die Projection eh wieder verändert! Bei der generellen Perspective Projection scheint es mir noch schlimmer: hier kann ich den Perspective-Projection-Point völlig frei als x,y,z Punkt auswählen - das ist doch dann meine Position als Betrachter - wozu also davor nocht eine camera-sicht definieren/berechnen???

gck
11-11-2002, 15:39
1) Kamera Modell ist sehr einfach zu implentieren: such dir einfach einen Punkt im Raum, wo deine Kamera sein soll, dann einen zweiten Punkt, auf den du von der Kamera schauen willst.

Die positive Z Achse ist der Vektor zwischen diesen beiden Punkten.

Jetzt such dir einen Vektor, der das "Oben" deiner Kamera anzeigen soll, der muss natürlich normal auf den Z-Vektor sein -> einfachster Weg: nimm einen ca. Vektor und projezier ihn auf die Ebene, die dein Z-Vektor definiert, dann hast du einen passenden Normalvektor darauf, der die pos. Y-Achse angibt.

Jetzt kannst du mittels Kreuzprodukt leicht den Vektor für die Kamera X-Achse ausrechnen.

Anschließend translatierst du den Weltkoordinaten-Ursprung in den Kam. koord. Ursprung. Dann rotierst du die Welt X,Y,Z-Achsen in die entsprechenden Kamera X,Y,Z-Achsen.

Fertig, jetzt hast du die Kamera Koordinaten.

Für die Projektion ist eine vorhergehende Umrechnung in Viewing Koordinaten irrelevant, die Viewplane und den PRP wählst du immer gleich, egal, wo die Kamera ist...

Die Viewplane ist wohl am sinnvollsten auf der Kamera XY Ebene, den PRP hab ich durch ausprobieren gewählt, größere Werte scheinen gut zu funkionieren: ich hab einfach vom Kopf aus auf den Hals meiner Gitarre geschaut und abgeschätzt, wie weit hinter meinem Kopf sich die Seiten wohl treffen müssten -> Ergebnis: ziemlich weit :-)

Außerdem ist es sinnvoll, den PRP so zu wählen, dass die Linien der Objekte in den Mittelpunkt des Canvas fluchten, und nicht in das Eck links oben (wenn PRP auf Z-Achse).
Das kann mittels dieser Operation, die im Buch "shearing" heißt, erreicht werden, i.e. man sheart das projezierte Bild so, dass der Fluchtpunkt in der Mitte des Canvas liegt...

Letzterer Teil ist aber sicherlich optional, schaut einfach besser aus...

Jokeman
14-11-2002, 00:11
aus CG1Object
/*
TODO 3: von den Projektionskoordinaten geht es nun in die Device Koordinaten des Bildschirmfensters
Hinweis: durch das Clipping liegen die Projektionskoordinaten von sichtbaren Vertices, abhängig von der Projektion, in einem gewissen Bereich (z.B: x und y liegen zwischen -1 und +1).
*/


der hinweis is für mich ein wenig verwirrend...
warum liegen x und y zwischen -1 und 1?
und vorallem durch welches clipping? geclippt wird doch erst beim zeichnen der polygone

irgendwas versteh ich da scheinbar falsch...

wie habt ihr das interpretiert?

gck
14-11-2002, 14:22
die erklärung dazu hat der Übungsleiter Wimmer netterweise (danke nochmals) in der CG Newsgroup (at.tuwien.cg) gepostet!

Dort kannst du es dir durchlesen!

Jokeman
15-11-2002, 17:32
ich kann aus irgend einem grund die newsgroup nicht abfragen, bin aber an das posting von herrn Wimmer gekommen...

ist jetzt etwas klarer geworden... doch wie deffiniere ich ein field of view von 90 Grad... das geht aus kapitel 12.3 nicht wirklich hervor, weil hier die view-plane als unendlich groß angenommen wird...
muss ich da diese shear matrix aus kapitel 12.4 nehmen, um die view-plane in ihrer größe zu deffinieren?

danke im voraus

Kuschelmaus
15-11-2002, 21:48
wärs vielleicht irgendwie möglich das da im forum auch was drüber steht? gibt nämlich auch leute, die nicht in die newsgroup reinkommen und trotzdem gern das beispiel abgeben würden!

Silver Surfer
15-11-2002, 22:13
hier das posting von der newsgroup


1) Das device-Koordinatensystem hat nichts mit irgendeiner "Normalisierung" zu
tun

2) Bei der Projektion hängt es dann von den Kameraparametern ab, in welchem
Bereich die Koordinaten liegen, die dann sichtbar sein sollen. Genauer gesagt
hängt es hauptsächlich vom field of view ab (also dem Öffnungswinkel der
Kamera), und von der Entfernung der viewplane. Am einfachsten ist eine Kamera
mit einem field of view von 90 Grad (also 45 Grad in jede Richtung), und einer
viewplane, die eine Einheit vom Ursprung der Kamera entfernt ist. Wie man sich
leicht überzeugt, liegen dann alle Koordinaten auf der viewplane, die in
diesem 90 Grad-Bereich liegen, zwischen -1 und +1.

3) Sollte man andere Kameraparameter gewählt haben, kommt hier ein anderer
Bereich raus (also z.B. viewplane weiter weg oder anderer Öffnungswinkel).
Deswegen habe ich auch geschrieben, alle Koordinaten liegen in einem
bestimmten Bereich (nicht notwendigerweise [-1,+1].

4) Im so einem Falle einer anderen Kamera (und das habe ich bis jetzt noch
nicht dazugesagt) sorgt man aber üblicherweise der Einfachheit halber trotzdem
dafür, daß das Ergebnis zwischen [-1,+1] liegt. Das erreicht man besten, indem
man durch halbe Breite bzw. Höhe des sichtbaren Ausschnitts der viewing plane
dividiert. Das könnte man jetzt (und hier muß ich mich selbst korrigieren) als
"Normalisierung" bezeichnen. Dies hat aber trotzdem nichts mit den
Devicekoordinaten zu tun!

Es tut mir leid, wenn das Thema zu Konfusion geführt hat, und hoffe, daß es
jetzt etwas klarer ist...

Michael Wimmer

Kuschelmaus
16-11-2002, 19:34
thanx!

ich hätt trotzdem noch eine frage. bei der umrechnung auf projectionskoordinaten hab ich die gleichung von seite 445, und zwar die (12-17) gnommen. aber welchen wert nimmt ma da, damit die koordinaten nachher für alle objekte zwischen -1 und +1 liegen? ich schaff das einfach nicht... :mad:

außerdem, was mach ich dann mit den z-Werten? bleiben die einfach gleich?

nachtmensch
16-11-2002, 20:57
naja, falls ihr nicht in die newsgroup kommts, könnts ja auch über http://groups.google.com probieren und dort einfahc at.tuwien.cg eingeben