C++ Denkfeheler (OpenGL)

Wolfsbein

Erfahrenes Mitglied
Hallo
ich habe hier ein kleines Problem und weiß nicht warum das nicht so will wie ich ;).
Code:
/* Überprüfen ob die Taste G gedrückt wird
ist standardmäßig false */
if(keys['G'] && !fp)			// wird G gedrückt und ist keine andere
			{								// Taste gedrückt?
				fp = true;
				bDrawWire = !bDrawWire;
				if(!keys['G'])
				{
					fp = false;
				}

			}
/* Jetzt kommt der OpenGL Part 
es soll überprüft werden, ob zu meinen Polygonen auch ein Gitternetz gezeichnet werden soll. */
if(bDrawWire == true)
	{
		// Ränder zeichnen
		glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
		glEnable(GL_POLYGON_OFFSET_LINE);
		glPolygonOffset(-1.0f,-1.0f);
	}	
// ....
So wenn ich nun das Prog starte wird ganz einfach meine Textur angezeigt. Wenn ich jetzt G drücke kommt die Wireframe animation. Wenn ich jetzt wieder G drücke sollte wieder die Texturversion kommen. Tut sie aber nicht :(. Warum?
 
Ich bin ja etz net grad der cpp checker, aber ich trau mich mal an die Sache ran:
Code:
if(keys['G'] && !fp)
{					
	bDrawWire = true;
} else {
        bDrawWire = false;
}
 
Axo
Dein Fehler liegt jedenfalls darin, dass du abfragst, ob G gedrückt ist ( if(!keys['G']) ). Das allerdings in einem Block, der nur ausgeführt wird, wenn G gedrückt ist ( if(keys['G'] && !fp) )

Schau mal wie sich das verhindern lässt, ich werd meine grauen Zellen auch mal ein bisschen anstrengen
 
Ja das war das Problem. Ich hab das gelöst und jetzt kann ich das Gitter an und ausschalten. Allerdings sieht es so aus, als ob das umschalten sehr schnell passieren würde, also oft nicht stattfindet, sondern nur kurz flimmert. Ich denke das liegt auch am Code:
Code:
if(keys['G'] && !fp)
{		
	fp = true;
	bDrawWire = !bDrawWire;
}
if(!keys['G'])
{
    fp = false;
}

// hier der Code für OpenGL
if(bDrawWire == true)
{
    // Ränder zeichnen
	glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
	glEnable(GL_POLYGON_OFFSET_LINE);
	glPolygonOffset(-1.0f,-1.0f);
}	
if(bDrawWire == false)
{
    // Hier muss wahrscheinlich noch was hin?
    glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
}
 
Ja das ginge auch. Ich musste es aber trotzdem mit zwei verschiedenen Tasten lösen. Das liegt ganz einfach an der Geschwindigkeit der Schleife.
EDIT: Das haut doch wunderbar hin :D. Bewertung++
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück