Du bist nicht angemeldet.

Werbeanzeige

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas

Beiträge: 1 933

Wohnort: Hessen

  • Private Nachricht senden

1

22.09.2011, 17:32

[GELÖST!]Kamera Bewegung auf X Achse

Hallo
Ich muss jetzt doch noch mal etwas Frage.
Ich arbeite ja an einem Ego-Shooter. Nun möchte ich das wenn die A Taste gedrückt wird der Spieler ( Kamera ) zur Seite "Geht".
Einfach mit CamPos.x += 25.0f * PassedSecs; ist da nichts zu machen. Die Kamera bewegt sich zwar in die richtung aber leider nicht mehr zur Seite wenn man woanderst hinguckt.
Meine lösungsansätzen waren die CamDirection.z und CamPos irgendwie miteinander Mal zu nehemn leider erfolglos die Kamer fliegt irgendwo hin wo man si nicht habe will.
Also nochmal kurz: Bei der A Taste Kamera zur Linken Seite gehen lassen, auch wenn man die Blickrichtung geändert hat, soll sie immernoch zur Seite gehen.
Wie lässt sich das Rechnen?
Danke

Zitat von »LetsGo«

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

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »FSA« (28.09.2011, 14:24)


ProAmateur

Alter Hase

Beiträge: 435

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

2

22.09.2011, 18:25

also wenn ich richtig verstanden hab, willst du, dass der Typ nach links geht
und immer noch nach gerade aus guckt.
oda?
So und was geht da jetzt nicht?
Vieleicht wäre mal ein bisschen code nit schlecht :-D
ProAmateur
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

dot

Supermoderator

Beiträge: 9 846

Wohnort: Graz

  • Private Nachricht senden

3

22.09.2011, 18:46

Du brauchst ein Koordinatensystem, das den Spieler in der Welt platziert. Wenn du ein Playermodel oder so renderst, dann hast du sowas auch schon. Wenn du sowas hast, dann kennst du auch dessen x-Achse. Und wenn du die kennst, bist du fertig.

Schorsch

Supermoderator

Beiträge: 5 159

Wohnort: Wickede

Beruf: Student

  • Private Nachricht senden

4

22.09.2011, 18:47

Das Problem ist, dass die Kameraposition in Weltkoordinaten ist. Wenn du die Kameraposition auf der x-Achse verschiebst, passiert auch genau das. Wichtig ist hierbei, dass deine Kamera ja nicht immer entlang der y- oder z-Achse guckt. Wenn du die Kamera drehst, musst du also die Kamera nicht entlang der x-Achse verschieben, sondern den Winkel der Kamera mit einberechnen. Überleg doch mal wie du eine Spielfigur geradeaus laufen lassen würdest, wenn sie nicht gerade nach oben guckt. Das ist genau das gleiche Problem. Überleg ruhig erst mal im 2D-Raum.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas

Beiträge: 1 933

Wohnort: Hessen

  • Private Nachricht senden

5

22.09.2011, 20:28

@Schorsch
Stimmt, dass ist das gleiche problem habe es gerade mal gezeichnet.
Man müsste irgendwie den Winkel berechnen und dann Mal nehmen oder?
Oder Denk ich da jetzt Falsch?
Ich habe mir überlegt das man vll auch nur um die lokaleX Achse dreht, und das dann in die KameraMatrix mit einrechnet.
Geht sowas?
MFG

Zitat von »LetsGo«

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

DeKugelschieber

Community-Fossil

Beiträge: 2 670

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

6

22.09.2011, 20:47

Keine Ahnung, aber ich habs übers Kreuzprodukt gemacht...

dot

Supermoderator

Beiträge: 9 846

Wohnort: Graz

  • Private Nachricht senden

7

22.09.2011, 20:51

Nurmal rein prinzipiell: Du hast deine Kamera in der Szene platziert. Damit du das kannst, musst du die x-Achse zwangsweise schon kennen. Ich versteh also nicht ganz, wo jetzt genau das Problem liegt.

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas

Beiträge: 1 933

Wohnort: Hessen

  • Private Nachricht senden

8

22.09.2011, 21:20

Das problem ist das ich keine lösung finde.
Ich habe jetzt nochmal probiert indem ich x und z bei Camera Direction vertauscht habe->Hat halb funktioniert.
Also wenn ich gerade nach vorn gucke konnte ich zur Seite, aber wenn ich mich dann 90° gedreht habe war alles Falschrum. Und bei 45° Ging sie in alle richtungen^^
Ich glaub ich bin zu Blöd dafür :D ( Scherz )
Danke

Zitat von »LetsGo«

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

DeKugelschieber

Community-Fossil

Beiträge: 2 670

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

9

22.09.2011, 21:52

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
    private:
        float m_pos[3], m_dir[3], m_rot[2], m_jump_dir[3], m_ground, m_jumping; 
        int m_moveS, m_moveF;
        bool m_crouching;

    blablabla...
                    
            // Laufen
            if(m_pos[1] == m_ground || m_crouching){
                m_pos[0] += m_moveF*m_dir[0]*0.08;
                m_pos[2] += m_moveF*m_dir[2]*0.08;
                m_pos[0] += (m_dir[1]*0-m_dir[2]*1)*m_moveS*0.08;
                m_pos[2] += (m_dir[0]*1-m_dir[1]*0)*m_moveS*0.08;   
            }
            else{
                m_pos[0] += m_moveF*m_jump_dir[0]*0.08;
                m_pos[2] += m_moveF*m_jump_dir[2]*0.08;
                m_pos[0] += (m_jump_dir[1]*0-m_jump_dir[2]*1)*m_moveS*0.08;
                m_pos[2] += (m_jump_dir[0]*1-m_jump_dir[1]*0)*m_moveS*0.08;
            }

            // Ducken
            if(m_crouching){
                m_pos[1] = m_ground-0.5;
            }
            else{                                       
                // Springen
                if(m_jumping > 0){
                    m_jumping -= 0.0045;
                    m_pos[1] += m_jumping;
                }

                // Fallen
                if(m_jumping <= 0 || m_pos[1] > m_ground){
                    m_jumping -= 0.0045;
                    m_pos[1] += m_jumping;                  
                }

                if(m_pos[1] <= m_ground){
                    m_jumping = 0;
                    m_pos[1] = m_ground;
                }
            }
        }
                
        void forward(int m){
            m_moveF = m;            
        }
        
        void sideward(int m){ 
            m_moveS = m;
        }
        
        void rotate(float x, float y){
            m_rot[0] += x*0.001;
            m_rot[1] += y*0.001;
            
            // Y max = PI
            if(m_rot[1] < -3.1){
                m_rot[1] = -3.14159;    
            }
            else if(m_rot[1] > 0){
                m_rot[1] = -0.00001;
            }
        }


Hab ich gerade gefunden (mal meine Ordner durchsucht), ist alt und vor allem veraltet (würde ich jetzt neu schreiben, also bitte keine Kritik an meinem Noob-Code). Aber die Berechnung sollte da sein :)

[EDIT]

So ist besser...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DeKugelschieber« (22.09.2011, 22:03)


dot

Supermoderator

Beiträge: 9 846

Wohnort: Graz

  • Private Nachricht senden

10

22.09.2011, 21:54

Du hast doch eine View Matrix? Lass mich dir verraten, dass der Vektor, den du suchst, in der ersten Spalte dieser Matrix steckt.

Werbeanzeige