实验1 OpenGL中的二维编程
- 格式:doc
- 大小:2.44 MB
- 文档页数:4
实验一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模式下的结果。
实验1,opengl的基本语法实验报告心得体会篇一:图形学实验报告openGL的基本语法《计算机图形学基础》实验1 OpenGL的基本语法一、实验目的及要求1. 了解OpenGL的主要功能2. 了解OpenGL的绘制流程3. 掌握OpenGL的基本语法4. 通过以上内容,掌握 OpenGL的编程框架,实现简单的图形绘制二、实验环境主要是软件开发环境:VC三、实验内容OpenGL绘制矩形的简单例子。
四、实验结果五、程序代码#includevoid Initial(void){}void Display(void){glClear(GL_COLOR_BUFFER_BIT); //用当前背景色填充窗口 glColor3f(, , );//设置当前的绘图颜色为红色glRectf(, , , ); //绘制一个矩形glFlush();//处理所有的OpenGL程序}int main(int argc, char* argv[]){glutInit(&argc, argv); glutInitDisplayMo(转载于: 小龙文档网:实验1,opengl的基本语法实验报告心得体会)de(GLUT_SINGLE | GLUT_RGB); //初始化glClearColor(, , , ); //设置窗口背景颜色为白色glMatrixMode(GL_PROJECTION);//设置投影参数gluOrtho2D(,,,); 窗口的显示模式glutInitWindowSize(400,300); //设置窗口的尺寸 glutInitWindowPosition(100,120); //设置窗口的位置}glutCreateWindow("矩形"); //创建一个名为矩形的窗口 glutDisplayFunc(Display); //设置当前窗口的显示回调函数Initial(); //完成窗口初始化glutMainLoop(); //启动主GLUT事件处理循环 return 0;六、心得体会颜色、窗口尺寸、位置等都可以用代码来改。
openGL实现⼆维图形和三维图形 openGL是⼀个强⼤的底层图形库,其命令最初的时候使⽤C语⾔实现的。
openGL定义了⼀个图形程序接⼝,常⽤于制作处理三维图像,功能强⼤,调⽤⽅便,在图像处理⼗分受欢迎。
实现图形主要使⽤的是openGL的⼀个⼯具包:GLUT。
GLUT (pronounced like the glut in gluttony) is the OpenGL Utility Toolkit, a window system independent toolkit for writing OpenGL programs. It implements a simple windowing application programming interface (API) for OpenGL. GLUT is designed for constructing small to medium sized OpenGL programs. While GLUT is well-suited to learningOpenGL and developing simple OpenGL applications, GLUT is not a full-featured toolkit so large applications requiringsophisticated user interfaces are better off using native window system toolkits like Motif. GLUT is simple, easy, and small. GLUT对于⼤型的项⽬来说可能功能不全,它主要针对⼀些中⼩型的openGL项⽬⽽设计。
1.实现⼆维图像相对简单些,直接下代码:#include <GL/glut.h>void Rectangle(void) {//gl开头的函数为openGL的标准函数//(使⽤当前缓冲区的值来)清除指定的缓冲区glClear(GL_COLOR_BUFFER_BIT); //画矩形//glRectf(-0.5f, -0.5f, 0.5f, 0.5f);//画直线glBegin(GL_LINES);glVertex2f(0.5f, 0.5f);glVertex2f(-0.5f, -0.5f);glEnd();//刷新缓冲,保证绘图命令能被执⾏glFlush();}int main(int argc, char *argv[]) {//初始化GLUT libraryglutInit(&argc, argv);//对窗⼝的⼤⼩进⾏初始化glutInitWindowSize(300, 300);// 设置窗⼝出现的位置//glutInitWindowPosition(int x, int y);//初始化程序展⽰模式glutInitDisplayMode(GLUT_RGBA);glutCreateWindow("project of openGL");//win: 指定⼦窗⼝的⽗窗⼝//glutCreateSubWindow(int win, int x, int y, int width, int height);//为当前窗⼝设置函数回调,⽤于画图glutDisplayFunc(&Rectangle);//进⾏glut事件循环,否则看不到图形效果(⼀闪⽽过)glutMainLoop();return 0;} 实现效果: 也可以在窗⼝中画⼀个圆:#include <math.h>GLfloat r = 0.5f;GLfloat PI = 3.141592653f;int pre = 30;glBegin(GL_POLYGON);//画多边形for (int i = 0; i < pre; i++) {glVertex2f(r * cos(2 * PI*i / pre), r * sin(2 * PI*i / pre));}glEnd(); 实际上这个圆并不是圆,⽽是多边形的近似。
实验⼀OpenGL图形编程⼊门实验⼀ OpenGL图形编程⼊门三、实验内容1、建⽴⼀个⼯程⽂件,并运⾏样本程序my first program.cpp,观看结果。
(6)在⼯程⽂件中输⼊样本程序,单击启动调试按钮,观察运⾏结果。
样本程序:my first program.cpp#includevoid display(void){glClear(GL_COLOR_BUFFER_BIT); //刷新颜⾊缓冲区glFlush(); //⽤于刷新命令队列和缓冲区,使所有尚未被执⾏的OpenGL命令得到执⾏}void main(int argc, char** argv){glutInit(&argc, argv); //初始化GLUT库glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); //设置显⽰模式 glutCreateWindow("hello"); //创建窗⼝,标题为“hello”glutDisplayFunc(display); //⽤于绘制当前窗⼝glutMainLoop(); //表⽰开始运⾏程序,⽤于程序的结尾}运⾏结果:创建⼀个名称是“hello”的窗⼝。
如图1-7所⽰。
2、认真阅读样本程序,理解每个函数的作⽤,并修改窗⼝标题,显⽰为“我的第⼀个OpenGL程序”。
3、窗⼝的设置。
在默认情况下,窗⼝的位置出现在屏幕的左上⾓,默认⼤⼩为300*300。
要求:修改窗⼝⼤⼩为其他尺⼨。
参考函数:glutInitWindowPosition(int x, int y);//为窗⼝指定初始位置,窗⼝左上⾓在屏幕上的位置为(x,y) glutInitWindowSize(int width, int height); //设置窗⼝⼤⼩4、背景⾊的设置。
在默认情况下背景⾊是⿊⾊。
要求:(1)将窗⼝背景设置为⽩⾊(2)将窗⼝背景设置为其他颜⾊参考函数:glClearColor(r,g,b,alpha);//设置背景颜⾊,此函数放在display()中,并且放在glClear(GL_COLOR_BUFFER_BIT);语句的前⾯。
浅谈怎样使用OpenGL绘制简单二维图形浅谈怎样使用OpenGL绘制简单二维图形摘要:在上一章节中我们讲解了OpenGL的基本原理,以及怎样在MFC中配置OpenGL 绘图环境,而在这一章节我开始正式绘图(注意上一章节的内容严格的来讲是属于window 编程,而不属于OpenGL)。
我们先从一个简单例子开始讲解:绘制一个在视图中央,长宽各为视图长宽一半的矩形。
1.1 视图设置与GDI二维函数库不同,OpenGL是一套三维绘图函数库。
使用GDI时,点的坐标对应的就是像素点坐标(已窗口左上角为(0,0)点),而OpenGL绘图时使用的是顶点坐标,要通过一系列转换最终换算成窗口的像素坐标,这种转换就是视图的设置,视图设置将在第三章详细讲解,本章只使用最简单的一种视图设置——2D正投影。
(视图设置的详细内容将在下一章讲解)设置2D正投影所需的函数如下:glMatrixMode(GL_PROJECTION);将投影矩阵设置为当前矩阵(后续设置矩阵的函数都是对投影矩阵起作用)glLoadIdentity();将当前矩阵设置为单位矩阵gluOrtho2D(left,right,bottom,top);创建一个把二维坐标投影到屏幕上的矩阵,并把当前矩阵与它相乘。
裁剪区域为矩形,它的左下坐标为(left,bottom),右上坐标为(right,top)。
glViewport(x,y,width,height);在窗口中定义一个像素矩形,最终的图像将映射到这个矩形中。
(x,y)参数指定了视口的左下角,width和height表示这个视口矩形的宽度和高度。
在默认情况下,视口的初始值是(0,0,winWidth,winHeight),其中winWidth和winHeight为对应窗口的大小。
在2D正投影模式下,OpenGL坐标于窗口显示的坐标对应逻辑如图 1 窗口映射关系所示:图 1 窗口映射关系1.2 绘制几何图元设置完视图和投影模式之后,我们便可以开始绘图了,但在这之前还要注意清空视图,防止绘图效果累加,比如要画一个移动圆形,如果不将前一帧的绘图擦除,我们将看到的是一系列的圆形,而不是一个移动的圆形,这和使用GDI在每次绘图都要用背景将上一次的绘图效果覆盖一样。
计算机图形学实验指导书课程名称: 计算机图形学基础英文名称: Computer Graphics 课程性质: 限选编写人: 孔繁茹2010年9月1日计算机学院阅读说明● 未加标注的为参考实验 ● 标有☆的为必做实验 ● 标有★的为选做实验实验要求● 每个小组 ≤ 4人,需要完成以下任务⏹ 所有必做实验 (40%) 8 * 5分 ⏹ 2项选做实验 (20%) 2 * 10分 ⏹ 1项综合实验 (40%) 1 * 40分Part 1 预备知识实验1.1 环境设置[参考程序] demo.c 图 1.1.1 一、实验目的熟悉VC 编程环境, 配置OpenGL 图形环境 二、实验内容1.OpenGL 环境设置将OpenGL 所需函数库和头文件复制到指定目录.也可以通过批处理文件的方式, 将下面四行存入一文本文件, 改名为set.bat , 然后双击set.bat 运行. copy glut.h "C:\Program Files\Microsoft Visual Studio\VC98\Include\GL" copy glut32.lib "C:\Program Files\Microsoft Visual Studio\VC98\Lib" copy glut32.dll "C:\WINDOWS\system32" pause注意: 如果VC 安装在D 盘或其他盘, 应修改相应路径 2.编译运行demo.c, 查看环境是否配置成功Part 2 OpenGL 编程基础图 1.1.1实验2.1 OpenGL 编程基础[参考程序]hello.c 图2.1.1 chap2-1.cpp 图2.1.2一、实验目的熟悉OpenGL 编程框架、基本函数、几何原语 二、实验内容1. 运行hello.c, 查看运行结果, 并完成以下练习1) 改变背景颜色 2) 改变图形颜色 3) 改变窗口大小 4) 改变窗口位置2. 用OpenGL 几何原语绘制点, 直线, 多边形, 三角形带等基本图形. OpenGL 编程基础可参考附录。
实验1 OpenGL中的二维编程
【实验目的】
1.掌握基本的openGL编程方法。
2.掌握二维图形的显示方法。
【实验题目】
1. 练习基本的openGL编程方法。
(1)配置openGL,能在VC下通过编译。
(2)阅读并运行simple.c,熟悉最简单的openGL程序结构。
(3)阅读并运行改进的simple2.c,掌握openGL程序的通用结构。
给simple2.c 中的函数加注释。
可尝试做如下修改:
(a)改变窗口的位置,尺寸,标题;
(b)改变窗口背景色和矩形颜色;
(c)改变矩形的尺寸和其在窗口中的位置,还可以只显示矩形的一部分(通过设置正投影参数(glOrtho函数的参数)和矩形四个顶点的坐标来完成);
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();
3.学会查文档,自学。
4公司某年度各月产量分别为:320,475,436,754,585,619,788,500,860,1000,800,930。
试绘制一年内产量按月的折线图,柱状图和饼图(可用三角法画圆)。
注意文本的位置。
参考图示如下:
月份较多,画饼图的时候可以按照季度来统计产量:
【说明】实验报告写题目1,2,4。
【参考资料】
[1] 教材2.5.3节,2.6.4节,5.8.1节,5.8.2节,5.8.3节(多边形的填充和法向量不用看),5.8.4节
[2] D. Hearn and M. P. Baker, Computer Graphics with OpenGL, 3rd Ed., 2004. 计算机图形学(第三版),电子工业出版社
2.9节,
3.1-3.4节,3.16节,3.21节,P131示例程序(第4题可参考这里的程序),
4.3.1节,4.7节,4.8节,4.14.2-4.14.4节。