1.绘制直线:(程序大体框架不便,每次修改一个glBegin();glEnd();之间的即可)
#include<gl/glut.h>
#include<math.h>
#define GL_PI 3.1415f
void RenderScene(void)
{
GLfloat x,y,z,angle;//存储坐标和角度
glClear(GL_COLOR_BUFFER_BIT);//用当前颜色清除窗口
//保持矩阵状态并进行旋转
glPushMatrix();
//glRotatef(60.0f,1.0f,0.0f,0.0f);
//glRotatef(60.0f,0.0f,1.0f,0.0f);
//对所有剩余的点只调用一次
glBegin(GL_LINES);
z = 0.0f;
for(angle = 0.0f;angle<=GL_PI;angle+=(GL_PI/20.0f))
{
x = 50.0f*sin(angle);
y = 50.0f*cos(angle);
//指定点并稍稍变化z值
glVertex3f(x,y,z);
x = 50.0f*sin(angle+GL_PI);
y = 50.0f*cos(angle+GL_PI);
glVertex3f(x,y,z);
}
glEnd();
//恢复变换
glPopMatrix();
//刷新绘图命令
glutSwapBuffers();
}
//设置渲染状态
void SetupRC(void)
{
//黑色背景
glClearColor(0.0f,0.0f,0.0f,1.0f);
//把绘图颜色置为绿色
glColor3f(0.0f,1.0f,0.0f);
}
void ChangeSzie(GLsizei w,GLsizei h)
{
GLfloat nRange = 100.0f;
//防止被0所除
if(h==0)
h=1;
//把视口设置为窗口的大小
glViewport(0,0,w,h);
//重置投影矩阵堆栈
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//建立剪裁区域(左,右,底,顶,近,远)
if(w<=h)
glOrtho (-nRange,nRange,-nRange*h/w,nRange*h/w,-nRange,nRange);
else
glOrtho (-nRange*w/h,nRange*w/h,-nRange,nRange,-nRange,nRange);
//重置模型视图矩阵堆栈
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int main(int argc,char * argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(300,400);
glutCreateWindow("LINES");
glutDisplayFunc(RenderScene);
glutReshapeFunc(ChangeSzie);
SetupRC();
glutMainLoop();
return 0;
}

#include<gl/glut.h>
#include<math.h>
#define GL_PI 3.1415f
void RenderScene(void)
{
GLfloat x,y,z,angle;//存储坐标和角度
glClear(GL_COLOR_BUFFER_BIT);//用当前颜色清除窗口
//保持矩阵状态并进行旋转
glPushMatrix();
//glRotatef(60.0f,1.0f,0.0f,0.0f);
//glRotatef(60.0f,0.0f,1.0f,0.0f);
//对所有剩余的点只调用一次
glBegin(GL_LINES);
z = 0.0f;
for(angle = 0.0f;angle<=GL_PI;angle+=(GL_PI/20.0f))
{
x = 50.0f*sin(angle);
y = 50.0f*cos(angle);
//指定点并稍稍变化z值
glVertex3f(x,y,z);
x = 50.0f*sin(angle+GL_PI);
y = 50.0f*cos(angle+GL_PI);
glVertex3f(x,y,z);
}
glEnd();
//恢复变换
glPopMatrix();
//刷新绘图命令
glutSwapBuffers();
}
//设置渲染状态
void SetupRC(void)
{
//黑色背景
glClearColor(0.0f,0.0f,0.0f,1.0f);
//把绘图颜色置为绿色
glColor3f(0.0f,1.0f,0.0f);
}
void ChangeSzie(GLsizei w,GLsizei h)
{
GLfloat nRange = 100.0f;
//防止被0所除
if(h==0)
h=1;
//把视口设置为窗口的大小
glViewport(0,0,w,h);
//重置投影矩阵堆栈
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//建立剪裁区域(左,右,底,顶,近,远)
if(w<=h)
glOrtho (-nRange,nRange,-nRange*h/w,nRange*h/w,-nRange,nRange);
else
glOrtho (-nRange*w/h,nRange*w/h,-nRange,nRange,-nRange,nRange);
//重置模型视图矩阵堆栈
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int main(int argc,char * argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(300,400);
glutCreateWindow("LINES");
glutDisplayFunc(RenderScene);
glutReshapeFunc(ChangeSzie);
SetupRC();
glutMainLoop();
return 0;
}
