Registriert: Do Jun 09, 2005 13:48 Beiträge: 117 Wohnort: Sankt Augustin
Hallo,
und schon wieder bin ich am Ende mitt meinen Nerven...
Ich habe eine Kameraklasse gebastelt, die sher gut funktioniert. Es gibt allerdings ein kleines, wenn auch sehr
nerviges Problem. Die Kamera kann um alle Achsen drehen und in allen Dimensionen bewegt werden. Die Szene
bewegt sich auch sehr schön, wie erwartet. das Problem ist, dass ich den Rotationspunkt nicht bewegen kann.
Obwohl ich pr (siehe Codebeispiel) beim bewegen (Translatecamera) immer neu berechne, bleibt dieser blöde
Punkt immer fix an der durch PositionCamera festgelegten Stelle. Es ist zum Haareraufen. Kann mir vielleicht
jemand hier aus der Patsche helfen?
Die benutzten funktionen (CrossProduct, Mormalize, ... und der verwendete Datentyp TGLvector) dürfte so oder
in anderer Form in Eueren Programmen wohl auch vorkommen. Deswegen habe ich die Deklarationen nicht
beigefügt. Die sind in meiner Unit OpenGLUtil deklariert.
Im Voraus vielen Dank,
Andy
Code:
unit Camera;
interface
Uses DglOpenGL, OpenGLUtil, Windows, Classes;
type TCamera =class
pr : TGLvector;// rotation point
vp : TGLvector;// Camera Position
vu : TGLvector;// View Up
Enabled :boolean;
procedure RestorePosition(pos:integer);
procedure SavePosition(pos:integer);
procedure CameraHome;
procedure RotateCamera(ix, iy, iz: TGLdouble);
procedure TranslateCamera(ix, iy, iz: TGLdouble);
procedure PositionCamera(PositionVec: TGLvector;
ViewVec: TGLvector;
upVec: TGLvector);
procedure Apply;
constructor Create;
private
vd : TGLvector;// View Direction
vpArr :array[0..9]of TGLvector;// store up to 10 positions
vdArr :array[0..9]of TGLvector;// \"
vuArr :array[0..9]of TGLvector;// \"
prArr :array[0..9]of TGLvector;// \"
// init werte
vpInit, vdInit, vuInit: TGLvector;
end;
TPCamera=^TCamera;
implementation
uses KanalUtil;
{ TCamera }
constructor TCamera.Create;
var
i:integer;
begin
Enabled :=false;
InitVector (vdInit,-1,-1,-1);
InitVector (vpInit,1,1,1);
InitVector (vuInit,0,1,0);
CameraHome;
for i :=0to9do
begin
InitVector (vpArr[i],0,0,0);
InitVector (vdArr[i],0,0,0);
InitVector (vuArr[i],0,0,0);
InitVector (prArr[i],0,0,0);
end;
end;
// Rotate (ix,iy) or roll (iz) the camera about the focal point
Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.