实验一OpenGL图形编程入门
- 格式:doc
- 大小:100.00 KB
- 文档页数: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初识一、实验目的熟悉编程环境;了解光栅图形学显示器的特点,了解计算机绘图的特点;利用VC++OpenGL作为开发平台设计程序,已能够在屏幕上生成任意一个像素点作为本实验的目标。
二、实验内容(1)了解和使用VC的开发环境,理解简单的OpenGL程序结构(2)掌握OpenGL提供的基本图形函数,尤其是生成点函数。
三、实验原理(1)基本语法常用的程序设计语言,如C、C++、Pascal、Fortran和Java 等,都支持OpenGL 的开发。
这里只讨论C版本下OpenGL的语法。
OpenGL基本函数均使用g1作为函数名的前缀,如glClearColor();实用函数则使用glu 作为函数名的前缀, 如gluSphere()。
OpenGL基本常量的名字以GL_开头,如GL_LINE_LOOP;实用常量的名字以GLU_开头,如GLU_FILL。
一些函数如glColor*().(定义颜色值), 函数名后可以接不同的后缀以支持不同的数据类型和格式。
如glColor3(…)、glColor3d(…)、glColor3f(…)和glCo1or3bv(…)等,这几个函数在功能上是相似的,只是适用于不同的数据类型和格式,其中3表示该函数带有三个参数, b、d、f 分别表示参数的类型是字节型、双精度浮点型和单精度浮点型, v 则表示这些参数是以向量形式出现的。
为便于移植, OpenGL定义了一些自己的数据类型,如GLf1oat、GLvoid,它们其实就是C语言中的float和void。
在gl.h文件中可以看到以下定义:…typedef float GLfloat;typedef void GLvoid;…一些基本的数据类型都有类似的定义项。
(2)程序的基本结构OpenGL程序的基本结构可分为三个部分:第一部分是初始化部分。
主要是设置一些OpenGL的状态开关,如颜色模式(RGBA 或Alpha)的选择、.是否作光照处理(若有的话,还需设置光源的特性)、深度检测、.裁剪等。
实验一、直线的扫描转换系别:计算机学院专业班级: 10信科2姓名:学号实验日期: 2013-3-27 实验报告日期:2013-3-27一、实验目的:理解直线的不同生成算法,并用程序实现。
二、实验环境:1熟悉VC6.0开发平台;2熟悉OpenGL开发库;三、实验内容:1.使用OpenGL中的基本画点函数,分别使用DDA算法、中点算法、Bresenham算法画直线。
要求为每一种算法分别建立对应的函数,函数参数为直线段的端点坐标。
四、实验报告内容1、程序源码;void MidpointMethod(Point point1,Point point2){int x ,y,d,times1,times2,stepX,stepY; //k表示斜率int a,b,c; //a,b ,c分别为直线方程 aX+bY+c=0的参数int i;float k;x=point1.x; y=point1.y;times1=abs(point1.x-point2.x);//循环次数times2=abs(point2.y-point1.y);a=point2.y-point1.y; //求出直线方程 aX+bY+c=0的参数的参数ab=point1.x-point2.x; //求出直线方程 aX+bY+c=0的参数的参数bc=point1.x*(point1.y-point2.y)+point1.y*(point2.x-point1.x); //求出直线方程 aX+bY+c=0的参数的参数cstepX=b/abs(b)*(-1); //stepX表示该直线在X轴上的延伸方向,stepX值为1,表示直线像素点的横坐标跳步的方向与x轴一样,否则为-1 stepY=a/abs(a); //stepY表示该直线在y轴上的延伸方向,stepY 值为1,表示直线像素点的纵坐标跳步的方向与Y轴一样,否则为-1k=((float)a)/((float)b)*(-1); //求出斜率kglPointSize(1.0f);glBegin(GL_POINTS);if((0<=k)&&(k<=1)) //斜率为0到1的情况{d=a+0.5*b; //初值for(i=0;i<=times1;i++){x=x+stepX;if(stepX*d>=0) //判断y方向是否走步,stepX表示该直线在X轴上的延伸方向,stepX值为1,表示直线像素点的横坐标跳步的方向与x轴一样,否则为-1 //{y+=stepY;d=d+a+b;}elsed=d+a;glVertex2i(x,y);}}else if((1<k)&&(k<=10000)) //斜率大于1的情况{d=b+0.5*a;for(i=0;i<times2;i++) //times表示循环要执行的次数{y+=stepY;if(d*stepY<=0) //判断中点是否在直线的上方,stepY表示该直线在y轴上的延伸方向,stepX值为1,表示直线像素点的纵坐标跳步的方向与x轴一样,否则为-1{x+=stepX;d=d+a+b;}else d=d+b;glVertex2i(x,y);}}else if((-1<=k)&&(k<0)) //斜率为-1到0的情况{d=a+0.5*b;for(i=0;i<=times1;i++){x=x+stepX;if(stepX*d<=0){y+=stepY;d=d+a-b;}elsed=d+a;glVertex2i(x,y);}}else if((-10000<=k)&&(k<-1)) //斜率为小于-1的情况{d=a*0.5+b;for(i=0;i<=times2;i++){y=y+stepY;if(stepY*d>=0){x+=stepX;d=d-a+b;}elsed=d+b;glVertex2i(x,y);}}else //斜率无限大的情况{for(i=0;i<times2;i++){y+=1;glVertex2i(x,y);}}glEnd();}2、实验报告;报告中包含以下内容:①自己编写的绘图函数及其辅助函数。
opengl实验报告OpenGL实验报告引言:OpenGL(Open Graphics Library)是一种跨平台的图形编程接口,被广泛应用于计算机图形学、游戏开发和科学可视化等领域。
本实验报告将介绍我对OpenGL的实验研究和学习成果。
一、实验目的本次实验的主要目的是掌握OpenGL的基本概念和使用方法,了解图形渲染的原理和过程,以及学习如何在OpenGL中创建和操作图形对象。
二、实验环境本次实验使用的是OpenGL的最新版本,并在Windows操作系统下进行开发。
使用的开发工具是Visual Studio和OpenGL的开发库。
三、实验过程1. 熟悉OpenGL的基本概念在开始实验之前,我先学习了OpenGL的基本概念,包括OpenGL的坐标系统、图形渲染管线、着色器等。
了解这些概念对于后续的实验非常重要。
2. 创建窗口和上下文在OpenGL中,我们需要先创建一个窗口和一个OpenGL上下文,以便进行图形渲染。
通过调用相关的OpenGL函数,我成功创建了一个窗口,并初始化了OpenGL的上下文。
3. 绘制基本图形接下来,我开始尝试绘制一些基本的图形,比如点、线和三角形。
通过设置顶点坐标和颜色,我成功绘制出了这些基本图形,并在窗口中显示出来。
4. 添加纹理为了使图形更加逼真和丰富,我学习了如何在OpenGL中添加纹理。
通过加载图片并设置纹理坐标,我成功将纹理贴在了绘制的图形上,使其具有了更加真实的效果。
5. 光照和阴影效果为了增加图形的立体感和真实感,我学习了如何在OpenGL中添加光照和阴影效果。
通过设置光源的位置和属性,以及材质的属性,我成功实现了光照和阴影的效果,使图形看起来更加逼真。
6. 动画效果为了使图形具有动态效果,我学习了如何在OpenGL中实现简单的动画效果。
通过每帧更新顶点的位置和纹理坐标,我成功实现了图形的旋转和平移动画,使其具有了动态的效果。
四、实验结果和分析通过以上的实验过程,我成功掌握了OpenGL的基本概念和使用方法,并实现了一些基本的图形渲染效果。
实验1,opengl的基本语法实验报告心得体会实验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;六、心得体会。
虚拟飞行技术基础实验指导书梅跃松实验1. OpenGL程序框架及基础图形绘制一、实验目的:了解OpenGL的程序框架,并学会在Windows环境下绘制点、线、面等基础图形,并会设置背景及对象颜色。
二、实验内容:要求创造一个窗口,窗口标题为“绘制几何图元”,窗口大小为320*240,窗口左上角坐标(100,150),在创建窗口时使用单缓冲区窗口(GLUT_SINGLE)并使用RGB颜色模式(GLUT_RGB),背景白色,在(50.0,50.0),(150.0,60.),(100.0,200.0)位置各画三个点,点大小为4个像素,以(200.0,50.0),(300.0,70.0),(290.0,100.0),(210.0,200.0)为四个顶点画四边形,点和四边形皆为红色,裁剪区域为(0,0)到(300,240)。
三、实验要求:下课前通过Email:mys001@提交程序。
实验2. OpenGL平移、旋转和缩放技术一、实验目的:了解OpenGL中从未加工的顶点数据到屏幕坐标的过程,掌握平移、旋转和缩放方法。
二、实验内容:要求设计一个正方体,该正方体六个面无重复颜色,并且绕(0,0,0)和(-1,1,0)两点所确定的轴旋转。
三、实验要求:下课前通过Email:mys001@提交程序。
实验3. OpenGL矩阵堆栈技术和投影技术一、实验目的:掌握OpenGL程序的矩阵堆栈技术和投影技术,以及鼠标和键盘的使用。
二、实验内容:仿照课堂上讲解的原子核程序设计一个飞机绕原子核飞行的程序,亦即绘制一个纸飞机,使其替换掉绕Y轴旋转的电子,要求程序中使用投影技术,并且可以用鼠标来控制飞机的飞行,鼠标左键点击,飞机沿逆Y轴方向逆时针飞行,鼠标右键点击,飞机则顺时针飞行。
三、实验要求:下课前通过Email:mys001@提交程序。
实验4. OpenGL光照技术和材质技术一、实验目的:掌握OpenGL程序的光照技术和材质技术,学会环境光、散射光、镜面光和辐射光四种场景光的使用,学会光源的使用,并了解不同材质设定下的不同的作用效果,学会多光源的使用。
实验1 OpenGL初识一、实验目的:熟悉编程环境;了解光栅图形显示器的特点;了解计算机绘图的特点;利用VC+OpenGL作为开发平台设计程序,以能够在屏幕上生成任意一个像素点为本实验的结束。
二、实验内容:(1)了解和使用VC的开发环境,理解简单的OpenGL程序结构。
(2)掌握OpenGL提供的基本图形函数,尤其是生成点的函数。
三、该程序的作用是在一个黑色的窗口中央画一个矩形、三角形和三个点,如图所示。
下面对各行语句进行说明:首先,需要包含头文件#include <GL/glut.h>,这是GLUT的头文件。
然后看main函数。
int main(int argc, char *argv[]),这个是带命令行参数的main函数。
这种以glut开头的函数都是GLUT工具包所提供的函数,下面对用到的几个函数进行介绍;1)glutInit,对GLUT进行初始化,这个函数必须在其它的GLUT使用之前调用一次。
其格式比较固定,一般都是glutInit(&argc, argv)就行;2) glutInitDisplayMode,设置显示方式,其中GLUT_RGB表示使用RGB颜色,与之对应的还有GLUT_INDEX(表示使用索引颜色)。
GLUT_SINGLE表示使用单缓冲,与之对应的还有GLUT_DOUBLE(使用双缓冲)。
更多信息,以后的实验教程会有讲解介绍;3) glutInitWindowPosition,设置窗口在屏幕中的位置;4) glutInitWindowSize,设置窗口的大小;5) glutCreateWindow,根据前述设置的信息创建窗口。
参数将被作为窗口的标题。
注意:窗口被创建后,并不立即显示到屏幕上。
需要调用glutMainLoop才能看到窗口;6) glutDisplayFunc,设置一个函数,当需要进行画图时,这个函数就会被调用。
(暂且这样理解);7) glutMainLoop,进行一个消息循环。
关于opengl实验报告OpenGL实验报告一、实验目的本实验旨在通过使用OpenGL图形库,掌握基本的3D图形编程技术,以及了解OpenGL的基本操作和常用函数。
二、实验环境1. 操作系统:Windows 102. 开发环境:Visual Studio 20193. 编程语言:C++4. 图形库:OpenGL三、实验内容1. 创建一个窗口并初始化OpenGL环境2. 绘制一个简单的三维立方体3. 添加光照效果和材质4. 实现简单的相机控制5. 添加纹理贴图四、实验过程1. 创建窗口并初始化OpenGL环境首先,我们使用OpenGL提供的函数来创建一个窗口,并初始化OpenGL环境。
这一步是整个实验的基础,也是我们能够进行后续操作的前提。
2. 绘制一个简单的三维立方体利用OpenGL提供的函数,我们可以很容易地绘制一个简单的三维立方体。
通过设置顶点坐标和法向量,我们可以使用OpenGL提供的函数来绘制出一个立方体。
3. 添加光照效果和材质在绘制立方体的基础上,我们可以通过设置光源的位置和颜色,以及物体的材质属性,来实现光照效果和材质的渲染。
这一步可以让我们的立方体看起来更加真实。
4. 实现简单的相机控制通过控制相机的位置和方向,我们可以实现简单的相机控制。
这样可以让我们在3D场景中自由地移动和观察物体。
5. 添加纹理贴图最后,我们可以通过加载纹理图片,并将其贴到立方体的表面上,来实现纹理贴图。
这样可以让我们的立方体看起来更加生动和具有真实感。
五、实验总结通过本次实验,我们学习了如何使用OpenGL图形库进行3D图形编程,掌握了基本的操作和常用函数。
同时,我们也实现了一个简单的3D场景,包括绘制立方体、添加光照效果和材质、实现相机控制以及添加纹理贴图。
这些技术和知识对于今后的图形编程工作将会有很大的帮助。
实验一 OpenGL图形编程入门三、实验内容1、建立一个工程文件,并运行样本程序my first program.cpp,观看结果。
(6)在工程文件中输入样本程序,单击启动调试按钮,观察运行结果。
样本程序:my first program.cpp#include <glut.h>void 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);语句的前面。
高级图形图像第一次实验报告一、实验描述以及关键步骤1.opengl编程环境组建(基于VC6.0)1)下载opengl开发库文件夹;2)复制glut32.dll和glut.dll到…\windows\system32;3)复制glut.h到...\Microsoft Visual Studio\VC98\Include\GL;4)复制glut32.lib和glut.lib到…\Microsoft Visual Studio\VC98\Lib;5)新建工程后,进入Project菜单,选Settings项,弹出 Settings 对话框,选Link项,在 Libraries 栏目中加入OpenGL库:opengl32.lib glu32.lib glaux.lib。
2.基本图形绘制首先运行一个Windows环境下的一个基本OpenGL程序,直接打开60version文件夹内的工程,它将显示一个空的OpenGL窗口,可以在定制窗口大小和全屏模式下切换(按F1),按ESC退出,该程序为以后的应用程序提供了实验平台,并预留了绘图接口。
根据教材P67-70,了解绘制函数,根据附件2提供的源码baseshape.cpp,将该文件内的场景绘制函数Drawsence()替代空窗口程序中的同名函数,修改图形绘制命令和参数,显示出点、线、矩形、三角形等,可设置不同线宽。
3.图形的二维变换根据附件3提供源码,将该文件内的场景绘制函数Drawsence()替代空窗口程序中的同名函数,通过调用glTranslate*, glRotate*,glscale*等二维变换函数实现平移、旋转、缩放等变换,通过参数操作和矩阵操作两种方式执行。
glTranslatef:在opengl中,函数glTranslatef的作用就是移动坐标原点。
glRotatef:glRotatef( angle, x, y, z )函数的作用是将当前坐标系以a( x, y, z )向量为旋转轴旋转angle角度,满足右手法则,即沿着右手握拳时四个手指指向的方向旋转。
实验一OpenGL 软件的使用1.实验目的:1) 学会 OpenGL 的安装及编程;2) 掌握用OpenGL绘图包编程的软件总体结构.3) 掌握用 OpenGL 绘图包绘制立方体的基本语句;4) 掌握OpenGL 绘图包用鼠标交互操作图形的语句;2.实验要求:要求能够从网上下载OpenGL的动态链接文件和库文件,并进行安装。
能够用OpenGL的函数进行编程绘制立方体,实现用鼠标拖动、旋转、缩放立方体。
3.实验内容:从网上下载OpenGL的动态链接文件(.DLL)和库文件(.Lib),把它们放置到规定的目录中。
用VC++的Windows编程,实现绘制立方体,和用鼠标交互。
4.实验步骤:1) 从网上下载OpenGL的动态链接文件(.DLL)和库文件(.Lib),把它们放置到规定的目录中。
2) 用VC++的Windows编程,配制编程环境。
3) 编程实现绘制立方体。
4) 编程实现用鼠标的交互操作。
5.实验学时:2 学时。
6.实验结果:上交编制的软件和实验报告。
实验二网格地形的绘制1.实验目的:1) 学会使用 OpenGL 进行三维地形的绘制;2) 掌握用OpenGL绘制网格的关键技术.3) 掌握用 OpenGL 绘制网格的的基本语句;4) 深刻体会网格剖分的理论和技术;2.实验要求:要求能够用OpenGL的语句绘制三维地形图,以网格表现。
调整网格的参数,它的高程,u,v值,它的网格数,实现不同精度,不同外观的地形。
3.实验内容:从网上下载OpenGL的地形绘制程序,或按照书上的程序例子,编程实现地形绘制。
调整程序中的网格的参数,它的高程,u,v值,它的网格数,实现不同精度,不同外观的地形。
4.实验步骤:1) 从网上下载OpenGL的地形绘制程序。
或找到书上的程序例子。
2) 用VC++的Windows编程,实现地形绘制。
3) 调整程序中的网格的参数,它的高程,u,v值,它的网格数。
4) 编程实现并观看各种地形效果。
一、OpenGL与3D图形世界1.1、OpenGL使人们进入三维图形世界 我们生活在一个充满三维物体的三维世界中,为了使计算机能精确地再现这些物体,我们必须能在三维空间描绘这些物体。
我们又生活在一个充满信息的世界中,能否尽快地理解并运用这些信息将直接影响事业的成败,所以我们需要用一种最直接的形式来表示这些信息。
最近几年计算机图形学的发展使得三维表现技术得以形成,这些三维表现技术使我们能够再现三维世界中的物体,能够用三维形体来表示复杂的信息,这种技术就是可视化(Visualization)技术。
可视化技术使人能够在三维图形世界中直接对具有形体的信息进行操作,和计算机直接交流。
这种技术已经把人和机器的力量以一种直觉而自然的方式加以统一,这种革命性的变化无疑将极大地提高人们的工作效率。
可视化技术赋予人们一种仿真的、三维的并且具有实时交互的能力,这样人们可以在三维图形世界中用以前不可想象的手段来获取信息或发挥自己创造性的思维。
机械工程师可以从二维平面图中得以解放直接进入三维世界,从而很快得到自己设计的三维机械零件模型。
医生可以从病人的三维扫描图象分析病人的病灶。
军事指挥员可以面对用三维图形技术生成的战场地形,指挥具有真实感的三维飞机、军舰、坦克向目标开进并分析战斗方案的效果。
更令人惊奇的是目前正在发展的虚拟现实技术,它能使人们进入一个三维的、多媒体的虚拟世界,人们可以游历远古时代的城堡,也可以遨游浩翰的太空。
所有这些都依赖于计算机图形学、计算机可视化技术的发展。
人们对计算机可视化技术的研究已经历了一个很长的历程,而且形成了许多可视化工具,其中SGI公司推出的GL三维图形库表现突出,易于使用而且功能强大。
利用GL开发出来的三维应用软件颇受许多专业技术人员的喜爱,这些三维应用软件已涉及建筑、产品设计、医学、地球科学、流体力学等领域。
随着计算机技术的继续发展,GL已经进一步发展成为OpenGL,OpenGL已被认为是高性能图形和交互式视景处理的标准,目前包括ATT公司UNIX软件实验室、IBM公司、DEC公司、SUN公司、HP公司、Microsoft公司和SGI公司在内的几家在计算机市场占领导地位的大公司都采用了OpenGL图形标准。
实验一OpenGL基本图形绘制一、实验目的和要求:1. 了解VC++环境下,OpenGL图形绘制的程序结构;2. 通过编程实现简单二维图形的绘制;3. 掌握理解简单的OpenGL程序结构;掌握OpenGL提供的基本图形函数,尤其是生成点、线、面的函数4. 掌握图形显示原理。
二、实验内容:1、OpenGL在VC++下的安装和配置2、读懂给定的示例程序,使用Visual C++ 6.0和OpenGL编写几个简单图形的绘制程序。
3、建议有能力的学生进一步学习OpenGL的复杂功能创建效果更好的三维图形;三、实验步骤:1、初步了解OpenGL的功能以及语法特点;2、下载glut包,复制 glut32.dll到winnt/system32文件夹下,复制glut32.lib到vc98/lib文件夹下,复制glut.h到vc98/include/gl文件夹下;3、创建VC工程:选择菜单File中的New选项,弹出一个分页的对话框,选中页Projects中的Win32 Console Application项,然后填入你自己的Project name,如Test,回车即可。
VC为你创建一个工作区(WorkSpace),你的项目Test就放在这个工作区里;4、为项目添加文件:为了使用OpenGL,我们需要在项目中加入三个相关的Lib文件:glu32.lib、glut32.lib、opengl32.lib,这三个文件位于VC安装目录下的lib目录(如c:\program files\ devstudio\vc\lib)中。
选中菜单Project->Add ToProject->Files项(或用鼠标右键),把这三个文件加入项目,在FileView中会有显示。
这三个文件请务必加入,否则编译时会出错。
或者将这三个文件名添加到Project->Setting->Link-> Object /library Modules 即可。
实验一OpenGL基本图形绘制一、实验目的和要求:1. 了解VC++环境下,OpenGL图形绘制的程序结构;2. 通过编程实现简单二维图形的绘制;3. 掌握理解简单的OpenGL程序结构;掌握OpenGL提供的基本图形函数,尤其是生成点、线、面的函数4. 掌握图形显示原理。
二、实验内容:1、OpenGL在VC++下的安装和配置2、读懂给定的示例程序,使用Visual C++ 6.0和OpenGL编写几个简单图形的绘制程序。
3、建议有能力的学生进一步学习OpenGL的复杂功能创建效果更好的三维图形;三、实验步骤:1、初步了解OpenGL的功能以及语法特点;2、下载glut包,复制 glut32.dll到winnt/system32文件夹下,复制glut32.lib到vc98/lib文件夹下,复制glut.h到vc98/include/gl文件夹下;3、创建VC工程:选择菜单File中的New选项,弹出一个分页的对话框,选中页Projects中的Win32 Console Application项,然后填入你自己的Project name,如Test,回车即可。
VC为你创建一个工作区(WorkSpace),你的项目Test就放在这个工作区里;4、为项目添加文件:为了使用OpenGL,我们需要在项目中加入三个相关的Lib文件:glu32.lib、glut32.lib、opengl32.lib,这三个文件位于VC安装目录下的lib目录(如c:\program files\ devstudio\vc\lib)中。
选中菜单Project->Add ToProject->Files项(或用鼠标右键),把这三个文件加入项目,在FileView中会有显示。
这三个文件请务必加入,否则编译时会出错。
或者将这三个文件名添加到Project->Setting->Link-> Object /library Modules 即可。
实验一 OpenGL图形编程入门三、实验内容1、建立一个工程文件,并运行样本程序my first program.cpp,观看结果。
(6)在工程文件中输入样本程序,单击启动调试按钮,观察运行结果。
样本程序:my first program.cpp#include <glut.h>void 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);语句的前面。
其中r,g,b取值范围是[0,1],可以是浮点数。
例如glColor3f(0,0,0)为黑色,glColor3f(1,1,1)为白色,其他颜色应该如何设置?5、基本图形绘制。
参考函数://画矩形,x1,y1和x2,y2为矩形对角线顶点坐标glRectf(x1,y1,x2,y2);//画线,x1,y1和x2,y2分别为直线段端点坐标glBegin(GL_LINES);glVertex2f(x1,y1);glVertex2f(x2,y2);glEnd();//画三角,x1,y1,x2,y2和x3,y3为三角形顶点坐标glBegin(GL_TRIANGLES);glVertex2f(x1,y1);glVertex2f(x2,y2);glVertex2f(x3,y3);glEnd();(1)在display绘图函数的glClear(GL_COLOR_BUFFER_BIT);语句后面增加glRectf(0,0,1,1);运行程序查看效果(2)修改矩形的对角坐标,看看什么变化和问题。
(3)根据给出的函数,试画出直线和三角形等基本图形。
6、绘图色的设置。
(1)将绘制的图形修改成红色。
(2)将绘制的不同基本图元设为不同的颜色。
参考函数:glColor3f(r,g,b); //设置绘图色r,g,b,取值范围:[0,1],可以为浮点数实验二基本图元的生成算法三、实验内容与要求1、调出实验一的源代码运行,调整修改使得显示窗口大小改变时,绘制的矩形大小随之改变。
提示:(1)在main函数里添加注册窗口变化函数glutReshapeFunc(myreshape); (放在glutMainLoop()之前)(2)在程序中添加窗口改变子函数,参数w,h为当前显示窗口的宽和高 void myreshape(GLsizei w, GLsizei h){glViewport(0,0,w,h); //设置视区位置glMatrixMode(GL_PROJECTION);//设置投影变换模式glLoadIdentity(); //调单位矩阵,清空当前矩阵堆栈if(w<=h)gluOrtho2D(0,300,0,300*(GLfloat)h/(GLfloat)w);//设置裁剪窗口大小elsegluOrtho2D(0,300*(GLfloat)w/(GLfloat)h,0,300);}2、自己参照讲义或教材按照自己的构思画二维平面图形, 修改样本程序circle-algorithm.cpp将上面的矩形替换成自己构思的二维平面图形。
注意顶点的顺序。
参考函数:(1)、点绘制举例glPointSize(2.0) //点的大小设置glBegin(GL_POINTS);glColor3f(1.0,1.0,1.0);glVertex2f(-0.5,-0.5); //顶点glColor3f(1.0,0.0,1.0);glVertex2f(-0.5,0.5);glColor3f(0.0,1.0,1.0);glVertex2f(0.5,0.5);glColor3f(1.0,1.0,0.0);glVertex2f(0.5,-0.5);glEnd()(2)、直线/三角形/四边形绘制举例glLineWidth(2.0);glBegin(GL_LINES);// glBegin(GL_LINE_STRIP);// glBegin(GL_LINE_LOOP);// glBegin(GL_TRIANGLES);// glBegin(GL_TRIANGLE_STRIP);// glBegin(GL_TRIANGLE_FAN);// glBegin(GL_QUADS);// glBegin(GL_TRIANGLE_STRIP);glVertex2f(-0.5,0.5);glVertex2f(-0.5,-0.5);glColor3f(1.0,1.0,1.0);glVertex2f(-0.5,0.5);glColor3f(1.0,1.0,0.0);glVertex2f(0.5,-0.5);glEnd();(3)、多边形举例glBegin(GL_POLYGON);glVertex2f(-0.5,0.5);glVertex2f(-0.5,-0.5);glColor3f(1.0,1.0,1.0);glVertex2f(0,-0.5);glColor3f(1.0,1.0,0.0);glVertex2f(0.5,-0.5);glVertex2f(0.5,0.5);glEnd();3、读懂DDA直线生成算法伪代码,并修改伪代码,使之变成可行的OpenGL代码,验证DDA直线生成算法。
DDA直线生成伪代码//x0,y0 表示直线的起始点, x1,y1表示直线的终止点,color表示直线的绘制颜色提示:使用学过的画点函数替换setpixel(round(x), round(y),color)函数。
4、读懂Bresenham直线生成算法伪代码,并修改伪代码,使之变成可行的OpenGL代码,验证Bresenham直线生成算法。
要求在函数void Bresenham_Circle_Algorithm(int cx, int cy, int radius)中写出自己的Bresenham画圆法代码。
思考选做:5、DDA算法来绘制N多边形。
用n多边形逼近圆,最小多边形为3角形。
将自己的代码写在函数NSidedPolygon(int n, int cx, int cy,int radius)里,使用DDA算法来绘制N多边形(不要使用OpenGL绘制多边形的函数)。
我们知道OpenGL画点功能为:glBegin(GL_Points);glVertex2f(x,y);glEnd();由于n多边形有n条边,所以必须画n条直线。
将画直线的代码写在函数 DrawLine(int x1, int y1, int x2, int y2)中,考虑n多边形的n条直线是各个方向,即有斜率|k|>=1的情况,又有斜率|k|<1的情况,你可以使用学过的画直线方法,如DDA算法。
阅读样本程序,参见circle-algorithm.cpp:附:样本程序circle-algoritm.cpp#include <glut.h>#include <stdio.h>#include <stdlib.h>#include <math.h>// set some initial parameters, such as the center of the circle(cx,cy), the radius of the circle,int cx=150,cy=150,radius=80;void DDA_Line(int x1,int y1,int x2,int y2);void Bresenham_DrawLine(int x1,int y1,int x2,int y2);void NSidedPolygon(int n, int cx, int cy, int radius);void Display(void);void Reshape(int w, int h);int main(int argc, char** argv){glutInit(&argc, argv);glutInitWindowPosition(0, 0);glutInitWindowSize(window_width, window_height);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);glutCreateWindow("Circle Generation Algorithm");glutDisplayFunc(Display);glutReshapeFunc(Reshape);glutMainLoop();return 0;}void Display(void){/* YOUR CODE HERE */glutSwapBuffers();}void Reshape(int w, int h){glMatrixMode(GL_PROJECTION);glLoadIdentity();glViewport(0, 0, w, h);gluOrtho2D(0, w, 0, h);// glutPostRedisplay();}void DDA_Line(int x1,int y1,int x2,int y2);{/* YOUR CODE HERE */}void Bresenham_DrawLine(int x1,int y1,int x2,int y2);{/* YOUR CODE HERE */}void NSidedPolygon(int n, int cx, int cy, int radius){/* YOUR CODE HERE */}实验三 OpenGL的简单动画与交互二、实验内容与要求1、在实验一(画矩形)的基础上添加键盘交互,按W键绘制的矩形上移,按S键矩形下移,按A键矩形左移,按D键矩形右移,如图3-1。