我需要以一定的频率闪烁两个 2d 对象。我在 Visual C++ Express Edition 中使用这个 OpenGL (glut) 和 C++。操作系统是 Windows XP Sp3,32 位。
我想我已经成功地实现了基本应用程序,但是我无法弄清楚如何以一定的频率制作 flash 对象。你对我有什么建议吗?我做的代码是这样的。
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() 函数中,但是两个方块不闪烁。i 变量增加到 3。我没有错误类型。
也许它不正确闪烁的逻辑?