您的位置:首页 > 运维架构

利用OpenGL在窗口上绘制出三维坐标

2015-03-11 13:43 721 查看
/*今天刚开通CSDN博客,以此记录我的编程学习之旅*/

按时间顺序来讲,这是计算机图形学课程的第一个编程实践,大概是在一年前吧。这个程序是在nehe OpenGL框架下完成的,现在回头来看,这是一个很基础、很简单的小程序,但可以说是我编写(改编)的第一个图形窗口程序。

下面是程序绘制三维坐标的主体代码:

int DrawGLScene(GLvoid) // 这个自定义函数用于完成窗口场景绘制

{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// 清屏及深度缓存
glLoadIdentity();
// 重置模型观察矩阵
glTranslatef(-1.0f,-1.0f,-6.0f);
//平移绘制起点(向左平移1个单位,向下平移1个单位,朝垂直屏幕向内平移6个单位)
glColor3f(1.0f,0.0f,0.0f);
// 设置画笔颜色(RGB:此处为红色)

// 绘制x、y、z轴线段
glBegin(GL_LINES);

glVertex3f( 0.0f, 0.0f, 0.0f );
//绘制线段的起点,这里为相对坐标,即相将glTranslatef移动后的点作为原点
glVertex3f( 3.0f,0.0f, 0.0f  );
//确定第一条线段的终点(3,0,0)
glVertex3f( 0.0f,0.0f, 0.0f );
//确定第二条线段的起点(0,0,0)
glVertex3f( 0.0f,3.0f, 0.0f ); 
//确定第二条线段的终点(0,3,0)
glVertex3f( 0.0f,0.0f, 0.0f );
glVertex3f( 0.0f,0.0f, 3.0f );                   
glEnd();

//平移起点并重新设置画笔颜色用于区分绘制的物体
glTranslatef(-1.0f,-1.0f,-6.0f);
        glColor3f(0.5f,0.5f,1.0f);

//绘制一个矩形

glBegin(GL_QUADS);

glVertex3f(0.0f, 0.0f, 0.0f);
// Top Left
glVertex3f(0.0f, 3.0f, 0.0f);
// Top Right
glVertex3f(0.0f,3.0f, 3.0f);
// Bottom Right
glVertex3f(0.0f,0.0f, 3.0f);
// Bottom Left
glEnd();

//更改画笔颜色,并绘制另外一个矩形

   glColor3f(0.0f,0.0f,1.0f);
// Set The Color To Blue One Time Only
glBegin(GL_QUADS);
// Draw A Quad
glVertex3f(0.0f, 0.0f, 0.0f);
// Top Left
glVertex3f(3.0f, 0.0f, 0.0f);
// Top Right
glVertex3f(3.0f,0.0f, 3.0f);
// Bottom Right
glVertex3f(0.0f,0.0f, 3.0f);
// Bottom Left
glEnd();

//在窗口上显示“X”表示X轴
glTranslatef(4.0f,0.0f,0.0f);
glColor3f(0.0f,1.0f,0.0f);
glBegin(GL_LINES);

glVertex3f( 0.0f, 0.0f, 0.0f);

glVertex3f(1.0f,-1.0f, 0.0f);

glVertex3f( 1.0f,0.0f, 0.0f);
glVertex3f( 0.0f,-1.0f, 0.0f); 
glEnd(); 

//在窗口上显示“Y”表示Y轴
glTranslatef(-5.0f,4.0f,0.0f);
glColor3f(0.0f,0.5f,0.5f);
glBegin(GL_LINES);

glVertex3f( 0.0f, 0.0f, 0.0f);

glVertex3f(0.0f,-1.0f, 0.0f);
glVertex3f( 0.0f, 0.0f, 0.0f);
glVertex3f( -0.5f,0.5f, 0.0f);
glVertex3f( 0.0f, 0.0f, 0.0f);
glVertex3f( 0.5f,0.5f, 0.0f); 
glEnd(); 

//在窗口上显示“Z”表示Z轴
glTranslatef(0.0f,-4.0f,4.0f);
glColor3f(0.5f,0.0f,0.5f);
glBegin(GL_LINES);

glVertex3f( 0.0f, 0.0f, 0.0f);

glVertex3f(0.5f,0.0f, 0.0f);
        glVertex3f(0.5f,0.0f, 0.0f);               
glVertex3f( 0.0f,-0.5f, 0.0f);
glVertex3f( 0.0f,-0.5f, 0.0f);
glVertex3f( 0.5f,-0.5f, 0.0f); 
glEnd();                                       
return TRUE;

}

附上运行效果截图:

借此,在这里总结一下OpenGL生成点、线的函数实现吧:

(1)用OpenGL生成点(点的绘制)

glPointSize(2.0f);
//设置点的大小,这里设置为两个像素

glBegin(GL_POINTS);

glVertex2f(0.0,3.0);
//绘制二维点

glVertex3f(0.0f,0.0f,0,3f);
//绘制三维点

glEnd();

(2)绘制直线

glLineWidth(2.0f);
//设置直线的宽度为2个像素

glBegin(GL_LINES);

glVertex2f(0.0f,3.0f);
//第一条直线的起点

glVertex2f(0.0f,0.0f);
//第一条直线的终点

glEnd();

//可以利用glEnable(GL_LINE_STIPPLE);  glLineStipple(1,0x00FF);……glDisable(GL_LINE_STIPPLE);绘制自定义线形(此处为点划线)

(3)绘制折线

glBegin(GL_LINE_STRIP);

glVertex2f(-0.9f,1.0f);

glVertex2f(0.0f,0.0f);

glVertex2f(0.9f,0.5f);

glEnd();

//在glBegin()和glEnd()之间是折线的顶点,由这些顶点以此相连成折线,不会自动闭合
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  三维 图形 opengl