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

09.08.2012, 10:53

Maus eingabe

Hi



ich habe vor einigen tagen angefangen openGL und glut zu Programmieren c++ kann ich auch.



ich wollte fragen wie man sich mit einer maus eingabe umschaut also maus nach oben camara nach oben



und wie man nach links und rechts leuft






nach vor laufe ich zur zeit so:


C-/C++-Quelltext

1
2
3
4
5
6
7
if(key == 'w'){

        fTranslatez -= cos( fRotateY * fPi180 );

        fTranslatex -= sin( fRotateY * fPi180 );

    }

FSA

Community-Fossil

  • Private Nachricht senden

2

09.08.2012, 11:57

Willkommen im Forum. Vorab Forensuche benutzen ;)
FPS-Steuerung

Das Bewegen sollte dann einfach:

C-/C++-Quelltext

1
Position += Bewegungsrichtung * Geschwindigkeit * VergangeneZeit;

Rückwärts muss du Position -= ... schreiben
Seitwärts ist etwas komplizierter. Versuche erst mal das hinzu bekommen ;)
Grüße

Zitat

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

3

09.08.2012, 14:06

also vor zurück und und nach links und nachrechts schauen geht schon



ich würde ganz gern noch wissen wie die formel für links und rechts laufen heißt



und wie ich mich mit meiner maus in alle richtungen umschauen kann



also zum beispiel

C-/C++-Quelltext

1
2
3
4
5
void handleKeypress(unsigned char key, int x, int y) {

    if(MAUS == RECHTS){

        fRotateY -= 1.5    }




so etwas noch für oben und unten

FSA

Community-Fossil

  • Private Nachricht senden

4

09.08.2012, 15:11

Wie berechnest du deine Kameramatrix? Und vor allem was machst du da? Es steht übrigens auch alles in dem Verlinkten Artikel.

Zitat

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

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

5

09.08.2012, 15:17

Bei mir sieht das so aus (welche Vektoren ich habe siehst du ja):

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
66
67
68
69
70
71
72
FreeCamera::FreeCamera(vec3 position, vec3 lookAt, vec3 up, float fovy, float ratio, float zNear, float zFar):Camera(position, lookAt, up, fovy, ratio, zNear, zFar){
    m_lookAt = m_lookAt-m_position;
    m_lookAt.normalize();
    m_lookAt += m_position;
}

FreeCamera::FreeCamera(vec3 position, vec3 lookAt, float fovy, float ratio, float zNear, float zFar):Camera(position, lookAt, fovy, ratio, zNear, zFar){
    m_lookAt = m_lookAt-m_position;
    m_lookAt.normalize();
}

FreeCamera::~FreeCamera(){

}

void FreeCamera::forward(float f){
    vec3 dir = m_lookAt-m_position;
    dir.normalize();
    dir *= f;

    m_position += dir;
    m_lookAt += dir;

    m_updateModelview = true;
}

void FreeCamera::backward(float f){
    forward(-f);
}

void FreeCamera::right(float f){
    vec3 dir = vec3Cross(m_lookAt-m_position, m_up);
    dir.normalize();
    dir *= f;

    m_position += dir;
    m_lookAt += dir;

    m_updateModelview = true;
}

void FreeCamera::left(float f){
    right(-f);
}

void FreeCamera::up(float f){
    m_position += m_up*f;
    m_lookAt += m_up*f;
}

void FreeCamera::down(float f){
    up(-f);
}

void FreeCamera::rotate(float x, float y, float f){
    vec3 dir = vec3Cross(m_lookAt-m_position, m_up);
    dir.normalize();
    dir *= f;

    vec3 rot = dir*x;
    rot.z = 0; // gilt nur für up Vektor = 0|0|1 !

    m_lookAt -= rot;

    rot = vec3Cross(m_lookAt-m_position, dir);
    rot.normalize();
    rot *= f*y;

    m_lookAt -= rot;
    
    m_updateModelview = true;
}

Werbeanzeige