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 画图会很慢了 展开
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 画图会很慢了 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询