Hallo,
ich habe eine Kamera mit xyz koordinaten (als Vector3) und xyz Rotationen (ebenfalls als Vector3). Nun benötige ich aber für eine Verfolgerkamera den forward vector damit ich die Kamera hinter das Ziel platzieren kann. Nur wie stelle ich das an mit meinen gegebenen Werten? Alles was ich im internet gefunden hab läuft über right / up vektoren.
Meine 2. Frage wäre, wie könnte ich mit meinen Werten ein "lookat" realisieren? Hier hab ich ebenfalls nur alles mit right / up vektoren gefunden. Oder sollte ich lieber meine Kamera komplett auf eine 4x4 Matrix umstellen? (Damit kenn ich mich allerdings nicht so gut aus
)
Im moment sieht meine Implementierung so aus:
|
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
27
28
29
30
|
static float distance = 20.0f;
static float height = 60.0f;
static float heightDamping = 3.0f;
static float rotationDamping = 3.0f;
float wantedRotationAngle = target->GetRotation().y;
float wantedHeight = target->GetPosition().y + height;
float currentRotationAngle = cam->GetRotation().y;
float currentHeight = cam->GetPos().y;
// Damp the rotation around the y-axis
currentRotationAngle = LerpAngle(currentRotationAngle, wantedRotationAngle, rotationDamping * deltaTime);
// Damp the height
if(deltaTime != 0)
currentHeight = Lerp (currentHeight, wantedHeight, heightDamping * deltaTime);
// Convert the angle into a rotation
quat currentRotation(Vec3f(0, currentRotationAngle, 0));
// Set the position of the camera on the x-z plane to:
// distance meters behind the targetcam->SetPos( m->GetPosition());
cam->SetPos( cam->GetPos() - (currentRotation * %forwardVector% * distance)); //hier brauch ich den ForwardVector
cam->SetPosY(currentHeight);
//cam->LookAt(m->GetPosition().x,m->GetPosition().y,m->GetPosition().z); //TODO
cam->rotateX(common->GetMouseMove().y * MOUSE_SPEED );
cam->rotateY(common->GetMouseMove().x * MOUSE_SPEED );
|
gruß
C0dR
P.S. falls es relevant ist, ich arbeite mit OpenGL