Einzelnen Beitrag anzeigen

Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

AW: Vektordistanz Fadenkreuz zu Spieler (2D) berechnen

  Alt 13. Aug 2011, 05:28
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
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat