Ich bedanke mich schonmal recht herzlich für deine Hilfe. Werde mich wohl morgen nochmal melden
Ich probiere jetzt erstmal die Sache mit sqrt() anhand von meinen wohl umständlich berechneten Delta Pitch und Delta Yaw Werten aus und schaue, inwiefern ich da noch ein Paar Anpassen vornehmen muss.
Wenn das soweit funktioniert bin ich sehr gespannt, ob ich mit den Kugelkoordinaten noch eine Optimierung erreichen kann
Hier mal meine momentane Funktion zur Berechnung der Zielwinkel (absoluter Winkel / kein Delta):
Delphi-Quellcode:
procedure CalculateAimAngle(const Device: IDirect3DDevice9;
Player: TPlayerListItem; var Pitch, Yaw: Single);
var
Z, P, D, A: TD3DXVector3;
T: Integer;
begin
Z := CallNodeTransform(Device, Player, BONE_HEAD, false);
P := Camera.Position;
// Pitch berechnen
D3DXVec3Subtract(D, Z, P);
A.x := 0;
A.y := 1;
A.z := 0;
D3DXVec3Normalize(D, D);
Pitch := ArcSin(Abs(D.x * A.x + D.y * A.y + D.z * A.z));
if ((Z.y - P.y) > 0) then Pitch := -Pitch;
// Yaw berechnen
D.x := Z.x - P.x;
D.y := 0;
D.z := Z.z - P.z;
A.x := 0;
A.y := 0;
A.z := 1;
D3DXVec3Normalize(D, D);
Yaw := ArcCos(D.x * A.x + D.y * A.y + D.z * A.z);
if ((Z.x - P.x) < 0) then Yaw := (2 * PI) - Yaw;
// In Normalform umrechnen (Manchmal sind die Winkel Vielfache von 2*PI)
T := Round(Yaw / (PI));
if (T = 1) then
begin
Yaw := Yaw - (2 * PI);
end else
begin
Yaw := Yaw - (PI * T);
end;
end;
Denke mal, hier kann man noch einiges an Optimierungen durchführen