OpenGL基本图元绘制_第1页
OpenGL基本图元绘制_第2页
OpenGL基本图元绘制_第3页
OpenGL基本图元绘制_第4页
OpenGL基本图元绘制_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验3、OpenGLS本图元绘制系别:计算机学院专业班级: 10 信科 2 班姓名:实验日期: 2013-5-10学号:实验报告日期: 2013-5-10实验目的1 熟悉 VC6.0 开发平台;2熟悉OpenGL开发库;实验内容:在同一个窗口内绘制以下图元:?用不同颜色绘制大小从1 到 5 的 5 个点;?用不同颜色绘制宽度为1、 3、 5 的三条直线段;? 绘制一条包含 5 个顶点的折线段;? 绘制一个三角形,三个顶点颜色各不相同,三角形内部用平滑方式进行填充;? 绘制一个六边形;,不使用反混淆绘制宽度为 5 的直线;启用反混淆后在不同位置绘制相同的直线,比较两者异同。一个 OpenGL例1

2、.程序中有关画图的代码: void DrawGLScene(GLvoid) / 此函数完成图形绘制glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT/)/; 清除颜 色缓冲区和深度缓冲区glLoadIdentity(); / 重置当前模型视图矩阵glTranslatef(-1.5f,0.0f,0.0f);/ 向左平移 50 个单位glBegin(GL_TRIANGLES); / 绘制三角形glColor3f(1.0f,0.0f,0.0f);glVertex3f( 0.0f, 1.0f, 0.0f);glColor3f(0.0f,1.0f,0.0f

3、);glVertex3f(-1.0f,-1.0f, 0.0f);glColor3f(0.0f,0.0f,1.0f);glVertex3f( 1.0f,-1.0f, 0.0f); glEnd();绘制glTranslatef(3.0f,0.0f,0.0f);个单位glColor3f(0.0f,1.0f,1.0f);glBegin(GL_QUADS);glVertex3f(-1.0f, 1.0f, 0.0f);glVertex3f( 1.0f, 1.0f, 0.0f);glVertex3f( 1.0f,-1.0f, 0.0f);glVertex3f(-1.0f,-1.0f, 0.0f); glEn

4、d();/ 画笔设置为红色/ 设置为绿色/ 设置为蓝色/ 完 成 三 角 形 的/ 向右平移 3/ 设为青色/ 画四边形/ 完成四边形绘制glFlush();实验报告内容程序源码;对主要画图函数的说明(函数的功能,参数等) 。/ 图形 .cpp : Defines the entry point for the console application. /#include #include #include #include #define MAX 10A6;/ 如果需要记录鼠标点的位置,就定义全局变量来保存struct Point int x, y;Point pt2;int pointNu

5、m=0;/ 标记点号, 0 表示线段起点, 1 表示线段中点void MyDrawGLScene() / 此函数完成图形绘制int i;float pSizes5=1.0f,2.0f,3.0f,4.0f,5.0f; /设定五个点的大小float lWidth5=1.0f,2.0f,3.0f,4.0f,5.0f; /设定五条直线的宽度glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); / 清除颜色缓冲区和 深度缓冲区glLoadIdentity();/ 重置当前模型视图矩阵glTranslatef(-1.8f,-0.1f,0.0f);/ 向左平

6、移 50 个单位/ 绘制五个大小不同的的点glEnable(GL_POINT_SMOOTH); / 开启反混淆for( i=0;i5;i+)/ 绘制五个大小不同的的点glPointSize(pSizesi);glTranslatef(0.1f,-0.0f,0.0f);/ 向右平移50 个单位glBegin(GL_POINTS);glColor3f(1.0f,0.0f,0.0f);/ 画笔设置为红色glVertex2f(1.0f,1.0f);glEnd();/ 绘制五条不同宽度的直线glTranslatef(-0.5f,-0.1f,0.0f);/ 向左平移 50 个单位for(i=0;i5;i+

7、) /绘制五条不同宽度的直线glTranslatef(0.0f,-0.1f,0.0f); glLineWidth(lWidthi); / glBegin(GL_LINES);glColor3f(0.0f,1.0f,0.0f);glVertex2f(1.0f,1.0f);glVertex2f(2.0f,1.0f);glEnd();/ 画五个定点的折线glTranslatef(0.0f,-0.2f,0.0f);glColor3f(0.0f,0.0f,1.0f);glLineWidth(3.0f); /glBegin(GL_LINE_STRIP);glVertex2f(1.0f,1.0f);glVe

8、rtex2f(1.2f,1.1f);glVertex2f(1.4f,1.0f);glVertex2f(1.6f,1.1f);glVertex2f(1.8f,1.0f);glEnd();设定直线的宽度/ 画笔设置为绿色/ 向左平移 50 个单位/ 画笔设置为蓝色设定直线的宽度/画五个定点的折线/ 绘制三角形glTranslatef(1.5f,0.7f,0.0f);/ 向左平移 50 个单位glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); / 选择三角形的光栅化模式为多边形内部被填充,选用参数GL_FILLglEnable(GL_POLYGON_STIPPLE);

9、 / 平滑填充三角形glBegin(GL_TRIANGLES);glColor3f(1.0f,0.0f,0.0f);glVertex3f( 0.0f, 0.15f, 0.0f);glColor3f(0.0f,0.5f,0.0f);glVertex3f(-0.15f,-0.15f, 0.0f);glColor3f(0.0f,0.0f,1.0f);glVertex3f(0.15f,-0.15f, 0.0f);/ 画笔设置为红色/ 设置为绿色/ 设置为蓝色度为glEnd();/ 完成三角形的绘制/ 画正六形glTranslatef(0.5f,0.0f,0.0f);glColor3f(0.0f,1.0

10、f,1.0f);glBegin(GL_POLYGON);glVertex3f(-0.2f, 0.0f, 0.0f);glVertex3f(-0.1f, 0.1732f, 0.0f);glVertex3f( 0.1f,0.1732f, 0.0f);glVertex3f(0.2f,0.0f, 0.0f);glVertex3f(0.1f,-0.1732f, 0.0f);glVertex3f(-0.1f,-0.1732f, 0.0f);glEnd();/ 使用反混淆绘制宽度为 5 的直线 glTranslatef(-0.4f,-0.3f,0.0f);glLineWidth(5.0f);glColor3

11、f(0.3f,0.5f,0.9f);glEnable(GL_LINE_SMOOTH); glBegin(GL_LINES);5 的直线glVertex3f(-0.5f, -0.1f, 0.0f);glVertex3f(0.5f, 0.1f, 0.0f);glEnd();/ 不适用反混淆方式绘制宽度为glDisable(GL_LINE_SMOOTH); glBegin(GL_LINES);绘制宽度为 5 的直线glVertex3f(-0.1f, -0.1f, 0.0f);glVertex3f(0.9f, 0.1f, 0.0f);glEnd();5/ 画笔设置为紫色/的直线关闭反混淆/glFlus

12、h();向右平移 0.5 个单设为青色完成正六边形形绘向下平移 0.3 个单设定直线的宽度为使用反混淆绘制宽不适用反混淆方式void myDisplay()glClear(GL_COLOR_BUFFER_BIT);/ 画图之前先设置画图区的背景色glColor3f (1.0f, 0.0f, 0.0f);/设置前景色(相当于画笔颜色)LARGE_INTEGER Freq;LARGE_INTEGER start;LARGE_INTEGER end;QueryPerformanceFrequency(&Freq); / 获取时钟周期if(pointNum = 2)QueryPerformanceCo

13、unter(&start); / 获取时钟计数MyDrawGLScene();QueryPerformanceCounter(&end);printf(用时%d微秒n,(end.QuadPart-start.QuadPart)*1000000/Freq.QuadPart); glFlush();/ 强制刷新缓冲,保证绘图命令被立即执行void Init()glClearColor(0.0, 0.0, 0.0, 0.0);glShadeModel(GL_SMOOTH);/ 设置平滑颜色过渡模式 (相当于在两种颜色间进行差值,想象一下线段的两个端点颜色不一样,线段中间该是什么颜色)printf(

14、这是一个演示程序!n);/ 在窗口中给出提示void Reshape(int w, int h) glViewport(0, 0, (GLsizei) w, (GLsizei) h);/设置视口大小与窗口大小完全glMatrixMode(GL_PROJECTION);/ 指定当前矩阵为投影矩阵glLoadIdentity();/ 将投影矩阵初始化为单位矩阵gluOrtho2D(0.0, (GLdouble) w, 0.0, (GLdouble) h);/定义二维投影矩阵/ 自定义的键盘消息处理函数,需要在main 函数中调用对应的回调函数才能起作用void keyboard(unsigned

15、char key, int x, int y) switch (key) case c:break;case r:break;case x:exit(0);break;default:break;void mouse(int button, int state, int x, int y) / 鼠标处理回调函数if (button = GLUT_LEFT_BUTTON & state = GLUT_DOWN) / 如果鼠标左键按 下if(pointNum = 2) pointNum=0; / 重新记录线段的端点ptpointNum.x=x;/ 保存线段端点的横坐标ptpointNum.y=600-y;/ 保存线段端点的纵坐标 由于屏幕坐标的纵轴向下,而画图时坐标向上,因此需要取反pointNum+;glutPostRedisplay();void main(int argc, char *argv)glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);glutInitWindowPosition(100, 100);gl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论