AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi DirectX Vector zu Winkel?
Thema durchsuchen
Ansicht
Themen-Optionen

DirectX Vector zu Winkel?

Ein Thema von Zacherl · begonnen am 2. Jul 2010 · letzter Beitrag vom 3. Jul 2010
Antwort Antwort
Benutzerbild von Zacherl
Zacherl

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

DirectX Vector zu Winkel?

  Alt 2. Jul 2010, 20:53
Hey,

ich habe folgendes Problem. Ich möchte in einem DirectX Spiel die Kamera auf ein bestimmtes Objekt ausrichten. Dazu muss ich die Pitch und Yaw Werte der Kamera verändern. Jetzt habe ich allerdings nur folgende Werte:
* Vektor des Zieles (Wold Matrix denke ich mal)
* Kameravektor (View Matrix sollte das sein)

Ich habe es bisher so versucht:
Delphi-Quellcode:
function GetCameraVectorFromViewMatrix(Device: IDirect3DDevice9): TD3DXVECTOR3;
var
  View: TD3DXMATRIX;
begin
  FillChar(Result, SizeOf(TD3DXVECTOR3), #0);
  if (Device.GetTransform(D3DTS_VIEW, View) = D3D_OK) then
  begin
    Result.x := - View._41;
    Result.y := - View._42;
    Result.z := - View._43;
  end;
end;

function GetDirectionVector(StartVector, EndVector: TD3DXVECTOR3): TD3DXVECTOR3;
var
  Diff: TD3DXVECTOR3;
begin
  D3DXVec3Subtract(Diff, EndVector, StartVector);
  D3DXVec3Normalize(Result, Diff);
end;
Delphi-Quellcode:
  CameraVector := GetCameraVectorFromViewMatrix(Device);
  if (not TransformBone(
    Device, PlayerObject, Bone, TargetVector, false)) then Exit;
  DirectionVector := GetDirectionVector(CameraVector, TargetVector);
Dies sollte mir nach meinem Verständniss den Richtungsvektor von Camera zu Target liefern. Ich bin mir leider nicht sicher, ob das alles so stimmt und wie ich jetzt hierraus die Winkel bestimmen kann. DirectX ist für mich ein recht neues Gebiet deshalb bin ich für jede Hilfe und auch Erklärung dankbar!

Viele Grüße
Zacherl
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: DirectX Vector zu Winkel?

  Alt 2. Jul 2010, 23:33
Die Matrizen sind keine Verktoren auf Dinge, sondern in denen steckt die Vorschrift, nach der Punkte auf ihrem Weg auf die 2D-Abbildung transformiert werden sollen. Die World-Matrix sagt dabei aus, was mit jedem Vertex der Welt schon mal vorab passieren soll (d.h. Verschiebung, Drehung und Verzerrung), und diese werden dann mit der View-Matrix auf eine Ebene abgebildet - eben dem Bild.

Während man aus der View-Matrix durchaus wieder die Kameraposition herausrechnen kann, klappt das mit der Welt-Matrix zu Objekt schon nicht mehr so unbedingt, da Objekte ja nicht zwangsläufig immer im Ursprung definiert sein müssen (sind sie meist, aber eben nicht zwangsweise), und oft wird für jedes Objekt eine separate World-Matrix verwaltet - die zuletzt verwendete ist daher eher selten zufällig die, die du willst.

Statt mir mit den Matrizen einen abzubrechen, würde ich mir viel eher die Kameraposition und die, des betreffenden Objektes separat mitführen, um dann daraus eine LookAt-Matrix basteln zu können. (Die sich eben aus Blickrichtungsvektor, Up-Vektor und FOV zusammensetzt.)


Edit: Achso, der Titel ist übrigens etwas irreführend. Du suchst an keiner Stelle irgendwelche Winkel
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: DirectX Vector zu Winkel?

  Alt 3. Jul 2010, 12:48
Also das Spiel um das es sich handelt, verwendet ganz sicher nur eine World Matrix. Ich habe aus dem Spiel halt nicht mehr Informationen rausziehen können und kann auch nicht direkt den Quelltext verändern.

Mir wurde gesagt, dass es mit den mir bekannten Werten klappen müsste.

Dem intern verwendetne Kameraobjekt im Spiel kann man nicht sagen "guck mal in diese Richtung (Vektor)", sondern nur "stell dich mal ein auf diese Position (in Winkeln Pitch & Yaw). Pitch und Yaw von der Kamera kann ich auch berechnen bzw. auslesen, fals das hilft.

Es geht jetzt darum, dass ich die Winkeldifferenz in horizontaler und vertikaler Richtung zwischen meiner aktuellen Blickrichtung und der Richtung in die ich die Kamera gucken lassen will berechnen kann. Nur mit diesen Werten kann ich ja die Kamera korrekt ausrichten.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz