Problem bei OpenGL C-Code



  • Servus Leute,
    ich versuche gerade einen Punkt in OpenGL (C) mit WASD zu bewegen,
    doch leider tut sich nix, wäre nett wenn sich mal einer denn Quellcode anschauen könnte und mir sagen könnte wo der Fehler ist,
    Danke schonmal im Vorraus,
    MfG Justus

    #include <GL/glut.h>
    #include <stdlib.h> 
    #include <time.h>
    
    float a = 0.0f;	//KOORDINATEN FÜR PUNKT IN SZENE
    float b = 0.0f;	//KOORDINATEN FÜR PUNKT IN SZENE
    
    void Szene() {
    
    	//glClearColor(0.0f, 0.0f, 0.0f, 1.0f);	//Hintergrund Farbe setzen
    	glClear(GL_COLOR_BUFFER_BIT);	//Color Buffer clearen
    
    	glPointSize(5);	//Punkt Größe
    	glBegin(GL_POINTS);	//PUNKT zeichnen
    		glColor3f(1.0f, 0.0f, 0.0f);	//Farbe vom PUNKT
    		glVertex2f(a, b);	//PUNKT Koordianten (XY)                     
    	glEnd();	//ENDE von Punkt zeichnen
    
    	glBegin(GL_LINES);
    		glColor3f(1.0, 0.0, 1.0);
    		glVertex2f(1.0f, 1.0f);
    		glVertex2f(-1.0f, -1.0f);
    	glEnd();
    
    	glFlush();	//Rendern
    }
    
    void tasten (unsigned char key, int xmouse, int ymouse)
    {	
    	switch (key){
    		case 'w':
    			b+0.1;
    		break;
    
    		case 'a': 
    			a-0.1;
    		break;
    
     		case 's': 
    			b-0.1;
    		break;
    
     		case 'd': 
    			a+0.1;
    		break;
    
     		case 'r': 
    			a = 0.0f;
    			b = 0.0f;
    		break;
    
    		default:
             break;
    	}
       glutPostRedisplay(); 
    }
    
    /*
    void Szene2(){
    	glClearColor(0.0f, 0.0f, 0.0f, 1.0f);	//Hintergrund Farbe setzen
    	glClear(GL_COLOR_BUFFER_BIT);	//Color Buffer clearen
    	glBegin(GL_LINES);
    		glColor3f(0.0, 0.0, 1.0);
    		glVertex2f(1.0f, 1.0f);
    		glVertex2f(1.0f, -1.0f);
    	glEnd();
    	glBegin(GL_LINES);
    		glColor3f(0.0, 0.0, 1.0);
    		glVertex2f(0.9f, 0.9f);
    		glVertex2f(0.9f, -0.9f);
    	glEnd();
    	glBegin(GL_LINES);
    		glColor3f(0.0, 0.0, 1.0);
    		glVertex2f(0.8f, 0.8f);
    		glVertex2f(0.8f, -0.8f);
    	glEnd();
    	glFlush();
    }
    */
    
    int main(int argc, char **argv) {
    	srand(time(NULL));	
    	glutInit(&argc, argv);	//Initialisierung von GLUT
    	glutCreateWindow("JUSTUS TEST");	//WINDOW Name
    	glutInitWindowSize(300, 300);	//Größe des Fensters
    	glutInitWindowPosition(50, 50);	//Position des Fensters
    	glutReshapeWindow(500, 500);	//Größe des Fensters auf Wunsch Wert umändern
    	glutDisplayFunc(Szene);	//Welche Szene gerendert werden soll
    	glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);	//RGB = Default Farben	DOUBLE = Für schönere Animationen	DEPTH = Depth Buffer
    	glutKeyboardFunc(tasten);
    	glutMainLoop();	//Glut in Endlosschleife setzen
    
    	return 1;
    }
    


  • Hi. Ich kenne mich nicht mit GLUT aus, allerdings könnte es gut sein, dass GLUT Tastatureingaben nicht als ASCII-Zeichen, sonden als Tastatur-Scancode verarbeitet.
    moment... ich "googel" mal gerade nach "glutKeyboardFunc" - nein der key ist tatsächlich ASCII.
    Jetzt schau ich mir deinen Code mal genauer an... WTF?

    case 'w':
                b+0.1;
    

    Ist das dein Ernst?
    Nur so viel: " b+0.1 " ist ein Ausdruck, keine Zuweisung.
    Den Rest solltest du dir selbst erschiessen können.

    Meine Empfehlung: Vertiefe deine Kenntnisse in der Programmiersprache noch ein wenig, bevor du deine Probleme hier als OpenGL-Problem titulierst.
    Wie du sicher an meinen hier niedergeschriebenen Gedankengängen und Aktionen erkennen kannst,
    ist es nämlich ziemlich zeitraubend und letztendlich ernüchternd wenn das eigentliche Problem derart banal ist 😉

    Gruss,
    Finnegan


Anmelden zum Antworten