PDA

View Full Version : [Frage] Negative Koordinaten nach *ViewMatrixPoint


Lizzy
13-11-2004, 13:42
Hallo,

also wenn ich meine Koordinaten mit der viewmatrixpoint multipliziere, die am Anfang ja nur eine Translation hat, werden alle Koordinaten negativ. Was kann ich dagegen tun oder ist das so richtig? Das ganze ist ja ein Effekt davon, dass ich die neg. Kameraentfernung als Translation setzen muss.

Nur bei mir korrigiert sich das nicht mehr, dh alles bleibt neg, wobei die pos. werte eigentlich schon ganz schoen nach bildschirmpunkten ausschauen...

Weiss jemand, was ich vergessen haben koennte?

Matthias
13-11-2004, 14:17
also wenn ich meine Koordinaten mit der viewmatrixpoint multipliziere, die am Anfang ja nur eine Translation hat, werden alle Koordinaten negativ. Was kann ich dagegen tun oder ist das so richtig? Das ganze ist ja ein Effekt davon, dass ich die neg. Kameraentfernung als Translation setzen muss.


Alle Koordinaten werden negativ? Am Anfang hast du nur eine Translation drinnen, richtig. Aber dann dürften sich nur die z-Werte ändern, x,y sollte erstmal gleich bleiben.
Wann multiplizierst du deine Koordinaten mit der viewMatrixPoint? Normalerweise setzt man sich aus View Matrix und Projection Matrix eine Matrix zusammen und transformiert mit dieser dann die Punkte gleich direkt in Screen Koordinaten. Zwischenschritte sind da eigentlich unnötig.

Lizzy
13-11-2004, 14:22
Ich hab zuerst positive Koordinaten, dann werden diese durch die Multiplikation mit der ViewMatrixPoint (hat ja auf (0,3)(1,3) und (2,3) -10 stehen) negativ. diese negativen Koordinaten bekomm ich dann aber nie mehr weg...

die Transformation mit den Bildschirmkooridnaten passiert ja nur, wenn das Flag doOnlyWorldTrans false ist, oder?

Dh ich kann ja nur die beidne ersten matrizen ViewMatrixPoint und Projectionmatrix multiplizieren, um einen Transformationschritt zu sparen oder?

Ahh... ich denk ich hab den Fehler!!! Ich will die Kamera ja nur in z richtung wegschieben, muss also die Translation nur in 2,3 setzen und sonst nirgendwo!! Das erklaert, wieso die Koordinaten nicht gepasst haben :-)

Jetzt hab ich einen tollen teapot der halt aufm Kopf steht (aber das is denk ich ein kleineres Problem :-)

Und auch dieses Problem hat sich dank dem Tipp auf der Website erledigt :-) Endlich funktionierts (zumindest mal die anzeige).

Matthias
13-11-2004, 14:35
die Transformation mit den Bildschirmkooridnaten passiert ja nur, wenn das Flag doOnlyWorldTrans false ist, oder?

Dh ich kann ja nur die beidne ersten matrizen ViewMatrixPoint und Projectionmatrix multiplizieren, um einen Transformationschritt zu sparen oder?


doOnlyWorldTrans ist lediglich für die 2D Objekte da, die ja schon in Bildschirmkoordinaten vorliegen.

Wenn das auf false gesetzt ist (default), dann wendest du die View und Projection Matrix auf deine Punkte an und erhältst so die Bildschirmkoordinaten (im Bereich -1, +1, d.h. getDeviceCoordinates wird natürlich auch noch aufgerufen). Wenn du View und Projection Matrix miteinander multiplizierst, sparst du dir hier einen Zwischenschritt.

Sanchez
15-11-2004, 13:09
... Das ganze ist ja ein Effekt davon, dass ich die neg. Kameraentfernung als Translation setzen muss. ...

Wieso muss die Kameraentfernung eigentlich eine negative Translation sein? Ich dachte die Kamera liegt auf der positiven z-Achse (schaut also zum Betrachter). :confused:

Matthias
15-11-2004, 13:48
Naja, die Kamera ist ja sozusagen dein Betrachter. Folgender Tipp von der Homepage ist da hilfreich:

In CG1Camera.setDistance() zB. soll die Kamera auf eine neue Entfernung vom Ursprung des Weltkoordinatensystem gesetzt werden. Das kann man sich so überlegen, dass das Weltkoordinatensystem (auf das ja die viewing Matrizen angewandt werden) um den negativen Wert (entlang der Z-Achse) "wegverschoben" wird.

D.h. du verschiebst ja eigentlich nicht die Kamera (welche auf einem fixen Punkt steht), sondern alles andere. Und das muss immer in die entgegengesetze Richtung gemacht werden.