我正在玩能够在音乐变化的四轮行(位置)上同步显示两种不同纹理。音乐采用跟踪格式。它由包含行的模式组成。跟踪器的API返回当前播放的行(行)。我只需要在四边形上显示一次第一个纹理,然后在行(位置)改变时仅显示一次第二个纹理。在DrawGLScene()
中,每次迭代都会调用drawNoise()
函数。一行音乐需要0.09秒。 intPosCurrVal
变量对于这些0.09秒具有相同的值。因此,对于相同的drawNoise()
值,函数intPosCurrVal
会被调用多次,持续时间为0.09秒。播放下一行音乐时,intPosCurrVal
变量会递增。我想仅针对drawNoise()
变量的相同值调用intPosCurrVal
一次。换句话说,在一直调用的主绘图函数中,我只想调用函数drawNoise()
作为intPosCurrVal
变量的值增加1。
主要绘图功能:
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
功能:
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 );
}
提前谢谢
答案 0 :(得分:1)
对我来说,有很多可能的解决方案。一个可能是让DrawGLScene
返回posCurrVal
的值。也就是说,它将返回它发送到DrawNoise
的位置,您可以将其保存在某处。然后,当再次调用DrawGLScene
时,将它发送给您之前保存的值(作为需要添加到函数定义的新参数)。现在,您可以将该值与Music_GetPosition()
获得的值进行比较,只有在值发生变化时才调用DrawNoise
。
这只是一种可能的解决方案 - 我相信您可以提出可能更适合您的代码的其他解决方案。