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

clezZ

Frischling

  • »clezZ« ist der Autor dieses Themas

Beiträge: 14

Wohnort: Deutschland

Beruf: Schüler

  • Private Nachricht senden

1

16.06.2011, 15:58

OpenGL/glut Problem

Hey, ich hab mich jetzt mal an 3D Programmieren versucht und wollte einfach mal testen, ob ich es schaffe in einer ebene zu gehen und mich um zuschauen.
Dabei kam dann dieser Code raus: #Code aktualisiert

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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include <stdlib.h>
#include <iostream>
#include <gl/glut.h>
#include <math.h>

using namespace std;

int WindowWidth = 800;
int WindowHeight = 600;
float angle[2]={0.0f, 0.0f};//1. x-Achse, 2.Y-Achse
float PositionTranslatef[3]={0.0f, 0.0f, -15.0f};
int MousePosX, MousePosY;
POINT CursorPos;
float schrittlaenge=0.1f;
float pi=3.141592654f;
float pi_180=pi/180;

void handleKeypress(unsigned char key, int x, int y)
{
    switch (key)
    {
            case 27:  //Escape-Taste:27
                exit(0);
                break;
    }
}

void MouseMove(void)
{
    GetCursorPos(&CursorPos);
    
    int tempPosX=CursorPos.x;
    int tempPosY=CursorPos.y;
    
    int diffX=MousePosX-tempPosX;
    int diffY=MousePosY-tempPosY;
    
    angle[0]-=diffX;
    angle[1]-=diffY;
    
    SetCursorPos(100, 100); //Maus an die Position setzen, damit maus nicht den Rand berührt.
    
    MousePosX=100;
    MousePosY=100;
}

void Moves(int value)
{
    MouseMove();
    
    if(GetAsyncKeyState(0x26)){ PositionTranslatef[0]+=schrittlaenge*cos(pi_180*angle[0]+pi_180*90); PositionTranslatef[2]+=schrittlaenge*sin(pi_180*angle[0]+pi_180*90);}//Up
    if(GetAsyncKeyState(0x28)){ PositionTranslatef[0]+=schrittlaenge*cos(pi_180*angle[0]-pi_180*90); PositionTranslatef[2]+=schrittlaenge*sin(pi_180*angle[0]-pi_180*90);}//Down
    if(GetAsyncKeyState(0x25)){ PositionTranslatef[0]+=schrittlaenge*cos(pi_180*angle[0]); PositionTranslatef[2]+=schrittlaenge*sin(pi_180*angle[0]);}//Left
    if(GetAsyncKeyState(0x27)){ PositionTranslatef[0]+=schrittlaenge*cos(pi_180*angle[0]+pi_180*180); PositionTranslatef[2]+=schrittlaenge*sin(pi_180*angle[0]+pi_180*180);}//Right
    
    glutPostRedisplay();
    glutTimerFunc(25, Moves, 0);
}

void initRendering()
{
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_COLOR_MATERIAL);
     glEnable(GL_LIGHTING); 
     glEnable(GL_LIGHT0);
     glEnable(GL_NORMALIZE); 
}

void handleResize(int w, int h)
{
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45.0, (double) w/(double) h, 0.5, 200.0);
}

void DrawScene()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glClearColor(2.0f, 2.0f, 2.0f, 0.0f);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    
     GLfloat ambientColor[] = {0.2f, 0.2f, 0.2f, 1.0f};//Farbe
    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientColor);
    
     GLfloat lightColor0[] = {0.5f, 0.5f, 0.5f, 1.0f}; //Helligkeit
     GLfloat lightPos0[] = {0.0f, 0.0f, 0.0f, 1.0f}; //Position
     glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor0);
     glLightfv(GL_LIGHT0, GL_POSITION, lightPos0);
     
    glPushMatrix();
    
     glRotatef(angle[0], 0.0f, 1.0f, 0.0f);
     glRotatef(angle[1], 1.0f, 0.0f, 0.0f);
     glTranslatef(PositionTranslatef[0], PositionTranslatef[1], PositionTranslatef[2]);
    
        glTranslatef(-0.7f, 0.0f, 0.0f);
        glColor3f(1.0f, 0.0f, 0.0f);
        glutSolidSphere(0.5, 50, 50);
        
    glPopMatrix();
    
    glutSwapBuffers();
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowSize(WindowWidth, WindowHeight);
    
    glutCreateWindow("");
    initRendering();
    
    //glutFullScreen(); //Falls Vollbild
    glutSetCursor(GLUT_CURSOR_NONE); //Falls kein Cursor im Bild sein soll
    
    glutDisplayFunc(DrawScene);
    glutKeyboardFunc(handleKeypress);
    glutReshapeFunc(handleResize);
    
    SetCursorPos(100, 100); //Maus an die Position setzen, damit maus nicht den Rand berührt.
    GetCursorPos(&CursorPos);
    MousePosX=CursorPos.x;
    MousePosY=CursorPos.y;
    
    glutTimerFunc(25, Moves, 0);// Update alle 25 millisekunden
    
    glutMainLoop();
    return 0;
}

Ich kann mir auch denken, dass der Quellcode schlampig geschrieben ist. Ist eben mein erster Versuch.

Also ich hab versucht um zu gehen einfach abzufragen, ob eine Pfeiltaste gedrückt wird und dann soviel in x, bzw. z-Richtung zu laufen, das hat auch funktioniert, bis man sich mit der Maus auch umschauen konnte. Dann läuft man nicht mehr nach vorne sondern weiterhin in die gleiche richtung. Das liegt daran, das ich die gesamte Umgebung mit Translatef verschoben hab. Das funktioniert dann aber nicht.
Ich bitte um Hilfe.

#edit: Okay, das Problem mit dem Laufen hab ich jetzt selbst mit ein bisschen Sinus und Cosinus hinbekommen.
Also irgendwie mach ich das total falsch, egal wo ich hin gehe, das licht geht mit mir mit und wenn ich duch den Ball durch bin, ist die y-achse umgekehrt...
MfG ClezZ :D (der Neuzugang)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »clezZ« (16.06.2011, 17:44)


clezZ

Frischling

  • »clezZ« ist der Autor dieses Themas

Beiträge: 14

Wohnort: Deutschland

Beruf: Schüler

  • Private Nachricht senden

2

16.06.2011, 17:18

Okay, das Problem mit dem Laufen hab ich jetzt selbst mit ein bisschen Sinus und Cosinus hinbekommen.
#edit: Wie lösch ich diesen Beitrag? ^^
MfG ClezZ :D (der Neuzugang)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »clezZ« (16.06.2011, 17:46)


Ähnliche Themen