实验1 OpenGL中的二维编程
- 格式:doc
- 大小:2.80 MB
- 文档页数:10
实验一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在每次绘图都要用背景将上一次的绘图效果覆盖一样。
实验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节。