利用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()之间是折线的顶点,由这些顶点以此相连成折线,不会自动闭合
按时间顺序来讲,这是计算机图形学课程的第一个编程实践,大概是在一年前吧。这个程序是在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()之间是折线的顶点,由这些顶点以此相连成折线,不会自动闭合
相关文章推荐
- VS2010-MFC:用OpenGL在对话框中的PictureControl(图片控件)中绘制三维模型,可旋转、平移、缩放,可用于三维模型的预览
- Python 利用matplotlib绘制热力图 correlation heatmap X,Y 坐标轴字体重叠显示问题,将字体进行旋转
- OpenGL三维球体体数据生成与绘制
- OpenGL三维球体体数据生成与绘制
- VC2005下利用OpenGL实现三维绘图
- 使用OpenGL实现三维坐标的鼠标拣选
- 滚动窗口绘制 鼠标点击坐标与绘制坐标 设备坐标和逻辑坐标
- 使用OpenGL实现三维坐标的鼠标拣选
- Qt环境下利用OpenGL显示三维模型
- 摄像机标定用于机械臂抓举等(利用标定将图像上的点映射为三维坐标)
- openGL三维网格坐标,旋转,缩放,灯光设置,纹理读取,模型读取(MFC单文档)
- Qt环境下利用OpenGL显示三维模型
- 使用OpenGL绘制三维场景
- OpenGL中基本三维物体的绘制
- NeHe的OpenGL教程1(Bang翻译Delphi版)-如何绘制OpenGL窗口
- 小白学opengl之三维物体绘制
- OpenGL中三维坐标的处理类 可以直接复制到工程里
- VS2010下如何利用TeeChart绘制三维图
- OpenGL -- 三维到二维,坐标系统
- 利用OpenGL固定流水线绘制球体