Ich spiele mit der Fähigkeit, die Anzeige von zwei verschiedenen Texturen auf einem Quad-Whed-Reihe (Position) der Musik zu synchronisieren. Die Musik ist im Tracker-Format. Es besteht aus Mustern, die Zeilen enthalten. Die API des Trackers gibt die aktuell spielende Zeile zurück. Ich muss nur einmal die erste Textur auf dem Quad und dann erst einmal die zweite Textur anzeigen, wenn sich die Position ändert. In DrawGLScene()
wird die drawNoise()
-Funktion immer in jeder Iteration aufgerufen. Eine Zeile Musik dauert 0,09 Sekunden. Die Variable intPosCurrVal
hat für diese 0,09 Sekunden denselben Wert. Daher wird die Funktion oft für einen Zeitraum von 0,09 Sekunden für denselben Wert von intPosCurrVal
aufgerufen. Die Variable intPosCurrVal
wird erhöht, wenn die nächste Musikzeile abgespielt wird. Ich möchte nur einmal für den gleichen Wert der intPosCurrVal
Variable aufrufen. Mit anderen Worten, in der Hauptzeichenfunktion, die die ganze Zeit genannt wird, würde Ich mag nur einmal die Funktion drawNoise()
als der Wert der intPosCurrVal
Variable erhöht rufen von 1.Ausführung der Funktion nur einmal
Hauptzeichenfunktion:
int DrawGLScene(GLvoid)
{
int posCurrVal = Music_GetPosition();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
drawNoise(intPosCurrVal);
// some other code
glFlush();
return TRUE;
}
drawNoise
Funktion:
void drawNoise(int x)
{
glEnable(GL_TEXTURE_2D);
glEnable(GL_DEPTH_TEST);
if(x > prev)
{
glBindTexture(GL_TEXTURE_2D, texPosNoise);
prev = x;
}
else
{
glBindTexture(GL_TEXTURE_2D, texNegNoise);
}
glBegin(GL_QUADS);
glColor3f(1.0f, 1.0f, 1.0f);
glTexCoord2f(0.0, 0.0); glVertex3f(- 15.0, - 15.0, 0.0);
glTexCoord2f(0.0, 1.0); glVertex3f(- 15.0, 15.0, 0.0);
glTexCoord2f(1.0, 1.0); glVertex3f(15.0, 15.0, 0.0);
glTexCoord2f(1.0, 0.0); glVertex3f(15.0, - 15.0, 0.0);
glEnd();
glDisable(GL_TEXTURE_2D);
glDisable(GL_DEPTH_TEST);
}
Danke im Voraus
Speichern Sie 'posCurrVal', rufen Sie' drawNoise' nur dann auf, wenn der gespeicherte Wert von 'posCurrVal' abweicht. –