VC++和opengl画图的一点问题

采用opengl画图想达到动态效果就是线条一段一段的增加for(inti=0;;i<100;i++){glPushMatrix();//入栈glTranslated(m_... 采用opengl画图 想达到动态效果就是线条一段一段的增加
for(int i=0;;i<100;i++)
{
glPushMatrix(); //入栈
glTranslated(m_xSize,m_ySize,-10); //平移变换(将坐标系统移动到此点)
glRotated(m_xRotate, 1.0, 0.0, 0.0);//绕X轴可旋转
glRotated(m_yRotate, 0.0, 1.0, 0.0);//绕Y轴可旋转
glRotated(m_zRotate,0.0, 0.0, 1.0);
glScalef(m_ScaleX,m_ScaleY,m_ScaleZ);//模型变换(指定各轴比例刻度)
glColor3ub(255,255,0);
glBegin(GL_LINES);
glVertex3d(point[i].x,point[i].y,point[i].z);
glVertex3d(point[i+1].x,point[i+1].y,point[i+1].z);
glEnd();
glPopMatrix();
glFlush();
SwapBuffers(wglGetCurrentDC());
}
采用此方法画图时 图形不停的闪烁
我调试时候发现每次调用SwapBuffers图形就会闪烁一次 显示此次以及隔次画的线条 好像是两个虚线图形互相排斥一样 而且最终显示的是虚线 不是相连的线条 但是如果不调用SwapBuffers图形又不能显示 ,该怎么办呢 ?
用的MFC
原来是这样子做的 但是只能一次性的把所有的点都画出来
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslated(m_xSize,m_ySize,-10);
glRotated(m_xRotate, 1.0, 0.0, 0.0);
glRotated(m_yRotate, 0.0, 1.0, 0.0);
glRotated(m_zRotate,0.0, 0.0, 1.0);
glScalef(m_ScaleX,m_ScaleY,m_ScaleZ);
glLineWidth(1.5);
glBegin(GL_LINE_STRIP);
for (;;)
{
取点函数 每调用一次返回一个或者两个点的坐标
}
glEnd();
glPopMatrix();//出栈
glFlush();//强制刷新
SwapBuffers(wglGetCurrentDC());
现在我把画图函数加到for循环里面但是只能看见一小段线条在屏幕上移动 就是本次循环的两个点的坐标,想达到就像铅笔在画图一样的效果,图形是在不断增加的 有人说要把前面的点全部记录下来 每次画图的时候把前面的点和本次的点全都画出来,这样是可以 但是太慢了 因为我的点是从文件中一条一条去出来的 文件大的有2G 画图会很慢了
展开
 我来答
dragon__y
2009-08-31 · TA获得超过435个赞
知道小有建树答主
回答量:547
采纳率:50%
帮助的人:285万
展开全部
你先看看你用的是不是用双缓冲模式(GLUT_DOUBLE),你可以定在for循环里一个定时器Sleep(100),0.1秒钟刷新一次,这样可以一段一段显示。建议int i 用static ,要不每次移动窗口时候都会再循环100次,画那线了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式