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

Gandi

Frischling

  • »Gandi« ist der Autor dieses Themas

Beiträge: 36

Wohnort: Bayern

Beruf: Elektrotechnikingenieur

  • Private Nachricht senden

1

18.08.2008, 00:28

[Direct3D]Seltsame Achsen-/Kameraprobleme

Hey,

mein kleines Team und ich sind zurzeit dabei eine eigene Grafikengine zu schreiben. Wir kommen auch gut vorran und alles, allerdings macht uns ein sehr seltsamer Fehler zu schaffen...

Und zwar sind die Achsen irgendwie um 45° verschoben. Wenn ich zum Beispiel vom Punkt (0,0,-10) zum Punkt (0,0,0) schaue und dann ein Objekt auf der X Achse verschiebe, so bewegt es sich nicht schön grade waagrecht nach rechts, sondern wandert nach rechts unten.

Bei Bedarf kann ich natürlich auch noch Code/Screenshots posten, aber vielleicht machen wir ja auch einen typischen Anfängerfehler und jemand kann hier direkt die Antwort liefern. :)

Gruss
Gandi

2

18.08.2008, 01:44

Vielleicht ist die kamera einfach gedreht? Wenn du einen Gegenstand entlang der Y-Achse bewegst geht er nach unten links, oder?
Wodurch hast du den Blickwinkel denn definiert? Für eine eindeutige Kameraposition brauchst du 1 Vektor der in die Richtung der Kamera schaut und einen Vektor, der die Drehposition der Kamera bestimmt. (Wahlweise 90° und zeigt in Richtung des oberen Bildschirmrandes)

Ist zumindest mein erster Gedanke dazu :)

3

18.08.2008, 01:50

Wie ist denn dein Up-Vektor der Kamera?

Gandi

Frischling

  • »Gandi« ist der Autor dieses Themas

Beiträge: 36

Wohnort: Bayern

Beruf: Elektrotechnikingenieur

  • Private Nachricht senden

4

18.08.2008, 14:04

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
        D3DXMATRIX MatrixKamera;
        D3DXMatrixLookAtRH(&MatrixKamera, &Quelle, &Ziel, AUFWAERTSACHSE);
        Device->SetTransform(D3DTS_VIEW, &MatrixKamera);
        
        D3DXMATRIX MatrixProjektion;
        D3DXMatrixPerspectiveFovRH(&MatrixProjektion,
                                       Sichtfeld*deg2radf,
                                       AspectRatio,
                                       NahePlane,
                                       FernePlane);
        Device->SetTransform(D3DTS_PROJECTION, &MatrixProjektion);


Die Variablen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
Quelle = D3DXVECTOR3(0,0,-10.0f)
Ziel     = D3DXVECTOR3(0,0,0)
AUFWAERTSACHSE = &D3DXVECTOR3(0,1.0f,0)
Sichtfeld = 45.0f
deg2radf = 180/PI
AspectRatio = 1024/768
NahePlane = 1.0f
FernePlane =100.0f

5

18.08.2008, 14:32

Keine Ahnung, wie eure Bewegung der Kamera abläuft, aber euch ist klar, daß bei der Verwendung von D3DXMatrixLookAtRH die Z-Achse vertauscht ist?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

18.08.2008, 14:34

Zitat von »"Gandi"«

C-/C++-Quelltext

1
deg2radf = 180/PI


sollte das nicht eher PI / 180.0f sein!?

Zitat von »"Gandi"«

C-/C++-Quelltext

1
AUFWAERTSACHSE = &D3DXVECTOR3(0,1.0f,0) 


Mit sowas wär ich äußerst vorsichtig. Ich kann mir grad selber nicht erklären warum das funktioniert. Du weist da scheinbar einem Pointer die Adresse eines Temporaries zu!?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

18.08.2008, 14:42

Zitat von »"TrikkieMikkie"«

[...] aber euch ist klar, daß bei der Verwendung von D3DXMatrixLookAtRH die Z-Achse vertauscht ist?


scheint so, immerhin verwenden sie ja auch die richtige projektionsmatrix dazu...

aber gut aufgepasst! ich muss zugeben: wär mir garnicht aufgefallen ;)

Gandi

Frischling

  • »Gandi« ist der Autor dieses Themas

Beiträge: 36

Wohnort: Bayern

Beruf: Elektrotechnikingenieur

  • Private Nachricht senden

8

18.08.2008, 14:53

Erstmal danke für die vielen schnellen Antworten, sowas kenne ich in keinem anderen Forum :D

Zitat von »"dot"«

Zitat von »"Gandi"«

C-/C++-Quelltext

1
deg2radf = 180/PI


sollte das nicht eher PI / 180.0f sein!?

Zitat von »"Gandi"«

C-/C++-Quelltext

1
AUFWAERTSACHSE = &D3DXVECTOR3(0,1.0f,0) 


Mit sowas wär ich äußerst vorsichtig. Ich kann mir grad selber nicht erklären warum das funktioniert. Du weist da scheinbar einem Pointer die Adresse eines Temporaries zu!?


Oh, das mit dem 180/PI ist tatsächlich vertauscht... danke für den Hinweis
:oops: Allerdings erklärt das nicht die seltsame Drehung.

Und wegen der Achse: Das ist eigentlich eine Konstante

C-/C++-Quelltext

1
    const Vektor*   AUFWAERTSACHSE      = &Vektor(0,1.0f,0);


Ich hab das hier nur zur Übersichtlichkeit direkt hingeschrieben.

Anonymous

unregistriert

9

18.08.2008, 14:59

C-/C++-Quelltext

1
const Vektor* AUFWAERTSACHSE = &Vektor(0,1.0f,0);
Warum in Gottes Namen macht den jemand so einen Quatsch?!

Machs so:

C-/C++-Quelltext

1
const Vektor AUFWAERTSACHSE (0,1.0f,0);
Je weniger du mit Pointern rumhantierst, desto weniger Laufzeitfehler wirst du bekommen.

Gandi

Frischling

  • »Gandi« ist der Autor dieses Themas

Beiträge: 36

Wohnort: Bayern

Beruf: Elektrotechnikingenieur

  • Private Nachricht senden

10

18.08.2008, 15:10

Läuft doch aufs selbe raus, wenn ich deine Methode anwende hab muss ich halt jeden Frame die Adresse abfragen und so hab ich direkt die Adresse. Ich versteh ehrlichgesagt nicht wo ich mit deiner Methode weniger mit Pointer "rumhantiere" und Laufzeitfehler hat das ganze auch noch nie erzeugt.

Werbeanzeige