实验一 OPENGL中的二维编程.doc_第1页
实验一 OPENGL中的二维编程.doc_第2页
实验一 OPENGL中的二维编程.doc_第3页
实验一 OPENGL中的二维编程.doc_第4页
实验一 OPENGL中的二维编程.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

实验一 OPENGL中的二维编程姓名 叶传军 学号 E11414103 得分 一.实验题目1练习基本的openGL编程方法。(1)配置openGL,能在VC下通过编译。(2)阅读并运行simple.c,熟悉最简单的openGL程序结构。(3)阅读并运行改进的simple2.c,掌握openGL程序的通用结构。给simple2.c中的函数加注释。可尝试做如下修改:(a)改变窗口的位置,尺寸,标题;(b)改变窗口背景色和矩形颜色;(c)改变矩形的尺寸和其在窗口中的位置,还可以只显示矩形的一部分(通过设置正投影参数和矩形四个顶点的坐标来完成);2发挥想象,编程实现在窗口中绘制若干图形及设置它们的属性,并回答问题:(1)绘制若干个点,分别设置每个点的颜色和大小。思考题1:glPointSize()可以放在glBegin()和glEnd()函数对之间吗?(2)绘制若干条直线段。设置线段的颜色,线型和线宽。思考题1:以下命令会显示什么样的线段?glEnable(GL_LINE_STIPPLE);glColor3f(0.0, 1.0, 0.0);glLineWidth(2.0);glLineStipple(3, 0xcccc);glDisable(GL_LINE_STIPPLE);思考题2:以下命令会显示什么样的线段?glShadeModel(GL_SMOOTH);glBegin(GL_LINES);glColor3f(1.0, 0.0, 0.0); glVertex2f(0.0, 0.5); glColor3f(0.0, 0.0, 1.0);glVertex2f(0.5, -0.5);glEnd();将glShadeModel(GL_SMOOTH)改为glShadeModel(GL_FLAT),其余命令不变,结果又会如何?(3)绘制若干个多边形。设置多边形的颜色,显示模式,隐藏某些边。思考题1:以下命令会显示什么样的多边形?glShadeModel(GL_SMOOTH);glBegin(GL_POLYGON);glColor3f(1.0, 0.0, 0.0); glVertex2f(-0.5, -0.5);glColor3f(0.0, 1.0, 0.0); glVertex2f(-0.5, 0.5);glColor3f(0.0, 0.0, 1.0); glVertex2f(0.5, 0.5); glColor3f(1.0, 1.0, 0.0); glVertex2f(0.5, -0.5);glEnd();将glShadeModel(GL_SMOOTH)改为glShadeModel(GL_FLAT),其余命令不变,结果又会如何?将glBegin(GL_POLYGON)改为glBegin(GL_QUADS),分别尝试在SMOOTH和FLAT模式下的结果。思考题2:以下程序段分别会显示什么样的多边形?(a)glPolygonMode( GL_FRONT_AND_BACK, GL_FILL);glColor3f(1.0, 0.0, 0.0);glBegin(GL_POLYGON); glVertex2f(-0.5, -0.5); glVertex2f(-0.5, 0.5); glVertex2f(0.5, 0.5); glVertex2f(0.5, -0.5);glEnd();(b)glPolygonMode( GL_FRONT_AND_BACK, GL_LINE);glColor3f(1.0, 1.0, 0.0);glBegin(GL_POLYGON); glVertex2f(-0.5, -0.5); glVertex2f(-0.5, 0.5); glVertex2f(0.5, 0.5); glVertex2f(0.5, -0.5);glEnd();(c)glPolygonMode( GL_FRONT_AND_BACK, GL_POINT);glColor3f(1.0, 1.0, 0.0);glBegin(GL_POLYGON); glVertex2f(-0.5, -0.5); glVertex2f(-0.5, 0.5); glVertex2f(0.5, 0.5); glVertex2f(0.5, -0.5);glEnd();思考题3:下面多边形的哪些边不可见?glPolygonMode( GL_FRONT_AND_BACK, GL_LINE);glColor3f(1.0, 1.0, 0.0);glBegin(GL_POLYGON); glVertex2f(-0.5, -0.5);glEdgeFlag(GL_FALSE); glVertex2f(-0.5, 0.5);glEdgeFlag(GL_TRUE); glVertex2f(0.5, 0.5); glVertex2f(0.5, -0.5);glEnd();4.公司某年度各月产量分别为:320,475,436,754,585,619,788,500,860,1000,800,930。试绘制一年内产量按月的折线图,柱状图和饼图(可用三角法画圆)。二.设计思想程序共有三个函数:主函数,初始化函数,窗口回调函数。主函数完成对窗口的建立。初始化函数设置窗口的参数。窗口回调函数执行具体的绘图操作。三.程序清单实验1#include void display(void) glClear(GL_COLOR_BUFFER_BIT); / 清空缓冲区 glBegin(GL_POLYGON); / 绘制图形 glVertex2f(-1.5, -1.5); glVertex2f(-1.5, 1.5); glVertex2f(1.5, 1.5); glVertex2f(1.5, -1.5);glEnd();glFlush(); / 强制执行OpenGL命令void init()glClearColor (1.0, 1.0, 1.0, 1.0); /设置窗口背景颜色 glColor3f(0.0, 0.0, 1.0); /设置当前的绘图颜色glMatrixMode (GL_PROJECTION); /设置矩阵类型是投影矩阵glLoadIdentity ();/单位矩阵glOrtho(-2.5, 1.0, -2.5, 2.5, -1.0, 2.5); /定义正交投影视景体(裁剪窗口)int main(int argc, char* argv) glutInit(&argc,argv); /初始化GLUTglutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); /设置窗口的显示属性(单缓冲,RGB颜色)glutInitWindowSize(600,600); / 设置窗口的初始宽度和高度,单位为像素,缺省600x600glutInitWindowPosition(0.5,0.5); / 窗口左上角相对于屏幕左上角的位置,单位为像素,缺省(0.5,0.5)glutCreateWindow(E11414103叶传军); /创建窗口glutDisplayFunc(display); /注册显示回调函数:窗口需要重绘时调用displayinit(); /设置OpenGL状态glutMainLoop();/事件处理循环:main函数最后一条语句实验2(1)#include /引入OPENGL核心库文件void display(void)glClear(GL_COLOR_BUFFER_BIT); /将窗口中每个像素的颜色设为背景颜色glPointSize(10);glBegin(GL_POINTS);/绘制点glVertex3f(0.0f,0.0f,0.0f);glVertex3d(0.3f,0.5f,0.8f);glEnd();glFlush(); void init() glClearColor (1.0, 1.0, 1.0, 1.0); /指定窗口的背景色为白色 glColor3f(0.0, 0.0, 0.0); /设置当前的绘图颜色为黑色glMatrixMode (GL_PROJECTION);/指定设置投影参数glLoadIdentity ();glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);/设置允许绘图的窗口int main(int argc, char* argv) glutInit(&argc,argv); /对GLUT库进行初始化glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);/设置窗口的显示模式 glutInitWindowSize(600,600);/指定窗口大小glutInitWindowPosition(0,0); /指定窗口位置glutCreateWindow(E11414103叶传军); /创建一个名为simple的窗口glutDisplayFunc(display);/设置当前窗口的显示回调函数init();/窗口初始化glutMainLoop();/启动主GLUT事件处理循环实验2(2)#include /引入OPENGL核心库文件void display(void)glClear(GL_COLOR_BUFFER_BIT); /将窗口中每个像素的颜色设为背景颜色glLineWidth(5);glBegin(GL_LINES);/绘制线段glVertex2i(1.0,1.0);glVertex2i(5.0,4.0);glVertex2i(1.0,5.0);glVertex2i(5.0,1.0);glVertex2i(3.0,5.0);glEnd();glFlush(); void init() glClearColor (1.0, 1.0, 1.0, 1.0); /指定窗口的背景色为白色 glColor3f(0.0, 0.0, 0.0); /设置当前的绘图颜色为黑色glMatrixMode (GL_PROJECTION);/指定设置投影参数glLoadIdentity ();glOrtho(-10.0, 10.0, -10.0, 10.0, -10.0, 10.0);/设置允许绘图的窗口int main(int argc, char* argv) glutInit(&argc,argv); /对GLUT库进行初始化glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);/设置窗口的显示模式 glutInitWindowSize(600,600);/指定窗口大小glutInitWindowPosition(0,0); /指定窗口位置glutCreateWindow(E11414103叶传军); /创建一个名为simple的窗口glutDisplayFunc(display);/设置当前窗口的显示回调函数init();/窗口初始化glutMainLoop();/启动主GLUT事件处理循环实验4(1)#include stdafx.h#include GLsizei winWidth=600,winHeight=500;GLint xRaster=25,yRaster=150;GLubyte label36=j,a,n, f,e,b, m,a,r, a,p,r, m,a,y, j,u,n, j,u,l, a,u,g, s,e,p, o,c,t, n,o,v, d,e,c;GLint dataValue12=320,475,436,754,585,619,788,500,860,1000,800,930;void init(void) glClearColor (0.0, 0.0, 0.0, 0.0); glMatrixMode (GL_PROJECTION);gluOrtho2D(0.0,600.0,0.0,500.0);void lineGraph(void)GLint month,k;GLint x=30;glClear (GL_COLOR_BUFFER_BIT);glColor3f(0.0,1.0,0.0);glBegin(GL_LINE_STRIP);for(k=0;k12;k+)glVertex2i(x+50*k,dataValuek/2-70);glEnd();glColor3f(1.0,0.0,0.0);for(k=0;k12;k+)glRasterPos2i(xRaster+k*50,dataValuek/2-74);glutBitmapCharacter(GLUT_BITMAP_9_BY_15,*);glColor3f(0.0,0.0,0.0);xRaster=20;for(month =0;month12;month+)glRasterPos2i(xRaster,yRaster-100);for(k=3*month;k3*month+3;k+)glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12,labelk);xRaster+=50;glFlush();void winReshapeFcn(GLint newWidth,GLint newHeight)glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0.0,newWidth,0.0,newHeight);glClear(GL_COLOR_BUFFER_BIT);void main(int argc, char* argv) glutInit(&argc,argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(winWidth,winHeight);glutInitWindowPosition(100,100); glutCreateWindow(E11414103叶传军); init();glutDisplayFunc(lineGraph);glutReshapeFunc(winReshapeFcn);glutMainLoop();实验4(2)#include stdafx.h#include GLsizei winWidth=600,winHeight=500;GLint xRaster=25,yRaster=150;GLubyte label36=j,a,n, f,e,b, m,a,r, a,p,r, m,a,y, j,u,n, j,u,l, a,u,g, s,e,p, o,c,t, n,o,v, d,e,c;GLint dataValue12=320,475,436,754,585,619,788,500,860,1000,800,930;void init(void) glClearColor (1.0, 1.0, 1.0, 1.0); glMatrixMode (GL_PROJECTION);gluOrtho2D(0.0,600.0,0.0,500.0);void barChart(void)GLint month,k;glClear (GL_COLOR_BUFFER_BIT);glColor3f(0.0,1.0,0.0);for(k=0;k12;k+)glRecti(20+50*k,165,40+50*k,dataValuek/2);glColor3f(0.0,0.0,0.0);xRaster=20;for(month =0;month12;month+)glRasterPos2i(xRaster,yRaster-30);for(k=3*month;k3*month+3;k+)glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12,labelk);xRaster+=50;glFlush();void winReshapeFcn(GLint newWidth,GLint newHeight)glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0.0,newWidth,0.0,newHeight);glClear(GL_COLOR_BUFFER_BIT);void main(int argc, char* argv) glutInit(&argc,argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(winWidth,winHeight);glutInitWindowPosition(100,100); glutCreateWindow(E11414103叶传军); init();glutDisplayFunc(barChart);glutReshapeFunc(winReshapeFcn);glutMainLoop();实验4(3)#includestdafx.h#include #include GLsizei windowWidth=600,windowHeight=600;GLint dataValue12=320,475,436,754,585,619,788,500,860,1000,800,930;void Init()glClearColor(1,1,1,1);glMatrixMode(GL_PROJECTION);gluOrtho2D(0,windowWidth,0,windowHeight);void CircleImage()glClear(GL_COLOR_BUFFER_BIT);glColor3f(0,0,1);glPointSize(2);glBegin(GL_POINTS);for(float i=0.0f;i2*3.1415926f;i+=0.001)glVertex2f(windowWidth/3)*cos(i)+windowWidth/2,(windowHeight/3)*sin(i)+windowHeight/2);glEnd();GLint totalNum=0;for(int i=0;i12;i+)totalNum+=dataValuei;GLfloat angleData12;for(int i=0;i12;i+)angleDatai=2*3.1415926f*(GLfloat)dataValuei/totalNum;for(int j=1;j12;j+)angleDataj+=angleDataj-1; glColor3f(1,0,0);glLineWidth(2); glBegin(GL_LINES);for(int i=0;i12;i+)glVertex2f(windowWidth/2,windowHeight/2);glVertex2f(windowWidth/3)*cos(angleDatai)+windowWidth/2,(windowHeight/3)*sin(angleDatai)+windowHeight/2);glEnd();glFlush();int main(int argc, char *argv) glutInit(&argc, argv); /初始化GLUTglutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glut

温馨提示

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

评论

0/150

提交评论