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):
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):
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
raziel: Code- durch Delphi-Tags ersetzt.