实验3-OpenGL基本图元绘制.doc_第1页
实验3-OpenGL基本图元绘制.doc_第2页
实验3-OpenGL基本图元绘制.doc_第3页
实验3-OpenGL基本图元绘制.doc_第4页
实验3-OpenGL基本图元绘制.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

实验3 OpenGL基本图元绘制 7 /7实验3、OpenGL基本图元绘制系别:计算机学院 专业班级:10信科2班姓名: 学号:实验日期:2013-5-10 实验报告日期:2013-5-10一、 实验目的1熟悉VC6.0开发平台;2熟悉OpenGL开发库;二、 实验内容:1. 在同一个窗口内绘制以下图元: 用不同颜色绘制大小从1到5的5个点; 用不同颜色绘制宽度为1、3、5的三条直线段; 绘制一条包含5个顶点的折线段; 绘制一个三角形,三个顶点颜色各不相同,三角形内部用平滑方式进行填充; 绘制一个六边形;2. ,不使用反混淆绘制宽度为5的直线;启用反混淆后在不同位置绘制相同的直线,比较两者异同。 三、 一个OpenGL实例1.程序中有关画图的代码: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);/ 设置为绿色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);/ 向右平移3个单位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);/glEnd();/完成四边形绘制glFlush();四、 实验报告内容1程序源码;2对主要画图函数的说明(函数的功能,参数等)。/ 图形.cpp : Defines the entry point for the console application./#include #include #include #include #define MAX 106;/如果需要记录鼠标点的位置,就定义全局变量来保存struct Point int x, y;Point pt2;int pointNum=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);/ 向左平移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+) /绘制五条不同宽度的直线 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);/ 向左平移50个单位glColor3f(0.0f,0.0f,1.0f);/画笔设置为蓝色 glLineWidth(3.0f); /设定直线的宽度glBegin(GL_LINE_STRIP); /画五个定点的折线 glVertex2f(1.0f,1.0f); glVertex2f(1.2f,1.1f);glVertex2f(1.4f,1.0f);glVertex2f(1.6f,1.1f);glVertex2f(1.8f,1.0f);glEnd(); / 绘制三角形glTranslatef(1.5f,0.7f,0.0f);/ 向左平移50个单位glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); /选择三角形的光栅化模式为多边形内部被填充,选用参数GL_FILLglEnable(GL_POLYGON_STIPPLE); /平滑填充三角形 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);/ 向右平移0.5个单位glColor3f(0.0f,1.0f,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);/ 向下平移0.3个单位glLineWidth(5.0f); /设定直线的宽度为5glColor3f(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(); /不适用反混淆方式绘制宽度为5的直线glDisable(GL_LINE_SMOOTH); /关闭反混淆glBegin(GL_LINES); /不适用反混淆方式绘制宽度为5的直线 glVertex3f(-0.1f, -0.1f, 0.0f);glVertex3f(0.9f, 0.1f, 0.0f);glEnd();glFlush();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) QueryPerformanceCounter(&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(这是一个演示程序!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 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);gl

温馨提示

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

评论

0/150

提交评论