Discussion:
bsp.3. transformation zu device koordinaten + z-koordinate
(zu alt für eine Antwort)
Franz Hess
2003-11-12 16:54:53 UTC
Permalink
hi!

ich habe zwei fragen:

1. zur transformation in devicekoordinaten wollte ich zuerst die matrix aus
dem buch verwenden. die hat aber nicht funktioniert, deshalb hab ich eine
eigene transformation (auf grund der in der vorlesung gebrachten grundlagen)
entwickelt, die jetzt die gewünschten ergebnisse liefert.
allerdings hab ich diese transformation nicht in eine matrix gepackt, da ich
mir dadurch einige unnötige multiplikationen und additionen spare.
ich würde gern wissen, ob ich umbedingt eine matrix verwenden soll (muss)
und ob diese aus dem buch sein muss, oder ob ich meine eigene transformation
verwenden kann.

2. wenn ich die viewkoordinaten mit der projection matrix transformiere,
erhält der z-wert automatisch den z-wert der view plane. in der angabe
steht, dass wir die z koordinate separat speichern sollen (fürs z-buffering)
.
meine frage ist jetzt, wo wir die z-koordinate abspeichern sollen. ist es
legitim, wenn ich sie vor der transformation in ein array abspeichere und
nach der transformation in die devicekoordinaten wieder mit den
transformierten punkten zusammenführe oder soll ich sie an irgendeinem
anderen ort abspeichern?

mfg, franz hess
Michael Wimmer
2003-11-12 17:38:50 UTC
Permalink
Post by Franz Hess
hi!
1. zur transformation in devicekoordinaten wollte ich zuerst die matrix aus
dem buch verwenden. die hat aber nicht funktioniert, deshalb hab ich eine
eigene transformation (auf grund der in der vorlesung gebrachten grundlagen)
entwickelt, die jetzt die gewünschten ergebnisse liefert.
allerdings hab ich diese transformation nicht in eine matrix gepackt, da ich
mir dadurch einige unnötige multiplikationen und additionen spare.
ich würde gern wissen, ob ich umbedingt eine matrix verwenden soll (muss)
und ob diese aus dem buch sein muss, oder ob ich meine eigene transformation
verwenden kann.
fuer die projektion selbst muss nicht unbedingt eine matrix verwendet werden.
macht aber sinn, um sich das mit den homogenen Koordinaten zu ueberlegen.
Post by Franz Hess
2. wenn ich die viewkoordinaten mit der projection matrix transformiere,
erhält der z-wert automatisch den z-wert der view plane. in der angabe
steht, dass wir die z koordinate separat speichern sollen (fürs z-buffering)
.
meine frage ist jetzt, wo wir die z-koordinate abspeichern sollen. ist es
legitim, wenn ich sie vor der transformation in ein array abspeichere und
nach der transformation in die devicekoordinaten wieder mit den
transformierten punkten zusammenführe oder soll ich sie an irgendeinem
anderen ort abspeichern?
Die Idee war, das pro Punkt zu machen (also innerhalb der Schleife), da
braucht man ja kein array dafuer.

Michael Wimmer

-- Dr. Michael Wimmer--------------------------------------------------------
Institut fuer Computergraphik und Algorithmen tel: +43 (1) 58801 18687
Technische Universitaet Wien fax: +43 (1) 58801 18698
Favoritenstr. 9-11/5/E186 http://www.cg.tuwien.ac.at
A-1040 Wien, Oesterreich mailto:***@cg.tuwien.ac.at
-----------------------------------------------------------------------------
Martin Grödl
2003-11-12 18:20:17 UTC
Permalink
Post by Michael Wimmer
fuer die projektion selbst muss nicht unbedingt eine matrix verwendet werden.
macht aber sinn, um sich das mit den homogenen Koordinaten zu ueberlegen.
frage mich auch gerade wie's nach der projektion weitergehn soll..
ich hab also jetzt alle vertices (+normals) transformiert (model,
viewing und projektions-transformation).
die punkte sind laut vorlesung jetzt nicht mehr in homogenen koord. d.h
mann muss bei jedem vertex in transVertices das x und das y durch w
dividieren, oder?
Franz Hess
2003-11-12 19:41:14 UTC
Permalink
Post by Martin Grödl
Post by Michael Wimmer
fuer die projektion selbst muss nicht unbedingt eine matrix verwendet werden.
macht aber sinn, um sich das mit den homogenen Koordinaten zu ueberlegen.
frage mich auch gerade wie's nach der projektion weitergehn soll..
ich hab also jetzt alle vertices (+normals) transformiert (model,
viewing und projektions-transformation).
die punkte sind laut vorlesung jetzt nicht mehr in homogenen koord. d.h
mann muss bei jedem vertex in transVertices das x und das y durch w
dividieren, oder?
naja, ganz so würd ichs nicht ausdrücken.. sie sind eigentlich von anfang an
homogen und nach der transformation mit der projectionsmatrix ganz
besonders. der unterschied zu davor ist, dass w nicht mehr 1 ist, und
deshalb musst du, wie du schon richtig geschrieben hast, x und y durch w
dividieren.
Martin Grödl
2003-11-12 19:59:06 UTC
Permalink
Post by Michael Wimmer
Post by Martin Grödl
Post by Michael Wimmer
fuer die projektion selbst muss nicht unbedingt eine matrix verwendet
werden.
Post by Martin Grödl
Post by Michael Wimmer
macht aber sinn, um sich das mit den homogenen Koordinaten zu
ueberlegen.
Post by Martin Grödl
frage mich auch gerade wie's nach der projektion weitergehn soll..
ich hab also jetzt alle vertices (+normals) transformiert (model,
viewing und projektions-transformation).
die punkte sind laut vorlesung jetzt nicht mehr in homogenen koord. d.h
mann muss bei jedem vertex in transVertices das x und das y durch w
dividieren, oder?
naja, ganz so würd ichs nicht ausdrücken.. sie sind eigentlich von anfang an
homogen und nach der transformation mit der projectionsmatrix ganz
besonders. der unterschied zu davor ist, dass w nicht mehr 1 ist, und
deshalb musst du, wie du schon richtig geschrieben hast, x und y durch w
dividieren.
ok, und wie gehts dann weiter? hab das mit der viewport-transformation
nicht ganz verstanden und mit den kommentaren in der methode
CG1Canvas.getDeviceCoordinates kann ich nicht wirklich was anfangen...

bis jetzt sind die objekte bei mir ganz klein in der linken oberen ecke.
wenn ich dann skaliere dann schaun sie schon wie auf den screenshots aus.
Franz Hess
2003-11-12 20:29:34 UTC
Permalink
Post by Martin Grödl
ok, und wie gehts dann weiter? hab das mit der viewport-transformation
nicht ganz verstanden und mit den kommentaren in der methode
CG1Canvas.getDeviceCoordinates kann ich nicht wirklich was anfangen...
bis jetzt sind die objekte bei mir ganz klein in der linken oberen ecke.
wenn ich dann skaliere dann schaun sie schon wie auf den screenshots aus.
es ist gar nicht so schwer..

du hast jetzt nach der projectionstransformation die position der punkte auf
der view plane. jetzt musst du ein clipping window definieren. in den
kommentaren steht, dass es ratsam ist ( und es stimmt auch ;) für die
kürzere seite -1 und 1 zu nehmen und die längere seite nach dem
seitenverhältnis zu wählen.
sprich xwmax : ywmax = width : height
danach musst du nur mehr eine lineare transformation nach dem muster aus der
vorlesung entwerfen, die dir die koordinaten aus dem wertebereich xwmin bis
xwmax bzw. ywmin bis ywmax in den bereich 0 bis width bzw. 0 bis height
linear transformiert. dabei musst du nur beachten, dass der ursprung der
device koordinaten im rechten oberen eck liegt und die positive y-achse nach
unten geht..

ich hoff, ich hab mich halbwegs verständlich ausgedrückt ;)

F
Martin Grödl
2003-11-12 22:43:01 UTC
Permalink
wow, die viewport transformation hab ich nach deiner beschreibung und
mit hilfe der vorlesungsfolien ziemlich fix hinbekommen...danke! die
objekte werden jetzt schön in der mitte angezeigt und auch nicht mehr so
winzig. alles in allem wie auf den screenshots.
Post by Franz Hess
es ist gar nicht so schwer..
du hast jetzt nach der projectionstransformation die position der punkte auf
der view plane. jetzt musst du ein clipping window definieren. in den
kommentaren steht, dass es ratsam ist ( und es stimmt auch ;) für die
kürzere seite -1 und 1 zu nehmen und die längere seite nach dem
seitenverhältnis zu wählen.
sprich xwmax : ywmax = width : height
danach musst du nur mehr eine lineare transformation nach dem muster aus der
vorlesung entwerfen, die dir die koordinaten aus dem wertebereich xwmin bis
xwmax bzw. ywmin bis ywmax in den bereich 0 bis width bzw. 0 bis height
linear transformiert. dabei musst du nur beachten, dass der ursprung der
device koordinaten im rechten oberen eck liegt und die positive y-achse nach
unten geht..
ich hoff, ich hab mich halbwegs verständlich ausgedrückt ;)
F
Franz Hess
2003-11-12 19:24:06 UTC
Permalink
Post by Michael Wimmer
fuer die projektion selbst muss nicht unbedingt eine matrix verwendet werden.
macht aber sinn, um sich das mit den homogenen Koordinaten zu ueberlegen.
für die projektion verwende ich eh eine matrix.. es geht rein um die
viewport transformation.
Post by Michael Wimmer
Die Idee war, das pro Punkt zu machen (also innerhalb der Schleife), da
braucht man ja kein array dafuer.
dann muss ich jeden punkt einzeln transformieren und kann nicht mehr
transformPoints von CG1Matrix4x4 verwenden, dass ist allerdings ka problem.

danke, franz hess
Franz Hess
2003-11-12 19:37:18 UTC
Permalink
Post by Franz Hess
Post by Michael Wimmer
Die Idee war, das pro Punkt zu machen (also innerhalb der Schleife), da
braucht man ja kein array dafuer.
dann muss ich jeden punkt einzeln transformieren und kann nicht mehr
transformPoints von CG1Matrix4x4 verwenden, dass ist allerdings ka problem.
ein kleiner schönheitsfehler dabei ist aber, dass ich dadurch den vorteil
verspiele nur einmal mit einer matrix zu transformieren.
immerhin muss ich jetzt einmal mit model * view transformieren und dann
nocheinmal mit der projection matrix, damit ich die tiefe behalten kann.
ist es so gedacht, das wir die punkte mit jeder matrix einzeln
transformieren?
gibt es da keine elegantere lösung?

danke, franz
Michael Wimmer
2003-11-12 22:52:32 UTC
Permalink
Post by Franz Hess
Post by Franz Hess
Post by Michael Wimmer
Die Idee war, das pro Punkt zu machen (also innerhalb der Schleife), da
braucht man ja kein array dafuer.
dann muss ich jeden punkt einzeln transformieren und kann nicht mehr
transformPoints von CG1Matrix4x4 verwenden, dass ist allerdings ka
problem.
ein kleiner schönheitsfehler dabei ist aber, dass ich dadurch den vorteil
verspiele nur einmal mit einer matrix zu transformieren.
immerhin muss ich jetzt einmal mit model * view transformieren und dann
nocheinmal mit der projection matrix, damit ich die tiefe behalten kann.
ist es so gedacht, das wir die punkte mit jeder matrix einzeln
transformieren?
gibt es da keine elegantere lösung?
So, da hat mich mein Gedächtnis irregeführt.

Wenn man die Projektion aus der 2. Ausgabe verwendet und die Variante, zprp=0,
dann reicht es, z einfach nicht zu dividieren. Denn die Projektionsmatrix
verändert den z-Wert dort nicht, deshalb ist das Zwischenspeichern unnötig.

Michael Wimmer

-- Dr. Michael Wimmer--------------------------------------------------------
Institut fuer Computergraphik und Algorithmen tel: +43 (1) 58801 18687
Technische Universitaet Wien fax: +43 (1) 58801 18698
Favoritenstr. 9-11/5/E186 http://www.cg.tuwien.ac.at
A-1040 Wien, Oesterreich mailto:***@cg.tuwien.ac.at
-----------------------------------------------------------------------------
Franz Hess
2003-11-12 23:03:03 UTC
Permalink
Post by Michael Wimmer
Wenn man die Projektion aus der 2. Ausgabe verwendet und die Variante, zprp=0,
dann reicht es, z einfach nicht zu dividieren. Denn die Projektionsmatrix
verändert den z-Wert dort nicht, deshalb ist das Zwischenspeichern unnötig.
stimmt, ist mir erst jetzt aufgefallen.. vielen dank für den tip!!

franz hess

Wolfgang Freiler
2003-11-12 18:43:01 UTC
Permalink
Hallo!
Post by Franz Hess
1. zur transformation in devicekoordinaten wollte ich zuerst die matrix aus
dem buch verwenden. die hat aber nicht funktioniert, deshalb hab ich eine
eigene transformation (auf grund der in der vorlesung gebrachten grundlagen)
entwickelt, die jetzt die gewünschten ergebnisse liefert.
Also ich habs auch ohne Matrix gemacht, ich habs mir einfach nach den Kommentaren dort zusammengeschustert.
Das Problem, das ich hab, ist, dass die Objekte nur halb so groß sind, wie auf den Beispielscreenshots.
Wenn ich dann die Koordinaten verdopple (bevor ich sie skalier usw. dann passen die Screenshots haargenau zusammen. Auch bei der restlichen Navigation schauts nicht mehr "fischaugenmäßig" aus. (das Problem hatte ich früher)
Was mich nur wundert, ist, dass ich mir diesen Größenunterschied nicht erklären kann, wenn ich mir meine Berechnung so anseh. Source-Code-Stücke darf ich hier wohl keine posten, oder?

mfG

Wolfgang
Loading...