0

特定の頻度で 2 つの 2D オブジェクトをフラッシュする必要があります。私はこの OpenGL (glut) と C++ を Visual C++ Express Edition で使用しています。OSはWindows XP SP3、32bitです。

基本的なアプリケーションを正常に実装できたと思いますが、特定の頻度でフラッシュ オブジェクトを作成する方法がわかりません。何か提案はありますか?私がやったコードはこれです。

void display(void) {

glClear( GL_COLOR_BUFFER_BIT);

    glBegin(GL_POLYGON);
    glColor3f(0.0, 0.0, 0.0);
    glVertex3f(140.0, 250.0+300.0, 0.0); //bottom left corner
    glVertex3f(140.0+300.0, 250.0+300.0, 0.0); //bottom right corner
    glVertex3f(140.0+300.0, 250.0, 0.0); //top right corner
    glVertex3f(140.0, 250.0, 0.0);
    glEnd();

    glBegin(GL_POLYGON);
    glColor3f(1.0, 1.0, 1.0);
    glVertex3f(640.0+200.0, 250.0+300.0, 0.0); //bottom left corner
    glVertex3f(640.0+200.0+300.0, 250.0+300.0, 0.0); //bottom right corner
    glVertex3f(640.0+200.0+300.0, 250.0, 0.0); //top right corner
    glVertex3f(640.0+200.0, 250.0, 0.0);
    glEnd();

    glFlush();
}

int main(int argc, char **argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode ( GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);

    glutInitWindowPosition(0,0);
    glutInitWindowSize(1280,800);
    glutGameModeString("1280x800:32@60");
    glutEnterGameMode();
    glutSetWindowTitle("OpenGL SSVEP stimulator");

    glDisable(GL_DEPTH_TEST);

    glClearColor(0.0, 0.0, 0.0, 0.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.0,1280,800,0.0,0.0,1.0);

    glutDisplayFunc(display);

    glutMainLoop();

    return 0;
}

フラッシュするには、次のようなものを考えました(疑似コード):

int leftFrequency=12;
int rightFrequency=20;
int i=0;
while(running) {
    if(i%leftFrequency)
        blackSquare;
    }
    else {
        whiteSquare;
    }
    if(i%rightFrequency)
        blackSquare;
    }
    else {
        whiteSquare;
    }
}

しかし、このコードをどこに置くべきかわかりません。おそらくdisplay()関数で?i 変数はどこでインクリメントできますか? すべてを display() 関数内に入れようとしましたが、2 つの四角形が点滅しません。i 変数は 3 まで増加します。エラーの種類はありません。

ちらつきのロジックが正しくないのでしょうか?

4

2 に答える 2

0

特定の頻度になる場合は、時間に基づいてフリックする必要があります。

于 2013-04-24T12:05:21.520 に答える