特定の頻度で 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 まで増加します。エラーの種類はありません。
ちらつきのロジックが正しくないのでしょうか?