Autor Beitrag
geo
Hält's aus hier
Beiträge: 1

XP Professional
D 2005 Pers
BeitragVerfasst: Mi 27.07.05 15:11 
Ich habe früher immer die Vektorbasis meine Objekte (Physik-Simualtion) in dre Winkel umgerechnet und dann über glrotate das Model verdreht.
Nu habe ich gelernt, dass ich die vektorbasis direkt in die Modelview-Matrix reinschreiben kann (funktioniert wunderbar):

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
Mat[mat_XAchse].x:=Bas.u.x; 
Mat[mat_XAchse].y:=Bas.u.y; 
Mat[mat_XAchse].z:=Bas.u.z; 
Mat[mat_XAchse].w:=0
Mat[mat_YAchse].x:=Bas.v.x; 
Mat[mat_YAchse].y:=Bas.v.y; 
Mat[mat_YAchse].z:=Bas.v.z; 
Mat[mat_YAchse].w:=0
Mat[mat_ZAchse].x:=Bas.w.x; 
Mat[mat_ZAchse].y:=Bas.w.y; 
Mat[mat_ZAchse].z:=Bas.w.z; 
Mat[mat_ZAchse].w:=0
Mat[mat_Position].x:=Pos.x; 
Mat[mat_Position].y:=Pos.y; 
Mat[mat_Position].z:=Pos.z; 
Mat[mat_Position].w:=1
glloadmatrixf(@Mat); 
glscalef(Body.Model.Scale.x,Body.Model.Scale.y,Body.Model.Scale.z);

(ist halt noch nicht optimiert :-) )

Das selbe wollte ich jetzt mit meiner Kamera machen (die hat ebenfalls ne Vektorbasis).
Das geht aber überhaupt nicht. Das resultat ist merkwürdig verzehrt und meistens sieht mann nur schwarz...

Gibt es einen unterschied zwischen Modelview-Matrix und Projektions-Matrix, den ich hier beachten muss???

(Mit den Vorzeichen habe ich schon alles ausprobiert!)

Hier der entsprechende Code (im prinzip halt wie bei der Modelview-Matrix):

ausblenden Delphi-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:
27:
procedure TPhysicEngine.GLMoveBodyCamera; 
var 
  Pos: TGeoSVec; 
  Bas: TGeoSBas; 
  Mat: TMatrix; 
begin 
  glMatrixMode(GL_PROJECTION); 
  Pos:=GeoSVecAdd(Body.Position,GeoSVecTraInv(Body.Base,Body.Camera.Position)); 
  Bas:=GeoSBasTraInv(Body.Base,Body.Camera.Base); 
  Mat[mat_XAchse].x:= {+/-}Bas.u.x; 
  Mat[mat_XAchse].y:={+/-}Bas.u.y; 
  Mat[mat_XAchse].z:={+/-}Bas.u.z; 
  Mat[mat_XAchse].w:=0
  Mat[mat_YAchse].x:={+/-}Bas.v.x; 
  Mat[mat_YAchse].y:={+/-}Bas.v.y; 
  Mat[mat_YAchse].z:={+/-}Bas.v.z; 
  Mat[mat_YAchse].w:=0
  Mat[mat_ZAchse].x:={+/-}Bas.w.x; 
  Mat[mat_ZAchse].y:={+/-}Bas.w.y; 
  Mat[mat_ZAchse].z:={+/-}Bas.w.z; 
  Mat[mat_ZAchse].w:=0
  Mat[mat_Position].x:={+/-}Pos.x; 
  Mat[mat_Position].y:={+/-}Pos.y; 
  Mat[mat_Position].z:={+/-}Pos.z; 
  Mat[mat_Position].w:=1
  glloadmatrixf(@Mat); 
end;


Hoffe jemand weiß weiter!!!

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.