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

24.06.2012, 19:35

lookAt Position

Hallo :),

ich will im 3D-Raum die lookAt Koordinaten berechnen. Aber leider mache ich das falsch. Hat jemand eine Idee wie ich das (mit glm) machen könnte?

So habe ich es versucht:

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
30
    glm::vec3 direction(
            cos(verticalAngle) * sin(horizontalAngle),
            sin(verticalAngle),
            cos(verticalAngle) * cos(horizontalAngle)
            );
    
    // Right vector
    glm::vec3 right = glm::vec3(
            sin(horizontalAngle - 3.14f/2.f),
            0,
            cos(horizontalAngle - 3.14f/2.f)
            );
    
    
    glm::vec3 eye = position;
    
    glm::vec3 up = glm::cross(right, direction);
    
    glm::vec3 lookAt = position + direction;
    
    
    
    float Z = glm::normalize(eye - lookAt);
    float X = glm::normalize(up * Z);
    float Y = Z * X;
    
    glm::mat4 M1 = glm::mat4(glm::vec3(X, Y, Z), 1);
    glm::mat4 M2 = glm::mat4(1.0);
    
    glm::vec3 result = M1 * M2;

Aber der Compiler mag den Code nicht. Ich weiß nicht mal, ob dass was ich mache geht, denn ich kenne mich nicht so sehr mit Matrizen aus.

Mfg
Delop

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Delop« (24.06.2012, 19:42)


idontknow

unregistriert

2

24.06.2012, 20:25

Stichwort Kugelkoordinaten: http://de.wikipedia.org/wiki/Kugelkoordinaten
Du hast die Koordinaten vertauscht.

C-/C++-Quelltext

1
2
3
D3DXVECTOR3 vAt(m_MouseEye.x + std::cosf(m_Beta) * std::cosf(m_Alpha) * 150, 
                        m_MouseEye.y + std::sinf(m_Alpha) * 150, 
                        m_MouseEye.z + std::sinf(m_Beta) * cos(m_Alpha) * 150);

3

24.06.2012, 20:35

Was sind das für Winkel? Und wieso eine Kugel?

*facepalm* Sry wenn ich gerade dumm wirke, ich kenne mich nicht so mit 3D Mathematik aus.

idontknow

unregistriert

4

24.06.2012, 21:03

Ich weiß es gerade nicht welche Winkel das sind, der Code ist schon ewig alt und ich hab mir das damals hergeleitet und muesste jetzt selber erstmal überlegen, aber gnerell kann man sowas ja einfach testen!

Wegen der Kugel: Kugelkoordinaten sind sowas wie Polarkoordinaten im 3D Raum, d.h. du gibst die Vektoren über Winkel und Länge an, im 3D Raum eben 2 Winkel. Kugelkoordinaten werden eben so dargestellt und genauso stellst du deinen At Vektor dar.

FSA

Community-Fossil

  • Private Nachricht senden

5

24.06.2012, 22:45

Darf ich fragen, wovür am ende *150 genommen wird?
Die Winkel Alpha und Beta sind deine verticalAngle und horizontalAngle Variablen.

C-/C++-Quelltext

1
2
3
4
5
glm::vec3 direction(
            cos(verticalAngle) * cos(horizontalAngle),
            sin(verticalAngle),
            sin(verticalAngle) * cos(horizontalAngle)
            );

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

idontknow

unregistriert

6

24.06.2012, 23:09

Einfach damit der Punkt ein bisschen vor "dir" liegt. Das ganze stammt aus nem bisschen zusammen geklatschten Code daher die fixe Zahl ect.

7

25.06.2012, 14:27

Danke euch beiden :). Es geht jetzt.

C-/C++-Quelltext

1
2
3
4
    glm::vec3 vAt(position.x + cos(horizontalAngle) * cos(verticalAngle) * 150,
            position.y + sin(verticalAngle) * 150,
            position.z + sin(horizontalAngle) * cos(verticalAngle) * 150);
    


@FSA: Ich mache das nach einen Tutorial und da steht, dass die Achsen um 90° gedreht sind bzw. in Bogenmaß Pi / 2.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Delop« (25.06.2012, 15:52)


Werbeanzeige