2017-10-15 20 views
-1

音楽の4拍目(位置)に2つの異なるテクスチャの表示を同期させる機能を使って演奏しています。音楽はトラッカー形式です。行を含むパターンで構成されています。トラッカーのAPIは、現在再生中の行(行)を返します。行(位置)が変化したときに最初のテクスチャを1回だけクワッドに表示し、次に1回だけ第2テクスチャを表示する必要があります。 DrawGLScene()では、各繰り返しで常にdrawNoise()関数が呼び出されます。 1行の音楽には0.09秒かかります。 intPosCurrVal変数は、これらの0.09秒で同じ値を持ちます。したがって、intPosCurrValの同じ値の場合、関数drawNoise()が0.09秒の間何度も呼び出されます。 intPosCurrVal変数は、次の音楽行が再生されるときに増加します。変数intPosCurrValの同じ値に対してdrawNoise()を1回だけ呼び出すことを希望します。言い換えれば、すべての時間と呼ばれている主な描画機能、で、私はintPosCurrVal変数の値が大きくなるなどの機能drawNoise()一度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

でいただきありがとうございます私には思えますこれには多くの解決策があります。 1つはDrawGLSceneposCurrValの値を戻すことです。つまり、それはDrawNoiseに送信された位置を返し、どこかに保存することができます。その後、DrawGLSceneに再度呼び出す時間が来たときは、以前に保存した値を関数定義に追加する必要がある新しい引数として送信します。今度はその値をMusic_GetPosition()から得られる値と比較し、値が変更された場合はDrawNoiseとだけ呼び出すことができます。

これは単なる1つの解決策です。あなたのコードに適したものを考え出すことができます。

+0

もちろんこれは可能な解決策です。しかし、それはC++であるため、 'class'を持つ解決策と' posCurrVal'を格納するメンバが望ましいはずです。 – Rabbid76

関連する問題