Problem bei OpenGL C-Code II



  • Servus Leute,
    ich habe mal wieder ein Problem mit meinem Code!
    Ich versuche in einer Switch-Anweisung zu prüfen ob die eine Variable der anderen entspricht doch leider klappt da irgendetwas nicht.
    Wäre nett wenn mit jemand helfen kann!
    Kann man in eine Switch-Abfrage überhaupt eine If-Schleife reinmachen?
    MfG Justus
    P.S.: Der Fehler sollte im Fett markierten Bereich sein!

    #include <GL/glut.h>
    #include <stdlib.h> 
    #include <time.h>
    #include <stdio.h>
    
    float a = 0.0f;	//KOORDINATEN FÜR PUNKT IN SZENE
    float b = 0.0f;	//KOORDINATEN FÜR PUNKT IN SZENE
    int koordinaten_anzahl = 0;
    
    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
    
    	//Ränder
    	glLineWidth(10.0f);
    	glBegin(GL_LINES);
    		glColor3f(1.0, 0.0, 0.0);
    		glVertex2f(1.0f, 1.0f);
    		glVertex2f(1.0f, -1.0f);
    	glEnd();
    	glBegin(GL_LINES);
    		glColor3f(1.0, 0.0, 0.0);
    		glVertex2f(-1.0f, 1.0f);
    		glVertex2f(-1.0f, -1.0f);
    	glEnd();
    	glBegin(GL_LINES);
    		glColor3f(1.0, 0.0, 0.0);
    		glVertex2f(-1.0f, -1.0f);
    		glVertex2f(1.0f, -1.0f);
    	glEnd();
    	glBegin(GL_LINES);
    		glColor3f(1.0, 0.0, 0.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.025;
    			if(b == 0.025000){
    				b = 0.0f;
    				a = 0.0f;
    			}else{
    				printf("\nVariablen:");
    				printf("\nVariable A: %f\n", a);
    				printf("Variable B: %f\n", b);
    			}
    		break;
    
    		case 'a': 
    			a-=0.025;
    		break;
    
     		case 's': 
    			b-=0.025;
    		break;
    
     		case 'd': 
    			a+=0.025;
    		break;
    
     		case 'r': 
    			a = 0.0f;
    			b = 0.0f;
    		break;
    
    		case 'g': 
    			koordinaten_anzahl++;
    			printf("Koordinate %d\n", koordinaten_anzahl);
    			printf("Position X: %f\n", a);
    			printf("Position Y: %f\n", b);
    			printf("Variable A: %f\n", a);
    			printf("Variable B: %f\n", b);
    		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);	//Auf Switch zugreifen
    	printf("WASD - Punkt bewegen; R - Punkt auf (0|0) zurücksetzen; G - Koordinaten von Punkt anzeigen lassen\n");
    
    	glutMainLoop();	//Glut in Endlosschleife setzen
    
    	return 1;
    }
    


  • Nerve nicht ständig mit neuen Beiträgen zum selben Thema.
    Globale Variablen benutzen nur Deppen.



  • Sorry das ich ein Anfänger bin!



  • justusreto schrieb:

    Sorry das ich ein Anfänger bin!

    Solche Aussagen finde ich zum kotzen. Aber gut, ich gehe darauf mal nicht weiter ein. Wenn du Fragen zu deinem Code hast (die alle einfach nur daraus resultieren, dass du selbst nicht testest und deinen Code nicht liest/verstehst), dann poste gefälligst in einen Beitrag und nicht über Dutzende hinweg.

    Du solltest sowie so nochmal das Lehrmaterial das du benutzt von Anfang an durchblättern. Warum gibt deine Main-Funktion denn bitte einen Wert ungleich 0 zurück?

    Und was deine Prüfung angeht, welchen Typ hat denn dein Vergleichsparameter? Schau dir doch mal den Sachverhalt an:

    float a = 0.0f;
    float b = 0.0f;
    
                if(b == 0.025000){
                    b = 0.0f;
                    a = 0.0f;
    

    Der Code funktioniert, wenn du einen Buchstaben setzt.



  • Nett wie Leute die eine Frage haben hier behandelt werden!



  • Na heul doch!



  • Kleiner Tip noch:
    float und double sollte man niemals auf einen exakten Wert vergleichen, sondern eher einen Bereich festlegen, der als gültig definiert ist. Der Grund ist, das es beim Rechnen mit diesen Datentyp durchaus zu Rundungsfehler kommen kann, so dass dann der eigentlich erwartete exakte Wert, gegen den verglichen wird, ev. gar nicht vorkommt und die Bedingung deshalb nicht erfüllt wird.
    😉 😉


Anmelden zum Antworten