2017-10-15 161 views
-1

我正在玩同步显示两个不同纹理在音乐变化的四分之一行(位置)上的能力。音乐采用跟踪器格式。它由包含行的模式组成。跟踪器的API返回当前正在播放的行(行)。我需要在四边形上仅显示一次第一个纹理,而在行(位置)变化时仅接下来一次显示第二个纹理。在DrawGLScene()中,drawNoise()函数始终在每次迭代中调用。一行音乐需要0.09秒。 intPosCurrVal变量在这0.09秒内具有相同的值。因此,功能drawNoise()对于相同的intPosCurrVal值被调用很多次,时间间隔为0.09秒。下一行音乐播放时,intPosCurrVal变量会递增。我想仅为intPosCurrVal变量的相同值调用drawNoise()一次。换言之,在主绘图功能,这就是所谓的所有时间,我想仅一次函数作为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); 
} 

预先感谢您

+3

保存'posCurrVal',当保存的值不同于'posCurrVal'时,只调用'drawNoise'。 –

回答

1

在我看来,有很多可能的解决方案。有人可能会让DrawGLScene返回posCurrVal的值。也就是说,它会返回它发送给DrawNoise的位置,并且可以将它保存在某个地方。然后,当再次调用DrawGLScene时,您将它发送给您先前保存的值(作为需要添加到函数定义中的新参数)。现在,您可以将该值与从Music_GetPosition()获得的值进行比较,如果值已更改,则只能调用DrawNoise

这只是一个可能的解决方案 - 我相信你可以想出更适合你的代码的其他人。

+0

当然这将是一个可能的解决方案。但由于它是C++,应该首选一个带'class'和成员来存储'posCurrVal'的解决方案。 – Rabbid76