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

Phili

unregistriert

1

20.12.2005, 18:49

Probleme Mit Matrizen in Shadern

Wenn ich eine Projectionsmatrix mit D3DX erstellen will, dann will die Funktion einen Wert in radians:

fovy
[in] Field of view in the y direction, in radians

Was für ein Wert ist für eine normale Projection sinnvoll?

bassdscho

Alter Hase

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

2

20.12.2005, 18:54

120°
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

Phili

unregistriert

3

20.12.2005, 18:56

und wie viel "radians" sind 120°?

Anonymous

unregistriert

4

20.12.2005, 19:01

bassdscho
Also wen man es realistisch haben will, dann wäre 190° schon eher richtig. Für Games wird in der Regel ein Winkel von 45° benutzt.

Außerdem, wieso D3DX?

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
25
26
27
28
29
void direct3d::createProjection (float fov, float aspect, float nearPlane, float farPlane)
{
        // Sicherheitsabfragen

    if (abs<float>(farPlane-nearPlane) < epsilon<float>::value)
        return;
    if (abs<float>(sin<float>(deg2rad<float>(fov)/2)) < epsilon<float>::value)
        return;

        // Zwischenwerte berechnen

    const float cosin  = cos<float>(deg2rad<float>(fov)/2) / sin<float>(deg2rad<float>(fov)/2);
    const float farinv = farPlane / (farPlane - nearPlane);

        // Temporäres Objekt

    ::D3DMATRIX temp;

        // Einheitsmatrix erstellen

    matrixIdentity (&temp);

        // Matrix verändern

    temp._11 = aspect*cosin;
    temp._22 = 1.0f*cosin;
    temp._33 = farinv;
    temp._34 = 1.0f;
    temp._43 = -farinv*nearPlane;
    temp._44 = 0.0f;

        // Projektionsmatrix setzen

    direct3d_device_->SetTransform (D3DTS_PROJECTION, &temp);
}


Für so was popeliges braucht man nun wirklich kein D3DX.

D3DX sucks! Macht das Programm größer, sinnlos, langsam und einfach nur unkonfortabel da es nicht dem COM-Prinzipien entspricht.

- Patrick, der alles selbst macht.

Anonymous

unregistriert

5

20.12.2005, 19:03

Phili
http://www.germangamedev.de/index.php?site=faq&id=9 << da steht was feines von deg2rad ;) Benutzen und fertig.

Bei meiner Funktion brauchste das jedoch nicht, da ich nur in Grad rechne. Bogenmaß ist so unglaublich unkomfortabel ;)

bassdscho

Alter Hase

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

6

20.12.2005, 19:14

Den Wert hab ich ganz hinten aus meinem Gehirn gegraben ^^
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

24.12.2005, 12:11

190° :o

das würde doch bedeuten, dass ich mit meinen augen links und rechts jeweils 5° nach hinten schauen könnte!?


btw:

C-/C++-Quelltext

1
temp._22 = 1.0f*cosin;


warum nicht einfach

C-/C++-Quelltext

1
temp._22 = cosin;

Anonymous

unregistriert

8

24.12.2005, 13:47

dot
Ist Dir das noch nie aufgefallen?

Teste mal folgendes: Streck Deine Arme aus, den Linken ganz nach Links, den Rechten ganz Nach rechts. Dann im Rechen Grad winkel den Unterarm nach oben. Wenn Du nun die Finger rauf und Runter bewegst als wenn Du "irgendein wort" in Anführungszeichen sagen willst. siehst du das.

Drückst Du die Arme weiter nach hinten (ja bis es in den Schultern weh tut) siehst Du sie nur noch schimmern, aber siehst sie noch.

Grund: Das Auge steht etwas aus dem Auge hervor und ist nicht tief in Deinem Schädel drin. Dadurch guckt die Linse fast soweit heraus wie deine Stirn (okay +- 1,5 bis 0,5 cm) hervor.

Ein Weiterer test: Halte dein Linkes Auge mit der Rechten Handfläche zu. Geh mit der Linken hand vor die Handfläche ca 1cm. und beweg die Finger. Das siehst DU.

Wäre das Auge tief im Kopf eingebettet und würde nicht was vervor sehen, könntest Du die Hand wegen der störenden Nase nicht sehen.

Jetzt machst Du das selbe wie eben: Linken arm ausstrecken, nach hinten beugen, rechter Winkel und fummeln. Da das auge abgedeckt ist, siehst Du das nicht. Tust du jedoch deine Rechte hand vom auge weg, siehst Du es wieder schimmern, obwohl der Winkel über 90° ist vom Linsenmittelpunkt bis zur Hand.

Warum man jetzt nicht 180-190° in Spielen angeben kann ist einfach: Du Projezierst was auf eine Fläche! Würde eine Kamera solch einen Winkel haben und Du es Dir auf dem TV ansehen, würdest Du denken "Scheiß Bild", da das Menschliche gehirn sowas einfach auf einer Mattscheibe total schlecht interpretieren kann. Daher haben Kameras oft einen Winkel von 35-75°, Optimal ist jedoch 45°

bassdscho

Alter Hase

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

9

25.12.2005, 00:10

Bogenmaß find ich auch voll unkomfortabel, weil ich mir nicht vorstellen kann was 2 Pi sind.
Mit 45° meinst du aber nur den halben Sichtbereich?!?!
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

Anonymous

unregistriert

10

25.12.2005, 00:25

bassdscho
Nein, den vollen Sichtbereich.

Werbeanzeige