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.