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

/*今天刚开通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)