C++ 中OpenGL 画线的实现

来源:百度知道 编辑:UC知道 时间:2024/06/16 00:37:18
在超级宝典中有这样的代码:

#include<windows.h>
#include<gl/glut.h>
#include<math.h>

const float GL_PI=3.1415f;

void RenderScene(void)
{
GLfloat x=0,y=0,z=0,angle,xRot=0,yRot=0;

glClear(GL_COLOR_BUFFER_BIT);

glPushMatrix();

glRotatef(xRot,1.0f,0.0f,0.0f);
glRotatef(yRot,0.0f,1.0f,0.0f);

glBegin(GL_POINTS);

z = -50.0f;

for(angle = 0.0f; angle <= (2.0f*GL_PI)*3.0f; angle+=0.1f)
{
x = 50.0f*sin(angle);
y = 50.0f*cos(angle);

glVertex3f(x,y,z);
z += 0.5f;
}

glEnd();

glPopMatrix();

glFlush();

}

void main()
{

glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutCreateWindow("Bounce");

glutDisplayFunc(RenderScene);

glutMainLoop();

}

可是运行的时候怎么总是不对

问题应该就在lz贴出的这段代码中
lz设的是双缓存glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB)
用的却是glFlush,当然会出不来
在双缓存模式下应该用glutSwapBuffers
在单缓存模式下用glFlush
相互配套应该就能出来了

这是画一个空间螺旋线的程序,
螺旋线的方程可以参考高等数学后面的空间曲线一章.

你的glBegin()中是GL_POINTS,不对,
应为GL_LINES
试试呢?

从lz的图片观察来看,,,
问题貌似出在窗口客户区[Window Client Area]初始化的问题,,
貌似问题不是出在lz现在贴出来的这段代码里面,,,

glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB)
改成:
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB)