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

31.01.2006, 18:18

OpenGL-Matrix invertieren

Wie invertiert man eine Matrix wie sie die OpenGL-Befehle benutzen?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
template <typename T=float>
    class Matrix
    {
    public:
        union
        {
            struct
            {
                T   m00,m01,m02,m03,
                    m04,m05,m06,m07,
                    m08,m09,m10,m11,
                    m12,m13,m14,m15;
            };

            T   n[16];
...

Matrix(T _m00,T _m04,T _m08,T _m12,
               T _m01,T _m05,T _m09,T _m13,
               T _m02,T _m06,T _m10,T _m14,
               T _m03,T _m07,T _m11,T _m15):m00(_m00),m01(_m01),m02(_m02),m03(_m03),
                                            m04(_m04),m05(_m05),m06(_m06),m07(_m07),
                                            m08(_m08),m09(_m09),m10(_m10),m11(_m11),
                                            m12(_m12),m13(_m13),m14(_m14),m15(_m15) {}
Mein Projekt: Rise of the Sylvan

Anonymous

unregistriert

2

31.01.2006, 18:39

Hä? Was hat das mit OpenGL befehlen zu tun? Nebenbei: Gibt es eigentlich "Befehle" in OpenGL? Nö.

Wenn Du diesen glTranslate, glRotate und co -Mist meinst, tja. Dann haben Sie nicht nachgedacht mein Herr ;)

Schreib Dir ne Matrixklasse wo alles drin ist und setze Deine Matrizen mit glMatrixMultif (oder so). Und lass diesen Unsinn mit glIdentity usw. oder glPerspective, oder gluLookAt. Damit haste nur Sorgen später.

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

3

31.01.2006, 19:47

Ich schätze mal du meinst einfach, wie Matrizen invertiert werden:
Dazu solltest du Google zu Entwicklungssatz von LaPlace befragen.
Diesen kannst du dann für 4x4 Matrizen optimieren. Viell. gibt es auch noch bessere Verfahren, weiß ich jezt auf die Schnelle aber nicht.

nix_da
Könntest du möglicherweise mal damit aufhören, Alles was du nicht verwendest als Mist zu bezeichnen

mfg Philipp

Anonymous

unregistriert

4

31.01.2006, 20:52

Phil_GDM
Wieso? Ist Unflexibel, manipuliert die aktuelle Matrix (wenn man nicht mit glPushMatrix arbeitet) usw. Ergo: Mist.

Anonymous

unregistriert

5

31.01.2006, 21:14

Zitat von »"Phil_GDM"«


Könntest du möglicherweise mal damit aufhören, Alles was du nicht verwendest als Mist zu bezeichnen


Wo ist das Problem? Ich sehe das genauso.
Ich arbeite ja nicht mit nix da }>

6

31.01.2006, 21:43

@nix da
1. Ja die werden Befehle genannt (zumindest vom RedBook).
2. glTranslate und co laufen schneller als glMultMatrix und glLoadMatrix
3. Ich bin ja an ner Matrixklasse wie du siehst.
4. In OpenGL sind Matrizen so wie ich weiß column-major im Gegensatz zu Direct3D, wo sie row-major sind.
5. Was hast du gegen glLoadIdentity()? Wie soll ich denn die ganzen Befehle ersetzen?

Ich hab mich jetzt einfach mal nach dem Muster gerichtet, wie oben im Code-Bsp. Wenn jemand n besseren Vorschlag hat, kann er's ja posten.
Mein Projekt: Rise of the Sylvan

Anonymous

unregistriert

7

31.01.2006, 23:18

Crash
1. Grauenvoll: Korrekte Beschreibung für die beiden Varianten von "Funktionen" sind einmal "Funktionen" und "Prozeduren". Aber Befehle? Befehle sind sowas wie in der Shell, aber nicht sowas

2. Tja sowas aber auch, ist das ein Grund Deine aktuelle Matrix zu vergewaltigen? Die paar Millisekunden (weniger als 2) sind kein Argument

3. Gut, dann mal weiter

4. Naund? Wayne? Die Mathematik ist bei beiden gleich und Punkt. Das wird Dir selbst jeder Matheprof sagen. Ansonsten, Tipp: Transponieren.

5. Schreib Dir ne "identity" Funktion für Deine Klasse und benutz ausschließlich für jegliche mathematisch Benutzung Deine Klasse und setze die Matrix dann mit glMultMatrixf.

6. Die Klasse ist passabel, nur ne unnamedstruct solltest Du anders lösen, kenne im cpp Forum einige die Dich deshalb gerne hinrichten würden.

8

01.02.2006, 14:58

Was hast du gegen ne unnamedstruct?
Mein Projekt: Rise of the Sylvan

Anonymous

unregistriert

9

01.02.2006, 15:33

Crash
Ist illegal

10

01.02.2006, 16:32

Na gut. Ist aber umständlich immer mat.elements.m11 zu schreiben.
Egal, hab das Prob mit dem Invertieren gelöst.
Mein Projekt: Rise of the Sylvan

Werbeanzeige