Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

15.01.2007, 18:16

Probleme mit der Kamerasteuerung

hi,

Ich überlege schon seit längerem, wie ich meinem Flusimulator eine richtige Steuerung verpassen kann. Doch habe ich bis jetzt es nur zustandegebracht, dass wenn die Kamera sich um 90 dreht, sich die Kamra, wenn um die andere Achse drehen will, im Kreis dreht und nicht mehr rechtwinkelig wie zu Anfang. Hatte jemand selbe Problem und hat es gelöst?
:)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

15.01.2007, 19:25

also ich muss ehrlich gestehen, dass ich aus der erklärung nicht ganz schlau werd...

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

15.01.2007, 19:34

Und ich glaube, dass es sich gar nicht wirklich um einen richtigen Flugsimulator handelt, denn sonst würde sich die Ausrichtung der Kamera doch automatisch durch Position und Orientierung des Flugobjekts bestimmen... :?:
Aber so ganz gecheckt habe ich das Problem ehrlich gesagt auch nicht.

edit: Keine Ahnung, vielleicht bringt Dir das ja was: Flight dynamics - en.wikipedia.org
Kommen Sie nie mit einem Schwert zu einer Schießerei.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

16.01.2007, 14:50

Ich vermute mal dein problem ist die Transformation der lenkbewegungen aus dem relativen Bezugsraums in den absoluten. Dadurch entstehen so Effekte wie, dass die Kamera sich um die absolute y Achse dreht obwohl die Kamera eigentlich nach oben zeigt und daher sich um die z Achse drehen sollte.

Du willst eine Fly by Kamera realisieren, sehe ich das richtig? Wenn ja zeig mal deine Matrizen und in welcher Reihenfolge du sie multipizierst.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

5

16.01.2007, 15:35

Ich glaub er meint, dass er die Kamera rotiert, bis die Z-achse der Kamra mit der Y-Achse des Weltkoordinatensytems übereindander liegt, wenn er dann eine Rotation um die Y-achse im Weltkoordinatensystem ausführt, dreht sich das Bild natürlich nur mehr.

Die Lösung, du darfst die Kamera nicht im Weltkoodinatensystem rotieren, sondern du musst die Rotationen im Objekt-Koordinatensystem ausführen.

mfg Philipp

6

16.01.2007, 19:05

Zitat von »"Phil_GDM"«

Ich glaub er meint, dass er die Kamera rotiert, bis die Z-achse der Kamra mit der Y-Achse des Weltkoordinatensytems übereindander liegt, wenn er dann eine Rotation um die Y-achse im Weltkoordinatensystem ausführt, dreht sich das Bild natürlich nur mehr.

Die Lösung, du darfst die Kamera nicht im Weltkoodinatensystem rotieren, sondern du musst die Rotationen im Objekt-Koordinatensystem ausführen.


Phil hat es verstanden :D , sorry aber ich wuste nicht so recht wie ich es erklären solte :shock: .

Das heisst, ich soll die Kamera starr lassen und die Objekte um die Kamera bewegen ?
Aber durch eine Kamerarotation muss das soch auch gehen, z.B. in dem ich die virtualleKamera ortogonal zum weltsystem ausrichte, mir merke wie sich die vierualleKamera bewegt hat, quasi VektorvirtCam1 = dvektor+VektorVirtCam. dvektor zeigt mir nun die Bewegung der VirtuallenKamra und dann verschiebe ich dvekort in die Einheitskugelvekror der realten Kamra un drehe sie entsprechend.
:roll:

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

16.01.2007, 19:54

vielleicht hilft dir das:

http://www.gamedev.net/community/forums/topic.asp?topic_id=226631

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

8

16.01.2007, 20:16

Nein, du lässt die Kamera nicht starr. Nur rotierst du sie nicht mit der "normalen" Y-Rotationsmatrix sondern mit einer Achsenmatrix, welche für Rotationen um Achsen, die nicht mit den Weltachsen übereinstimmen verwendet wird, so eine Matrix wird z.B. von D3DXMatrixRoationAxis(...) erstellt.

Hier ein Beispiel das zeigt, wie David das in seinem Buch gemacht hat:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Rotieren des Objekts, um seine eigenen Achsen

void tbObject::RotateRel(const tbVector3& vRotation)
{
    // Rotation um die x-Achse des Objekts

    tbMatrix mRotation(tbMatrixRotationAxis(m_vXAxis, vRotation.x));
    m_vYAxis = tbVector3TransformNormal(m_vYAxis, mRotation);
    m_vZAxis = tbVector3Cross(m_vXAxis, m_vYAxis);

    // Rotation um die y-Achse des Objekts

    mRotation = tbMatrixRotationAxis(m_vYAxis, vRotation.y);
    m_vXAxis = tbVector3TransformNormal(m_vXAxis, mRotation);
    m_vZAxis = tbVector3Cross(m_vXAxis, m_vYAxis);

    // Rotation um die z-Achse des Objekts

    mRotation = tbMatrixRotationAxis(m_vZAxis, vRotation.z);
    m_vXAxis = tbVector3TransformNormal(m_vXAxis, mRotation);
    m_vYAxis = tbVector3TransformNormal(m_vYAxis, mRotation);

    // Matrizen aktualisieren

    Update();
}


[edit] viell. solltest du dir auch überlegen deine Kamera mit Quaternions zu rotieren, da du ansonsten Probleme mit Gimbal Lock bekommen könntest

mfg Philipp

9

16.01.2007, 20:28

Zitat von »"Phil_GDM"«

Nein, du lässt die Kamera nicht starr. Nur rotierst du sie nicht mit der "normalen" Y-Rotationsmatrix sondern mit einer Achsenmatrix, welche für Rotationen um Achsen, die nicht mit den Weltachsen übereinstimmen verwendet wird, so eine Matrix wird z.B. von D3DXMatrixRoationAxis(...) erstellt.

Hier ein Beispiel das zeigt, wie David das in seinem Buch gemacht hat:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Rotieren des Objekts, um seine eigenen Achsen

void tbObject::RotateRel(const tbVector3& vRotation)
{
    // Rotation um die x-Achse des Objekts

    tbMatrix mRotation(tbMatrixRotationAxis(m_vXAxis, vRotation.x));
    m_vYAxis = tbVector3TransformNormal(m_vYAxis, mRotation);
    m_vZAxis = tbVector3Cross(m_vXAxis, m_vYAxis);

    // Rotation um die y-Achse des Objekts

    mRotation = tbMatrixRotationAxis(m_vYAxis, vRotation.y);
    m_vXAxis = tbVector3TransformNormal(m_vXAxis, mRotation);
    m_vZAxis = tbVector3Cross(m_vXAxis, m_vYAxis);

    // Rotation um die z-Achse des Objekts

    mRotation = tbMatrixRotationAxis(m_vZAxis, vRotation.z);
    m_vXAxis = tbVector3TransformNormal(m_vXAxis, mRotation);
    m_vYAxis = tbVector3TransformNormal(m_vYAxis, mRotation);

    // Matrizen aktualisieren

    Update();
}


[edit] viell. solltest du dir auch überlegen deine Kamera mit Quaternions zu rotieren, da du ansonsten Probleme mit Gimbal Lock bekommen könntest


Den Code hab ich auch schon probiert und muste festellen, dass das selbe gimble lock auftritt.

;) Ihr schreibt wohl alle nur ego shooter

hab jetzt feierabend und probiers morgen noch mal
bis denne.

10

17.01.2007, 18:13

sorry hat mir nicht weitergeholfen.

gibt es keine fertigen lösungen?

Werbeanzeige