Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

08.02.2013, 19:23

Probleme bei der Camera


(Link)
Edit::

Also ich würde gerne wissen wie man die Weltmatrix berechnet, man eine Kamera benützt.





Edit: Das nachfolgende Problem ergibt sich daraus, dass ich nicht weis wie man die Weltmatrix berechnet, wennn man eine Kamera benutzt.
Es würde mir schon helfen wenn ich wüsste wie man die Weltmatrix berechnet, wenn man eine Kamera benützt. Wie man die Kameramatrix berechnet, glaube ich zu wissen.
Ich habe drei Rechtecke so platziert, auf dass diese zueinander senkrecht stehen und jeweils in der xy- , xz- yz-Ebene liegen und sich der jeweils halbieren und der Schnittpunkt im Ursprung liegt also bei (0.0f,0.0f,0.0f). Wenn ich im Ursprung befinde, dann sieht man nur dir Ränder der Rechtecke, welche in der xy- und yz-Ebene liegen. Das ist noch soweit ich weis in Ordnung.
Wenn ich mich jedoch vom Mittelpunkt wegbewege und auf die Rechtecke schaue so driften diese auseinander. Da die Rechtecke nicht bewegt werden, also ihre Vektoren gleich bleiben, scheint etwas mit den Transformationsmatrixen nicht zu stimmen.

Verwendete Sprache: c++
Verwendete Bibliothek: Directx9

Code für die Cameramatrix:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
matrixg& matrixg::calculatecameramatrix(vector3dg *pcamerapositionp,vector3dg *pcameradirectionp,vector3dg *pcameraupvectorp)



{   


// Die z-Achse des Kamerakoordinatensystems berechnen   

vector3dg zaxisvector(normalizevector3dg(*pcameradirectionp));


    // Die x-Achse ist das Kreuzprodukt aus y- und z-Achse  

vector3dg xaxisvector(normalizevector3dg(crossproduct(pcameraupvectorp,&zaxisvector)));

    // y-Achse berechnen    

vector3dg yaxisvector(normalizevector3dg(crossproduct(&zaxisvector,&xaxisvector)));


// Zuweisung der Werte// Berechnung des Punktproduktes : (xaxisvector**pcamerapositionp) Der Doppelmalpunkt ergibt sich aus Mulitplikation und Dereferenzoperator

 matrixargumentmatch(G_matrixargumentamount,xaxisvector.xf, yaxisvector.xf, zaxisvector.xf, 0.0f,    xaxisvector.yf, yaxisvector.yf, zaxisvector.yf, 0.0f, xaxisvector.zf, yaxisvector.zf, zaxisvector.zf, 0.0f,     -(xaxisvector**pcamerapositionp),-(yaxisvector**pcamerapositionp),-(zaxisvector**pcamerapositionp),     1.0f);
 return *this;
}


ich habe versucht die Codezeilen besser dazustellen
Allerdings werden alle Zeilenumbrüche immer gelöscht.
Naja nun habe ich einfach viele Zeilenumbrüche, welche anscheinend nicht mehr gelöscht werden.

Bei der Berechnung der zAchse des Camerakoordinatensystems wird nur die Cameradirection übergeben.
Normalerweise wird dort von einem LookAtVektor die Cameraposition abgezogen. Dieser LookAtVektor wird, soweit mir bekannt, Berechnet, indem man die Cameraposition mit der Cameradirection addiert.
Und da Cameraposition + Cameradirection - Cameraposition die Cameradirection ergibt verwende ich eben nur die Cameradirection.

Der Weltmatrix habe ich die Identitätsmatrix übergeben.

Die Projektionsmatrix wird so berechnet wie dies in dem Buch von David Scherfgen steht.

Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von »hetlock« (08.02.2013, 20:09)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

08.02.2013, 22:12

Ich versteh dein Problem nicht ganz. Das, was man im Allgemeinen unter "der Weltmatrix" versteht, transformiert eben von Objektkoordinaten in Weltkoordinaten, während die Kameramatrix von Weltkoordinaten in Kamerakoordinaten transformiert...

3

13.02.2013, 14:42

Stimmt ... ich kann mit der Fragestellung/-beschreibung leider auch nichts anfangen!

Werbeanzeige