Public Sub rotateCamera(AngleA As Single, AngleB As Single)
Dim ax As Single, ay As Single, az As Single
ax = CameraTo.X - CameraPos.X
ay = CameraTo.Y - CameraPos.Y
az = CameraTo.Z - CameraPos.Z
CameraTo.X = ax + CameraPos.X
CameraTo.Y = (ay * Cos(DegToRad(AngleA))) - (az * Sin(DegToRad(AngleA))) + CameraPos.Y
CameraTo.Z = (az * Cos(DegToRad(AngleA))) + (ay * Sin(DegToRad(AngleA))) + CameraPos.Z
CAngleA = CAngleA + AngleA
CAngleB = CAngleB + AngleB
If CAngleA > 360 Or CAngleA < -360 Then CAngleA = 0
If CAngleB > 360 Or CAngleB < -360 Then CAngleB = 0
ax = CameraTo.X - CameraPos.X
ay = CameraTo.Y - CameraPos.Y
az = CameraTo.Z - CameraPos.Z
CameraTo.X = ax * Cos(DegToRad(AngleB)) + az * Sin(DegToRad(AngleB)) + CameraPos.X
CameraTo.Y = ay + CameraPos.Y
CameraTo.Z = az * Cos(DegToRad(AngleB)) - ax * Sin(DegToRad(AngleB)) + CameraPos.Z
End Sub
Private Function DegToRad(Angle As Single) As Single
DegToRad = Angle * pi / 180
End Function
'When I want to move my Camera ahead I have to change its position.. And respectively change the look at vector also...
'The following functions does it...
Private Function MoveCamera(direction As Integer)
Select Case direction
Case 1
CameraPos.X = CameraPos.X - 0.1 * Sin(DegToRad(CAngleB))
CameraPos.Z = CameraPos.Z - 0.1 * Cos(DegToRad(CAngleB))
CameraTo.X = CameraTo.X - 0.1 * Sin(DegToRad(CAngleB))
CameraTo.Z = CameraTo.Z - 0.1 * Cos(DegToRad(CAngleB))
Case -1
CameraPos.X = CameraPos.X + 0.1 * Sin(DegToRad(CAngleB))
CameraPos.Z = CameraPos.Z + 0.1 * Cos(DegToRad(CAngleB))
CameraTo.X = CameraTo.X + 0.1 * Sin(DegToRad(CAngleB))
CameraTo.Z = CameraTo.Z + 0.1 * Cos(DegToRad(CAngleB))
Case 2
CameraTo.Y = CameraTo.Y - 0.005 * Cos(DegToRad(CAngleA))
If CameraTo.Y < -0.5 Then CameraTo.Y = -0.5
If CameraTo.Y > 0.5 Then CameraTo.Y = 0.5
Case -2
CameraTo.Y = CameraTo.Y + 0.005 * Cos(DegToRad(CAngleA))
If CameraTo.Y < -0.5 Then CameraTo.Y = -0.5
If CameraTo.Y > 0.5 Then CameraTo.Y = 0.5
End Select
End Function