Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
schneidi74 Senior JLI'ler
Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 09.05.2005, 09:04 Titel: LootAt eines Objects |
|
|
Wie kann ich den "LookAt" Vektor eines Objects raus bekommen? Zweck wäre zum Beispiel eine Verfolgerkamera, der ich den LookAt Vektor des Objects übergebe um hier die gleiche Blickrichtung zu haben. Hat jemand eine Idee? _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
|
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 09.05.2005, 09:11 Titel: |
|
|
Noralerweise hat jedes Objekt einen Vektor, der praktisch nach vorne zeigt, meistens die Z-Achse (oder negative z-Achse, das kommt halt darauf an, wie das objekt gemodelt wurde). Diesen Vektor musst du einfach mit der Rotationsmatrix des objekts multiplizieren. schon hast du den aktuellen look at vektor. |
|
Nach oben |
|
|
schneidi74 Senior JLI'ler
Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 09.05.2005, 09:14 Titel: |
|
|
Ja, aber wie komme ich an diese Info? Es handelt sich in meinem aktuellen fall um ein x-File. Ich hatte schon überlegt der ganzen geschichte neue Richtungsvektoren zu geben und darüber die Rotation zu steuern?! _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
|
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 09.05.2005, 09:54 Titel: |
|
|
Pack die X-File einfach in deine Szene und schau wohin sie guckt (bastel dir am besten ein koordinaten system in die mitte der szene). guckt sie entlang der positiven zachse, musst du de Vektor ( 0, 0, 1 ) mit der rotations matrix des objekt multiplizieren (die matrix solltest du ja haben). |
|
Nach oben |
|
|
schneidi74 Senior JLI'ler
Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 09.05.2005, 11:51 Titel: |
|
|
Mit anderen Worten: File laden, ausrichten und ein "eigenes" Koordinatensystem für die Rotation schaffen, hab ich das so richtig verstanden? _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
|
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 09.05.2005, 13:19 Titel: |
|
|
du musst eigentlich nur wissen, wo "vorne" bei deinem objekt ist. das könntest du auch in einem editor ala milkshape machen. |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 09.05.2005, 14:01 Titel: |
|
|
Ist die Ausrichtung nicht immer Gleich? Hängt doch nur davon ab ob du im Modelleditor deine Figur anständig gedreht hast.
Die Winkel sollten Yaw=0, Pitch=0, Roll=0 sein _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
schneidi74 Senior JLI'ler
Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 09.05.2005, 19:28 Titel: |
|
|
Also irgendwie krieg ich die Drehung bei einer Verfolgerkamera nicht hin.
Ich habe folgendes gemacht. Meiner Kamera hab ich einen Platz hinter dem Mesh verpasst mit dem gleichen LookAt wie es das X-file hat (0.0f,0.0f,1.0f). Bewege ich das Mesh vor und zurück kein Problem, läuft.
Wenn ich das Mesh aber drehe klappt nichts. Ich habe mir gedacht, das ich meinen LookAt der Kamera einfach mit der Rotationsmatrix des Meshes multipliziere. Habe dafür die DXFunktion Code: | D3DXVec3TransformCoord(pVecOut,pVecIn,pMatMultiply); | benutzt.
Wenn ich jetzt das Mesh drehe passiert quasi nichts... die Werte verändern sich zwar, aber die Blickrichtung nicht?!
Meine Update funktion der Camera sieht so aus:
Code: |
void CECamera::UpdateCamera(void)
{
// neue Matrix für die Kamera berechnen
D3DXMatrixLookAtLH(&m_Camera.m_matView, &m_Camera.m_vPosition,&m_Camera.m_vLookAt,&m_Camera.m_vUp);
// und an Direct3D übergeben
CEInit::ReturnDevice()->SetTransform(D3DTS_VIEW,&m_Camera.m_matView);
} |
Woran könnte es wohl scheitern? _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
|
HomeLess_PunkDrummer JLI Master Trainee
Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 11.05.2005, 12:56 Titel: |
|
|
Third Person? Tu als LookAt den Positionsvektor des verfolgten Objekts tuen. Und als Position der Cam hast du
Vector3(-sin(ModelRotationY), -cos(ModelRotationY), CamHeight),
oder
Vector3(-sin(ModelRotationY)*cos(ViewRotationX)*Distance, -cos(ModelRotationY)*Sin(ViewRotationX)*Distance, sin(ViewRotationX)*Distance);
So hab ichs zumindest... _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
|
schneidi74 Senior JLI'ler
Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 11.05.2005, 13:36 Titel: |
|
|
Das hört sich gut an, werd ich nachher gleich testen.
Dank dir... _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
|
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 12.05.2005, 21:21 Titel: |
|
|
Ich hatte auch ne Zeit lang gebraucht, um da wat zu finden. Aber im grunde genommen ist es gar nicht so schwer:
Man übergibt ja für die Viewmatrix der Kamera "Position" "LookAt" "WorldUp".
Für die Innenansicht:
"Position" entspricht Position des Objektes
"LookAt" entspricht dem Z-Rotationvektor
"WorldUp"entspricht dem Y-Rotationvektor
Klar was mit Rotationsvektoren gemeint sind??
Für die Außenansicht:
Da muss man nur Position des Vektors mit einem weiteren Vektor addieren, der den Vektor zwischen Objekt und Kamera repräsentiert.
Also etwa so:
Code: |
m_Zoom=D3DXVECTOR3(0,5,10);
m_Position=Objekt.m_vPosition+m_Zoom;
m_LookAt=Objekt.RotationVektorZ;
m_WorldUp=Objekt.RotationVektorY;
//Anschließend wie gewohnt die 3 letzten Vektoren in Viewmatrix umwandeln
|
_________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
|
schneidi74 Senior JLI'ler
Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 13.05.2005, 08:04 Titel: |
|
|
Hallo LeeDiGer,
erstmal danke für deine Antwort.
Wie hast du das in deiner Object-Klasse gelöst? Hast du dort bei der Initialisierung des Objects Richtungsvektoren vergeben, über die du die Rotation machst? _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
|
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 13.05.2005, 11:43 Titel: |
|
|
Also wenn du wissen willst, wie ich an die 3 Rotationsvektoren rankomm, dann musse das etwa so machen:
Code: |
// Rotationsmatrizen anlegen
D3DXMatrixRotationX(&RotationMatrixX,m_vRotation.x);
D3DXMatrixRotationY(&RotationMatrixY,m_vRotation.y);
D3DXMatrixRotationZ(&RotationMatrixZ,m_vRotation.z);
// und miteinander multiplizieren
D3DXMatrixMultiply(&RotationMatrix,&RotationMatrixX,&RotationMatrix);
D3DXMatrixMultiply(&RotationMatrix,&RotationMatrixY,&RotationMatrix);
D3DXMatrixMultiply(&RotationMatrix,&RotationMatrixZ,&RotationMatrix);
// Rotationsachsen aus Rotationsmatrix in Vektoren umrechnen
RotationVektorX.x = RotationMatrix._11;
RotationVektorX.y = RotationMatrix._12;
RotationVektorX.z = RotationMatrix._13;
RotationVektorY.x = RotationMatrix._21;
RotationVektorY.y = RotationMatrix._22;
RotationVektorY.z = RotationMatrix._23;
RotationVektorZ.x = RotationMatrix._31;
RotationVektorZ.y = RotationMatrix._32;
RotationVektorZ.z = RotationMatrix._33;
|
Bevor du für jedes Frame diese Berechnung durchführst, brauchst die folgende Standardwerte:
Code: |
//Standardwerte initialisieren
D3DXMatrixIdentity(&RotationMatrix);
RotationVektorX=D3DXVECTOR3(1,0,0);
RotationVektorY=D3DXVECTOR3(0,1,0);
RotationVektorZ=D3DXVECTOR3(0,0,1);
|
_________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
|
HomeLess_PunkDrummer JLI Master Trainee
Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 13.05.2005, 15:26 Titel: |
|
|
Es reichen doch drei Winkel oder ein Quaternion...? _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
|
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 13.05.2005, 16:18 Titel: |
|
|
Wie meinst du das genau mit den 3 Winkeln? _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
|
|