【发布时间】:2016-02-18 00:42:25
【问题描述】:
我正在使用带有 opengl 的 glut 库并用它画圈。圆在框架上成功绘制,但我想要在线程中编译这些圆顶点。例如,我放入循环循环,2seconds 之后的每个顶点绘制都完成,而不是在运行时显示帧上的顶点经过了几秒钟。我正在使用sleep() 函数,但无法使用它。
代码:
#include <iostream>
#include <cstdlib>
#include <GL/glut.h>
#include<windows.h>
#include <cmath>
#define M_PI 3.14159265358979323846
using namespace std;
void init(void) {
glClearColor(0.0f,0.0f,0.0f,0.0f);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
}
void keyboard(unsigned char key, int x, int y)
{
switch (key)
{
case '\x1B':
exit(EXIT_SUCCESS);
break;
}
}
void drawCircle(float pointX, float pointY, float Radius, int segment)
{
glBegin(GL_LINE_LOOP);
for (int i = 0; i < segment; i++)
{
float thetha= i * (2.0f * (float)M_PI / segment);
float x = Radius * cos(thetha);
float y = Radius * sin(thetha);
Sleep(2000);
glVertex2f(x + pointX, y + pointY);
}
glEnd();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0f,0.0f,0.0f);
drawCircle(0.0f, 0.0f, 0.80f, 360);
glFlush();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitWindowSize(590, 590);
glutInitWindowPosition(50,50);
glutCreateWindow("Frame");
init();
glutKeyboardFunc(&keyboard);
glutDisplayFunc(&display);
glutMainLoop();
return EXIT_SUCCESS;
}
【问题讨论】:
-
如果我理解正确你想画一个圆圈然后等待 2 秒然后再画一次。如果那是你想要的,那你就睡错了地方。通过在循环段内休眠,您可以在每个顶点之间休眠,但是如果您想在连续绘制圆之间休眠,请将休眠移到 glEnd() 调用之后或您的主显示方法中。