计算机图形学大作业报告记录(灯光纹理映射)

合集下载

计算机图形学报告华北电力大学

计算机图形学报告华北电力大学

课程设计(综合实验)报告( 2015 -- 2016 年度第一学期)名称:计算机图形学题目:课内综合实验院系:计算机系班级:计科1203班学号:学生姓名:指导教师:姜丽梅实验学时:成绩:日期:2015年5月6日一、实验目的与要求1.掌握计算机图形学及交互式计算机图形学的定义,了解OpenGL的功能及工作流程,掌握基于OpenGL Glut库的程序框架。

2.掌握基本的二维线画图元的绘制算法及属性,掌握OpenGL基本图元的绘制。

3.理解二维、三维图形的绘制流程,掌握二维图形和三维图形的图形变换。

4.了解形体的真实感表示的内容,包括消隐技术、简单光照明模型、多边形的明暗绘制技术以及纹理映射技术。

5.要求使用OpenGL及GLUT库在Visual C++环境下编写图形绘制程序实现基本图元绘制。

6.要求对绘制的简单场景综合利用几何变换或gluLookAt函数实现交互式三维观察程序。

二、实验内容1、OpenGL基本图元绘制实验在两个具有不同属性的窗口中分别显示一个旋转的矩形来演示单缓存和双缓存,在旋转过程中不断改变图形的颜色,利用鼠标或菜单可终止/启动图形旋转。

明确程序包括哪些函数,各个函数的功能以及整个流程,从而为进一步做综合性的图形绘制实验奠定基础。

依赖项关系图可以清楚地表达出各函数之间的关系,如下:实验方法与步骤:1、正确配置相关文件;C:\Program Files\Microsoft Visual Studio\VC98\Include\GLC:\WINDOWS\system32C:\Program Files\Microsoft Visual Studio\VC98\Lib2、编辑源程序并进行调试;3、进行运行测试,并结合情况进行调整;通过改变各个函数参数值,观察图形变化,说明产生相应结果的原因,从而进一步了解函数的作用。

4、对运行结果进行保存。

实验代码:#include <stdlib.h>#include <gl/glut.h>#include < stdio.h >#include <math.h>#define DEG_TO_RAD 0.017453static GLfloat theta = 0.0;GLfloat r = 0.0; //设置矩形的初始颜色GLfloat g = 0.0;GLfloat b = 0.0;int singleb,doubleb;void display(void){ glClear(GL_COLOR_BUFFER_BIT); //清除颜色的缓冲,颜色渐变r = r - 0.0002;g = g + 0.0002;b = b + 0.0001;if(r < 0.0001){ r = 1.0;g = 0.0;b = 0.0;}glBegin(GL_POLYGON);glVertex2f(cos(DEG_TO_RAD*theta), sin(DEG_TO_RAD*theta));glColor3f(r, 0,0);glVertex2f(cos(DEG_TO_RAD*(theta+90)), sin(DEG_TO_RAD*(theta+90)));glColor3f(0, 0,b);glVertex2f(cos(DEG_TO_RAD*(theta+180)), sin(DEG_TO_RAD*(theta+180)));glColor3f(0, g,0);glVertex2f(cos(DEG_TO_RAD*(theta+270)), sin(DEG_TO_RAD*(theta+270)));glColor3f(r, g,b);glEnd();glutSwapBuffers();}void spinDisplay (void) //转动弧度设置{theta = theta +0.09;if (theta > 360.0)theta = theta - 360.0;glutSetWindow(singleb);glutPostWindowRedisplay(singleb);glutSetWindow(doubleb);glutPostWindowRedisplay(doubleb);}void spinDisplay1(void){glutPostRedisplay();}void myReshape(int w, int h){glViewport(0, 0, w, h); //指定平面上一个矩形裁剪区域,glMatrixMode(GL_PROJECTION);glLoadIdentity();if (w <= h)gluOrtho2D(-1.,1.,-1.*(GLfloat)h/(GLfloat)w,1.*(GLfloat)h/(GLfloat)w);elsegluOrtho2D(-1.*(GLfloat)w/(GLfloat)h, 1.*(GLfloat)w/(GLfloat)h, -1., 1.); }void mouse(int button,int state,int x,int y) //鼠标定义{ switch(button){case GLUT_LEFT_BUTTON:if(state == GLUT_DOWN ){ glutIdleFunc(spinDisplay1);}break;case GLUT_RIGHT_BUTTON:if(state == GLUT_DOWN)glutIdleFunc(spinDisplay);break;default:}}void main(int argc, char** argv) //主函数{glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);glutInitWindowPosition(100, 100);glutInitWindowSize(500, 500);singleb=glutCreateWindow("spinning square");glClearColor(1.0, 1.0, 1.0, 1.0);glutDisplayFunc(display);glutReshapeFunc(myReshape);glutIdleFunc(spinDisplay);glutMouseFunc(mouse);glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);glutInitWindowPosition(600, 100);glutInitWindowSize(500, 500);doubleb=glutCreateWindow("spinning square");glClearColor(1.0, 1.0, 1.0, 1.0);glutDisplayFunc(display);glutReshapeFunc(myReshape);glutIdleFunc(spinDisplay);glutMouseFunc(mouse);glutMainLoop();}2、OpenGL三维观察综合实验对于绘制的立方体(也可以自己拟定)通过键盘移动视点,利用鼠标或键盘控制立方体的旋转方向,从不同角度观察各面颜色不同的立方体,通过本实验加深理解计算机图形学中的三维图形绘制流程的工作原理和OpenGL三维观察流程及相应的函数实现。

计算机形学的纹理映射

计算机形学的纹理映射

计算机形学的纹理映射计算机图形学中的纹理映射是一种常见且广泛应用的技术,用于增强三维模型的真实感和细节。

本文将探讨纹理映射的概念、原理和应用,并分析其在计算机图形学领域中的重要性。

一、概述纹理映射是一种将二维图像贴附到三维模型表面的过程。

它通过在三维模型的表面上粘贴纹理图像来模拟真实世界中的材质和细节。

纹理映射可以使平凡的三维模型变得生动,并为渲染引擎提供更真实的光照效果。

二、纹理映射的原理纹理映射的原理可简单描述为以下三个步骤:1. 纹理坐标的计算:为了将二维纹理贴附到三维模型表面上,首先需要计算每个顶点的纹理坐标。

纹理坐标是一个二维向量,指示了纹理图像中的像素位置。

2. 纹理插值:一旦获得了每个顶点的纹理坐标,渲染引擎会根据每个像素的位置在顶点之间进行插值计算,以确定其在纹理图像中的位置。

这样可以确保纹理图像均匀地覆盖整个三维表面。

3. 纹理采样:根据插值计算的纹理坐标,渲染引擎从纹理图像中采样像素值。

采样过程将决定每个像素的颜色和纹理特征。

三、纹理映射的应用纹理映射在计算机图形学中有广泛的应用。

以下是几个常见的应用领域:1. 视觉效果:纹理映射可用于创建逼真的视觉效果,如岩石、树木的表面纹理。

通过将真实世界的图像应用到模型上,可以使其看起来更加真实。

2. 游戏开发:游戏中的角色、场景和物体通常都需要进行纹理映射。

纹理映射可以为游戏提供更好的视觉效果,并增加游戏的沉浸感。

3. 虚拟现实:纹理映射是虚拟现实技术中不可或缺的一部分。

通过在虚拟环境中应用纹理,可以增强用户感知,使其更好地融入虚拟世界。

4. 增强现实:纹理映射在增强现实应用中也扮演着重要角色。

通过在现实世界中投射纹理,可以实现虚拟物体与真实世界的交互。

结论纹理映射是计算机图形学中的重要技术之一,通过将二维纹理应用于三维模型的表面,可以增强模型的真实感和细节。

它在视觉效果、游戏开发、虚拟现实和增强现实等领域都有广泛应用。

纹理映射的原理和应用需要综合考虑,以确保最佳的效果和性能。

计算机图形学第五次实验报告

计算机图形学第五次实验报告

《计算机图形学》实验报告实验十一真实感图形一、实验教学目标与基本要求初步实现真实感图形, 并实践图形的造型与变换等。

二、理论基础运用几何造型, 几何、投影及透视变换、真实感图形效果(消隐、纹理、光照等)有关知识实现。

1.用给定地形高程数据绘制出地形图;2.绘制一(套)房间,参数自定。

三. 算法设计与分析真实感图形绘制过程中, 由于投影变换失去了深度信息, 往往导致图形的二义性。

要消除这类二义性, 就必须在绘制时消除被遮挡的不可见的线或面, 习惯上称之为消除隐藏线和隐藏面, 或简称为消隐, 经过消隐得到的投影图称为物体的真实图形。

消隐处理是计算机绘图中一个引人注目的问题, 目前已提出多种算法, 基本上可以分为两大类:即物体空间方法和图象空间方法。

物体空间方法是通过比较物体和物体的相对关系来决定可见与不可见的;而图象空间方法则是根据在图象象素点上各投影点之间的关系来确定可见与否的。

用这两类方法就可以消除凸型模型、凹形模型和多个模型同时存在时的隐藏面。

1).消隐算法的实现1.物体空间的消隐算法物体空间法是在三维坐标系中, 通过分析物体模型间的几何关系, 如物体的几何位置、与观察点的相对位置等, 来进行隐藏面判断的消隐算法。

世界坐标系是描述物体的原始坐标系, 物体的世界坐标描述了物体的基本形状。

为了更好地观察和描述物体, 经常需要对其世界坐标进行平移和旋转, 而得到物体的观察坐标。

物体的观察坐标能得到描述物体的更好视角, 所以物体空间法通常都是在观察坐标系中进行的。

观察坐标系的原点一般即是观察点。

物体空间法消隐包括两个基本步骤, 即三维坐标变换和选取适当的隐藏面判断算法。

选择合适的观察坐标系不但可以更好地描述物体, 而且可以大大简化和降低消隐算法的运算。

因此, 利用物体空间法进行消隐的第一步往往是将物体所处的坐标系转换为适当的观察坐标系。

这需要对物体进行三维旋转和平移变换。

常用的物体空间消隐算法包括平面公式法、径向预排序法、径向排序法、隔离平面法、深度排序法、光线投射法和区域子分法。

图形学实验报告

图形学实验报告

图形学实验报告图形学实验报告概述:在本次图形学实验中,我们将探索和学习计算机图形学的基本概念和技术。

通过实验,我们深入了解了图形学的原理和应用,以及如何使用计算机生成和处理图像。

实验一:像素和颜色在这个实验中,我们学习了图像是由像素组成的,每个像素都有自己的颜色值。

我们使用了Python编程语言和PIL库来创建一个简单的图像,并设置了不同的像素颜色。

通过改变像素的颜色值,我们可以创建出各种各样的图像效果。

实验二:坐标系统和变换在这个实验中,我们学习了坐标系统和图形变换。

我们使用OpenGL库来创建一个简单的二维图形,并通过平移、旋转和缩放等变换操作来改变图形的位置和形状。

这些变换操作使我们能够在屏幕上创建出各种不同的图案和效果。

实验三:线段和多边形在这个实验中,我们学习了如何使用线段和多边形来绘制图形。

我们使用了Bresenham算法来绘制直线,并学习了如何使用多边形填充算法来填充图形。

通过这些技术,我们可以创建出更加复杂和精细的图像。

实验四:光照和阴影在这个实验中,我们学习了光照和阴影的原理和应用。

我们使用了光照模型来模拟光线的传播和反射,以及计算物体的明暗效果。

通过调整光照参数和材质属性,我们可以创建出逼真的光照和阴影效果。

实验五:纹理映射和渲染在这个实验中,我们学习了纹理映射和渲染的概念和技术。

我们使用了纹理映射来将图像贴到三维物体表面,以增加物体的细节和真实感。

通过渲染技术,我们可以模拟光线的折射和反射,以及创建出逼真的材质效果。

实验六:三维建模和动画在这个实验中,我们学习了三维建模和动画的基本原理和方法。

我们使用了三维建模工具来创建三维模型,并学习了如何使用关键帧动画来实现物体的运动和变形。

通过这些技术,我们可以创建出逼真的三维场景和动画效果。

总结:通过这次图形学实验,我们深入了解了计算机图形学的原理和应用。

我们学习了像素和颜色、坐标系统和变换、线段和多边形、光照和阴影、纹理映射和渲染,以及三维建模和动画等技术。

计算机图形学大作业报告

计算机图形学大作业报告

云南大学软件学院期末课程报告Final Course ReportSchool of Software, Yunnan University个人成绩序号学号姓名成绩1学期: 2009年秋季学期课程名称: 计算机图形学任课教师:实践题目: 创建旋转体小组长:联系电话:电子邮件:2009-2010学年上学期计算机图形学成绩考核表年级:专业:软件工程学号:姓名:本人所做工作:创建旋转体总结报告(GB8567——88)1引言 ............................................................................................................... 错误!未定义书签。

1.1编写目的............................................................................................. 错误!未定义书签。

1.2背景..................................................................................................... 错误!未定义书签。

1.3定义..................................................................................................... 错误!未定义书签。

1.4参考资料............................................................................................. 错误!未定义书签。

2实际开发结果................................................................................................ 错误!未定义书签。

计算机图形学实验报告--纹理映射

计算机图形学实验报告--纹理映射

glRotatef(x,1.0f,0.0f,0.0f); glRotatef(y,0.0f,1.0f,0.0f); glRotatef(z,0.0f,1.0f,1.0f);
// 在 X 轴上旋转立方体 // 在 Y 轴上旋转立方体 // 在 YZ 轴上旋转立方体
glBindTexture(GL_TEXTURE_2D, texture[0]); glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); glEnd(); glBindTexture(GL_TEXTURE_2D, texture[4]); glBegin(GL_QUADS); // Left Face glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
//Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit if (TextureImage[0]=LoadBMP("Data/Crate.bmp")) { Status=TRUE; // Set The Status To TRUE // Create The Texture
if (TextureImage[0]) {if (TextureImage[0]->data) {
// If Texture Exists // If Texture Image Exists

计算机图形学实验报告-实验5Phong光照模型

计算机图形学实验报告-实验5Phong光照模型

计算机图形学实验报告班级计算机工硕班学号 **********姓名王泽晶实验五: Phong光照模型实验目的通过本次试验,学生可以掌握简单光照明模型的计算,以及真实感绘制中三维场景搭建的初步知识。

实验内容:对给定的光源、相机状态,对球进行Phong光照明模型绘制。

搭建三维场景:a)在三维空间中摆放1个球,半径为R,默认为50 ,摆放位置为(0,0,0)b)球的材质默认值为Ka = (0.1,0.1,0.1), Kd = (0,0,0.8), Ks = 0.2, n = 10c)视点方向初始为(0,0,1),光源方向初始为(1,1,1)d)视口设置为x0 = -100, y0 = -75, w = 200, h = 150使用phong模型绘制场景试验步骤:添加成员函数,编写成员数代码为override public function computeIntersection( viewStart:Vec3, viewDir:Vec3):Boolean {// See /geometry/sphereline/var viewEnd:Vec3 = viewStart.add(viewDir);var A:Number = Math.pow(viewEnd.getVec(0) - viewStart.getVec(0), 2)+Math.pow(viewEnd.getVec(1) - viewStart.getVec(1), 2) +Math.pow(viewEnd.getVec(2) - viewStart.getVec(2), 2);var B:Number =((viewEnd.getVec(0) - viewStart.getVec(0)) * (viewStart.getVec(0) - _position.getVec(0)) +(viewEnd.getVec(1) - viewStart.getVec(1)) * (viewStart.getVec(1) -_position.getVec(1)) +(viewEnd.getVec(2) - viewStart.getVec(2)) * (viewStart.getVec(2) -_position.getVec(2))) * 2.0;var C:Number = Math.pow(_position.getVec(0) - viewStart.getVec(0), 2) + Math.pow(_position.getVec(1) - viewStart.getVec(1), 2) +Math.pow(_position.getVec(2) - viewStart.getVec(2), 2) - _radius*_radius;// Solve C + Bt + At^2 = 0var delta:Number = B*B - 4*A*C;if ( delta<0.0 || A==0.0 ) return false;// We don't consider whether 0<t<1 here because real viewer is at infinite place var t1:Number = (-B + Math.sqrt(delta)) / (2*A);var t2:Number = (-B - Math.sqrt(delta)) / (2*A);if ( t1<t2 )point = viewStart.multiplyk(1.0 - t1).add(viewEnd.multiplyk(t1));elsepoint = viewStart.multiplyk(1.0 - t2).add(viewEnd.multiplyk(t2));normal = Vec3.normalize(point.minus(_position));return true;}public var _width :Number =0.0;public var _height:Number = 0.0;public var data:Array = new Array();protected function group1_creationCompleteHandler(event:FlexEvent):void{draw();}public function draw():void{graphics.clear();if(txtViewDir.text == "")return;var ary:Array = txtViewDir.text.split(",");var flag:Boolean = false;for(var i:int= 0;i<ary.length;i++){if(ary[i] == "" || isNaN(ary[i])){flag = true;break;}}if(flag)txtViewDir.setStyle("color",0xff0000);return;}txtViewDir.setStyle("color",0x000000);var viewDir:Vec3 = new Vec3(Number(ary[0]), Number(ary[1]), Number(ary[2]));ary = txtLight.text.split(",");flag = false;for(i= 0;i<ary.length;i++){if(ary[i] == "" || isNaN(ary[i])){flag = true;break;}}if(flag){txtLight.setStyle("color",0xff0000);return;}txtLight.setStyle("color",0x000000);var light:Light = new Light();light.direction = new Vec3(Number(ary[0]), Number(ary[1]),Number(ary[2])).negative();light.ambient = new Vec3(Number(ary[0]), Number(ary[1]), Number(ary[2]));light.intensity = new Vec3(Number(ary[0]), Number(ary[1]), Number(ary[2]));var material:Material = new Material();material.diffuse =new Vec3(0.0, 0.0, 0.8);material.specular =new Vec3(0.2, 0.2, 0.2);material.ambient =new Vec3(0.1, 0.1, 0.1);data = createSceneImage( 200, 150, viewDir, light, material );drawImg();}public function drawImg():void{for(var y:int = 0 ;y<150;y++)for(var x:int =0;x<200;x++){var index:int = (y*200 + x) * 3;var r:Number = data[index+0];var g:Number = data[index+1];var b:Number = data[index+2];var cl:uint =(r << 16) | (g << 8) | b;this.graphics.beginFill(cl)this.graphics.drawCircle(x,y,1);this.graphics.endFill();}}}public function allocateBuffer( width:int,height: int ):Array{var data:Array = new Array();data.length = width * height * 3;_width = width;_height = heightreturn data;}public function createSceneImage( width:int,height: int ,viewDir:Vec3, light:Light, material:Material ):Array{var data:Array = new Array();var sphere:SphereObject = new SphereObject(50.0);sphere.setPosition(new Vec3(0.0, 0.0, 0.0) );sphere.setMaterial( material );var halfW:int = width / 2var halfH:int = height / 2;for ( var y:int=0; y<height; ++y ){for ( var x:int=0; x<width; ++x ){var viewStart:Vec3 = new Vec3(Number(x - halfW), Number(y - halfH), 0.0);if ( puteIntersection(viewStart, viewDir) )sphere.color = puteColor(light, viewDir, sphere.normal);elsesphere.color = new Vec3(0.1, 0.1, 0.1);var index:int = (y*width + x) * 3;data[index+0] = (sphere.color.getVec(0) * 255.0);data[index+1] = (sphere.color.getVec(1) * 255.0);data[index+2] = (sphere.color.getVec(2) * 255.0);}}return data;}protected function button1_clickHandler(event:MouseEvent):void {// TODO Auto-generated method stubdraw();}编译运行得到如下结果:。

计算机图形学实验报告

计算机图形学实验报告

实验结果与结论
• 在本次实验中,我们成功地实现了复杂场景的渲染,得到了具有较高真实感和视觉效果的图像。通过对比 实验前后的效果,我们发现光线追踪和着色器的运用对于提高渲染质量和效率具有重要作用。同时,我们 也发现场景图的构建和渲染脚本的编写对于实现复杂场景的渲染至关重要。此次实验不仅提高了我们对计 算机图形学原理的理解和实践能力,也为我们后续深入研究渲染引擎的实现提供了宝贵经验。
2. 通过属性设置和变换操作,实现了对图形的定 制和调整,加深了对图形属性的理解。
4. 实验的不足之处:由于时间限制,实验只涉及 了基本图形的绘制和变换,未涉及更复杂的图形 处理算法和技术,如光照、纹理映射等。需要在 后续实验中进一步学习和探索。
02
实验二:实现动画效果
实验目的
掌握动画的基本原 理和实现方法
04
实验四:渲染复杂场景
实验目的
掌握渲染复杂场景的基本流程和方法 理解光线追踪和着色器在渲染过程中的作用
熟悉渲染引擎的实现原理和技巧 提高解决实际问题的能力
实验步骤
• 准备场景文件 • 使用3D建模软件(如Blender)创建或导入场景模型,导出为常用的3D格式(如.obj或.fbx)。 • 导入场景文件 • 在渲染引擎(如Unity或Unreal Engine)中导入准备好的场景文件。 • 构建场景图 • 根据场景的层次结构和光照需求,构建场景图(Scene Graph)。 • 设置光照和材质属性 • 为场景中的物体设置光照和材质属性(如漫反射、镜面反射、透明度等)。 • 编写渲染脚本 • 使用编程语言(如C或JavaScript)编写渲染脚本,控制场景中物体的渲染顺序和逻辑。 • 运行渲染程序 • 运行渲染程序,观察渲染结果。根据效果调整光照、材质和渲染逻辑。 • 导出渲染图像 • 将渲染结果导出为图像文件(如JPEG或PNG),进行后续分析和展示。

纹理映射方法

纹理映射方法

纹理映射方法纹理映射是计算机图形学中一种重要的技术,它可以将纹理图像应用于三维对象表面,从而增强三维对象的视觉效果,提高视觉逼真度。

本文将介绍纹理映射的基本原理、方法、应用和实现技术。

一、纹理映射的基本原理纹理映射是一种将纹理图像应用于三维对象表面的技术,通过将纹理图像映射到三维对象表面,可以实现对三维对象的视觉效果进行增强。

纹理映射的基本原理是将纹理坐标系与三维对象表面坐标系进行对应,将纹理图像上的像素点映射到三维对象表面上的对应点,从而实现纹理的映射。

1. 简单纹理映射简单纹理映射是最基本的纹理映射方法,它只考虑了纹理坐标系和对象表面坐标系之间的简单对应关系,没有考虑纹理的缩放、扭曲和剪切等问题。

这种方法适用于简单的纹理应用场景。

2. 仿射变换纹理映射仿射变换纹理映射是在简单纹理映射的基础上,对纹理图像进行仿射变换,从而实现更复杂的纹理效果。

可以通过调整仿射变换矩阵来控制纹理的缩放、旋转、扭曲等效果,从而实现对纹理图像的灵活应用。

3. 贴花纹理映射贴花纹理映射是一种将多个纹理合并在一起的方法,可以通过在三维对象表面多次应用不同纹理来实现更加丰富的视觉效果。

可以通过调整贴花矩阵和控制参数来控制不同纹理之间的混合方式,从而实现更加自然的效果。

4. 多层纹理映射多层纹理映射是将多个纹理叠加在一起的方法,可以通过在不同的层上应用不同的纹理来实现更加丰富的视觉效果。

可以通过调整叠加顺序和参数来控制不同纹理之间的融合效果,从而实现更加自然的视觉效果。

三、纹理映射的应用1. 自然景物仿真纹理映射可以用于模拟自然景物的外观,通过将自然景物图像应用于三维模型表面,可以使其看起来更加逼真。

例如,可以将树叶、石头、水波等自然景物图像应用于三维模型表面,从而使其看起来更加自然。

2. 特效表现纹理映射可以用于表现各种特效,例如火焰、烟雾、水纹等。

可以通过将特效图像应用于三维模型表面,从而使其看起来更加真实。

3. 游戏开发纹理映射在游戏开发中有着广泛的应用,可以通过将游戏场景中的物体表面贴上纹理图像,来提高游戏的视觉效果和真实感。

图形学实验报告范文

图形学实验报告范文

图形学实验报告范文计算机图形学实验报告书姓名:班级:学号:中南大学软件学院二0一一年六月一.实验的任务、性质与目的计算机图形学是软件工程专业的一门专业技术课程。

计算机图形学应用于生产、工程、文化和艺术等领域,该课程对于培养和提高学生的算法设计和实现能力具有非常重要的意义。

该课程以培养学生算法设计与实现的能力为目标,通过课堂教学和实验,使学生了解、掌握计算机图形学的基本知识和关键技术、了解和熟悉计算机图形学的方法、工具和环境。

二.基本原理实验主要基于如下知识和内容:1.实验环境配置、基本图元绘制;2.绘制抛物线和正弦曲线;3.图形变换;4.颜色和光照,绘制旋转抛物面;5.显示列表;6.纹理映射;7.复杂图形绘制,绘制Bezier曲线,Hermite曲线;8.复杂图形绘制,绘制Bezier曲面。

三.实验选题与基本要求1、实验环境配置、基本图元绘制配置基本实验环境、安装软件包、建立工程和绘制基本图元,要求学会点、线、三角形、四边形的绘制方法,学会消息传递和响应机制,用一个实例完成上述要求。

2、绘制抛物线和正弦曲线计算抛物线和正弦曲线,将结果存放在一个数组中,再用OpenGL函数绘制相应的图形。

3、图形变换要求学会投影、视口变换、旋转、平移和缩放的编程方法,用一个实例完成上述要求。

4颜色和光照要求学会光源设置、材质设置和法向量设置,用一个实例(如旋转抛物面)完成上述要求。

5、显示列表要求学会用显示列表输出文字和图形,用一个实例完成上述要求。

6、纹理映射要求学会将纹理图像映射到物体表面,用一个实例完成上述要求。

7、复杂图形绘制要求学会Bezier曲线和Hermite曲线的绘制方法。

8、复杂图形绘制绘制Bezier曲面,要求设置光源、材质和法向量,并进行纹理映射,用键盘控制是否进行纹理映射。

四.实验内容和步骤1、实验环境配置、基本图元绘制配置基本实验环境、安装软件包、建立工程和绘制基本图元,要求学会点、线、三角形、四边形的绘制方法,学会消息传递和响应机制,用一个实例完成上述要求。

-计算机图形学实验报告

-计算机图形学实验报告

计算机图形学实验报告姓名:_____________学号:_____________班级:_____________时间:_____2016年12月_________实验一OpenGL编程与图形绘制1.实验目的了解OpenGL编程,并熟悉OpenGL的主要功能、绘制流程和基本语法。

学会配置OpenGL环境,并在该环境中编程绘图。

2.实验内容OpenGL的主要功能:模型绘制、模型观察、颜色模式、光照应用、图像效果增强、位图和图像处理、纹理映射、实时动画和交互技术。

OpenGL的绘制流程分为两个方面:一个完整的窗口系统的OpenGL图形处理系统的结构为:最底层为图形硬件,第二层为操作系统,第三层为窗口系统,第四层为OpenGL,最上面的层为应用软件;OpenGL命令将被放在一个命令缓冲区中,这样命令缓冲区中包含了大量的命令、顶点数据和纹理数据。

当缓冲区被清空时,缓冲区中的命令和数据都将传递给流水线的下一个阶段。

OpenGL的基本语法中相关库有:OpenGL核心库:gl、OpenGL实用程序库:glu、OpenG 编程辅助库:aux、OpenGL实用程序工具包(OpenGL utility toolkit,GLUT):glut、Windows 专用库:wgl。

OpenGL的基本语法中命名规则为:OpenGL函数都遵循一个命名约定,即采用以下格式:<库前缀><根命令〉〈可选的参数个数><可选的参数类型〉。

了解了上述基础知识后,配置好OpenGL环境,然后在该环境中编程练习图形的绘制,本次实验主要是对点的绘制、直线的绘制和多边形面的绘制。

3.实验代码及结果3。

1点的绘制:#include〈gl/glut。

h>void Initial(void){glClearColor(1.0f,1.0f,1。

0f,1.0f);//设置窗口背景颜色为白色glMatrixMode(GL_PROJECTION); //指定设置投影参数gluOrtho2D(0。

计算机图形学实验报告

计算机图形学实验报告

计算机图形学实验报告引言计算机图形学是计算机科学中一个重要的研究领域,它涉及了计算机图像的生成、处理和显示等方面的技术。

本次实验旨在通过实际操作学习计算机图形学的相关知识,并利用图形学算法实现一些有趣的效果。

实验目的1. 了解计算机图形学的基本概念和发展历程;2. 掌握图形学中的基本几何变换,如平移、旋转和缩放等;3. 实现一些常见的图形学算法,如光照模型、三角形剪裁和绘制等。

实验准备在开始实验之前,我们需要准备一些实验所需的工具和环境。

首先,确保计算机上安装了图形学相关的软件,如OpenGL或DirectX等。

其次,为了编写和运行图形学程序,我们需要掌握基本的编程技巧,如C++或Python语言,并了解相关的图形库和API。

实验过程1. 实现平移、旋转和缩放首先,我们需要掌握图形学中的基本几何变换,如平移、旋转和缩放。

通过矩阵运算,我们可以很方便地实现这些变换。

例如,对于一个二维点P(x, y),我们可以通过以下公式实现平移:P' = T * P其中,P'是平移后的点,T是平移矩阵。

类似地,我们可以用旋转矩阵和缩放矩阵来实现旋转和缩放效果。

2. 实现光照模型光照模型是指在计算机图形学中模拟现实光照效果的一种方法。

它可以提供更真实的视觉效果,让计算机生成的图像更加逼真。

其中,常用的光照模型有环境光照、漫反射光照和镜面光照等。

通过计算每个像素的光照强度,我们可以实现阴影效果和光源反射等功能。

3. 实现三角形剪裁三角形剪裁是计算机图形学中一种常用的几何算法,用于确定哪些像素需要绘制,哪些像素需要剔除。

通过对三角形的边界和视口进行比较,我们可以快速计算出剪裁后的三角形顶点,以提高图形渲染的效率。

4. 实现图形绘制图形绘制是计算机图形学中的核心内容,它包括了点、线和面的绘制等。

通过设定顶点坐标和属性(如颜色、纹理等),我们可以使用算法绘制出各种形状的图像。

其中,常用的绘制算法有Bresenham算法和扫描线算法等。

计算机图形学实验报告

计算机图形学实验报告

计算机图形学实验报告计算机图形学实验报告引言计算机图形学是研究计算机生成和处理图像的学科,它在现代科技和娱乐产业中扮演着重要的角色。

本实验报告旨在总结和分享我在计算机图形学实验中的经验和收获。

一、实验背景计算机图形学实验是计算机科学与技术专业的一门重要课程,通过实践操作和编程,学生可以深入了解图形学的基本原理和算法。

本次实验主要涉及三维图形的建模、渲染和动画。

二、实验内容1. 三维图形建模在实验中,我们学习了三维图形的表示和建模方法。

通过使用OpenGL或其他图形库,我们可以创建基本的几何体,如立方体、球体和圆柱体,并进行变换操作,如平移、旋转和缩放。

这些基本操作为后续的图形处理和渲染打下了基础。

2. 光照和着色光照和着色是图形学中重要的概念。

我们学习了不同的光照模型,如环境光、漫反射和镜面反射,并了解了如何在三维场景中模拟光照效果。

通过设置材质属性和光源参数,我们可以实现逼真的光照效果,使物体看起来更加真实。

3. 纹理映射纹理映射是一种将二维图像映射到三维物体表面的技术。

通过将纹理图像与物体的顶点坐标相对应,我们可以实现更加细致的渲染效果。

在实验中,我们学习了纹理坐标的计算和纹理映射的应用,使物体表面呈现出具有纹理和细节的效果。

4. 动画和交互动画和交互是计算机图形学的重要应用领域。

在实验中,我们学习了基本的动画原理和算法,如关键帧动画和插值技术。

通过设置动画参数和交互控制,我们可以实现物体的平滑移动和变形效果,提升用户体验。

三、实验过程在实验过程中,我们首先熟悉了图形库的使用和基本的编程技巧。

然后,我们按照实验指导书的要求,逐步完成了三维图形建模、光照和着色、纹理映射以及动画和交互等任务。

在实验过程中,我们遇到了许多挑战和问题,但通过不断的尝试和调试,最终成功实现了预期的效果。

四、实验结果通过实验,我们成功实现了三维图形的建模、渲染和动画效果。

我们可以通过键盘和鼠标控制物体的移动和变形,同时观察到真实的光照效果和纹理映射效果。

图形学大作业范例

图形学大作业范例

滁州学院图形学设计报告课程名称:计算机机图形学设计题目:简单图形绘制软件的设计与实现系别:计算机科学与技术系专业:姓名:起止日期:2011年5月20日~ 2011年6月20日指导教师:计算机科学与技术系二00九年制目录⒈引言 (1)⒉需求分析 (1)⒊概要设计 (1)3.1概要设计实现的内容 (1)3.2函数的功能描述 (1)⒋详细设计 (2)⒌调试与操作说明 (4)⒍课程设计总结与体会 (6)⒎致谢 (6)⒏参考文献 (6)⒐附录 (7)课程设计的主要内容⒈引言本学期系统的学习了计算机图形学,在学期末按课程要求对其进行设计,本课程主要内容包括以图形学算法为目标,深入研究。

续而策划设计实现一个能够表现计算机图形学算法原理的或完整过程的演示系统,并能从某些方面做出评价和改进意见。

通过完成一个完整程序,经历策划、设计、开发、总结。

达到通过本课程设计,使自己巩固和实践计算机图形学课程中的理论和算法;掌握基本图形显示程序设计方法,及二维和三维图形变换等程序设计方法,学习表现计算机图形学算法的技巧。

同时以达到培养认真学习积极探索的精神。

⒉需求分析图形学设计报告题目:地球与卫星模拟图。

图形学设计报告任务及要求:以计算机图形学的研究内容、发展与应用,实现图形输入输出设备,图形显示原理,图形软件标准,基本图形生成算法,图形几何变换与裁剪,自由曲线和曲面,三维实体造型,光照模型,颜色模型,光线跟踪,纹理模拟,常用的计算机动画技术和软件等。

课程设计思想:绘制一个地图与卫星模拟图,在此中综合实现本学期中学习到OpenGL编程中大部分的方法与操作。

软硬件运行环境:Microsoft Windows XP。

工发工具:VC++ 6.0。

⒊概要设计3.1概要设计实现的内容利用VC++ 6.0完成了一个地图与卫星模拟图,该模拟图能实现基本的图形操作功能。

通过本次实验,应该了解图形学里使用OpenGL的一些基于操作,了解直线、矩形、圆和Bezier曲线和曲面等图形的绘制原理、旋转原理、移动原理和缩放原理等。

计算机图形学实验报告

计算机图形学实验报告
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
pView->m_ClearColorRed = (float)GetRValue(pApp->m_OptionColorGlBack) /255.0f;
pView->m_ClearColorGreen = (float)GetGValue(pApp->m_OptionColorGlBack) /255.0f;
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CFormCommandView, CFormView)
//{{AFX_MSG_MAP(CFormCommandView)
ON_WM_PAINT()
ON_WM_LBUTTONUP()
ON_BN_CLICKED(IDC_RADIO_MODEL_1, OnRadioModel1)

计算机图形学报告

计算机图形学报告

. . . . .. . 优质资料 .. 计算机图形学 (2017年秋季学期)实验 报 告系别:计算机科学与技术 班级: : 学号:实验名称:2-真实感图形绘制2020-11-132/3《计算机图形学》实验报告实验名称真实感图形绘制 实验序号 2实验日期 2017.12.13 实验人 一、实验目的、要求与环境1.目的:通过实验,学生应掌握通过计算机程序进行真实感图形绘制的基本原理,特别是对三维显示对象进行纹理映射的基本方法,将理论和实际应用切实结合起来。

2.要求:对一个三维立方体进行旋转,对其6个不同的面进行6个不同图像的纹理映射,并进行投影变换与显示,分析增强后的视觉效果,提交实验报告。

3.环境:Windows 7操作系统Microsoft Visual Studio 2005OpenGL 函数库4. 自带位图文件(换成你自己的图像文件):总成绩:评语:日期:2020-11-1311/12二、实验容与步骤1. 准备相关图像文件。

2. 进行立方体各面图像与旋转速度的大体设计。

3.在Windows 7 操作系统上,打开Microsoft Visual Studio 2005,编写相关程序,完成程序主体框架结构。

4.编写六面体显示相关的程序代码。

5.编写六面体旋转相关的程序代码。

6.编写深度检测相关的程序代码。

7. 编写纹理载入功能的相关程序代码。

8. 编写纹理参数定义功能的相关程序代码。

9. 编写纹理映射功能的相关程序代码。

10.对程序进行相关调试,修改程序,去除其中的BUG 。

11. 观察纹理映射后的六面体的旋转显示,与预想的结果进行对比,修改相关程序参数。

12.截屏,保留实验结果,进行实验结果分析,并撰写实验报告。

2020-11-13 2/32020-11-13 11/12四、编译过程截图五、实验结果与分析(下面是一个例子,换上你自己的图)实验结果:实验分析程序通过glBindTexture(GL_TEXTURE_2D, lastTextureID);语句,完成了恢复之2020-11-13 2/32020-11-13 11/122020-11-13 2/32020-11-13 11/122020-11-13 2/3。

计算机图形学实验报告

计算机图形学实验报告
等领域。
实验内容:通 过实验掌握光 照模型的原理 和实现方法, 了解不同光照 模型对物体表 面光照效果的
影响。
纹理映射
定义:将纹理图像映射到三维物 体表面的过程
方法:根据物体表面的几何形状, 将纹理图像按照一定的规则和算 法进行拉伸、扭曲和拼接等操作, 最终覆盖在物体表面
添加标题
添加标题
添加标题
添加标题
提高编程能力
熟练使用相关编程语言和工 具
掌握计算机图形学的基本原 理和算法
学会分析和解决图形学中的 问题
提高编程技巧和解决问题的 能力
02
实验内容
图形渲染流程
加载场景和模型 设置相机和光源 几何着色器处理顶点数据 光栅化着色器生成像素数据
OpenGL基本操作
创建窗口:使用OpenGL创建 窗口,设置渲染上下文
熟悉图形渲染流程
了解图形渲染的 基本原理和流程
掌握图形渲染的 关键技术和技巧
熟悉图形渲染的 应用场景和优势
Hale Waihona Puke 掌握图形渲染的 未来发展方向和 趋势
掌握OpenGL的使用
学习OpenGL的基本概念和原理 掌握OpenGL的编程接口和开发流程 理解OpenGL在计算机图形学中的应用和优势 学会使用OpenGL进行基本的图形渲染和交互操作
目的:增加物体的表面细节和真 实感
应用:游戏开发、电影制作、虚 拟现实等领域
03
实验过程
实验环境搭建
安装操作系统: 选择适合的操
作系统,如 Windows或
Linux
安装开发工具: 安装所需的集
成开发环境 (IDE)和编
译器
安装图形库: 安装OpenGL、
DirectX或其 他的图形库

计算机图形学中的纹理映射技术研究

计算机图形学中的纹理映射技术研究

计算机图形学中的纹理映射技术研究计算机图形学是通过计算机技术的应用来实现图像的创作和处理。

其中最重要的技术之一就是纹理映射技术。

什么是纹理映射技术?简单来说,它是将一张2D的图片投影到一个3D的模型表面上的过程。

在计算机图形学中,纹理映射技术可以用于制作游戏、电影、虚拟现实和其他计算机图形应用。

纹理映射技术有许多种方法,但最常见的方法是贴图和UV映射。

下面将分别介绍这两种纹理映射技术。

贴图技术:这种技术最简单的方式是简单地将一张2D的图片贴到3D模型的表面上。

例如,在一个3D游戏中,通过将地形贴上类似于草、岩石和水这样的图片,可以让游戏场景更加真实。

该技术的另一种重要用途是在渲染过程中实现阴影和反射效果。

比如,在一个汽车的渲染场景中,使用贴图技术可以让渲染结果更加逼真。

UV映射技术:与贴图技术相比,UV映射技术则更加复杂。

这种技术通过将2D纹理映射到3D模型的表面上,从而实现更加复杂的纹理映射。

每个3D模型都有其自己的三维坐标系。

UV映射技术是在该坐标系中创建二维坐标系,并使用它来定位2D纹理。

UV映射需要首先将模型拆分成多个部分,然后对每个部分进行2D纹理映射。

例如,对于一个二十面体球,可以将它分为近似于三角形的小三角形。

对于每个小三角形,都需要采用UV映射技术,从而将2D纹理映射到该三角形的表面上。

UV映射技术在3D游戏开发中的应用非常广泛,因为它可以实现高度逼真的游戏图像。

该技术还可以用于制作电影和其他图形相关的项目。

需要指出的是,纹理映射技术并不是完美的。

在映射过程中,有些失真和不均匀性可能会出现,从而影响纹理的质量。

此外,随着模型变得更加复杂,要进行的映射就越多,从而增加了开发的难度。

纹理映射技术在计算机图形学中的应用非常广泛,不仅仅是游戏和电影领域,还包括虚拟现实、建筑和医学等。

纹理映射技术的不断发展和进步使得计算机图形学领域拥有了更加逼真和精细的图像。

随着技术的不断发展,我们也期待着未来的计算机图形学会展现更加真实的3D图像和建模技术。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机图形学大作业报告记录(灯光纹理映射)————————————————————————————————作者:————————————————————————————————日期:大作业报告实验课程名称:计算机图形学学生姓名:班级:学院(系):学生学号:指导教师:成绩:一、目的这次大作业是作为这学期的最后的一个考核,所以必须要用到所有的本学期学过的知识,比如怎样画出三维图形,怎样在图像上在图像上添加纹理光照,怎样使用鼠标和键盘进行人机交互等。

二、主要功能模块设计1 矩阵运算模块的设计:功能描述:程序启动后,这部分功能模块会为整个应用程序提供算法支持,具体是矩阵直接的相互运算,在2D向3D转化过程中会起到很重要的作用。

代码设计:float vv(float * v1, float * v2){return v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2];}void vxv(float * n, float * v1, float * v2){n[0] = v1[1] * v2[2] - v1[2] * v2[1];n[1] = v1[2] * v2[0] - v1[0] * v2[2];n[2] = v1[0] * v2[1] - v1[1] * v2[0];}void loadIdentity(Matrix m){Matrix identity = {{1.0,0.0,0.0,0.0},{0.0,1.0,0.0,0.0},{0.0,0.0,1.0,0.0},{0.0,0.0,0.0,1.0}};for(int i = 0;i < 4; i++)for(int j = 0;j < 4; j++)m[i][j] = identity[i][j];}void preMultiply(Matrix p, Matrix m){int i , j;Matrix t;for( i = 0; i < 4; i ++)for( j = 0; j < 4; j++)t[i][j] = p[i][0] * m[0][j] + p[i][1] * m[1][j] + p[i][2] * m[2][j] + p[i][3] * m[3][j];for( i = 0; i < 4; i ++)for( j = 0; j < 4; j ++)m[i][j] = t[i][j];}2 显示图形模块的设计:功能描述:该模块主要为所要画的图形进行描述,是绘制图形的主要函数,通过调用这个功能模块就能画出用于显示给用户的图形。

代码设计://2D图形的display函数void display(){glClear(GL_COLOR_BUFFER_BIT);if(n == 1 && type ==GL_LINE_STRIP) {glBegin(GL_POINTS);glVertex2iv(vert[0]);glColor3f(0,0.5,0.5);glVertex2i(width-vert[0][0]-1,vert[0][1]);glEnd();}glColor3f(0,0.5,0.5);glBegin(GL_LINES);glVertex2i(width/2,0);glVertex2i(width/2,height-1);glEnd();glBegin(type);for(int i = 0;i<n;i++) glVertex2i(width-vert[i][0]-1,vert[i][1]);glEnd();glColor3f(1,1,0);glBegin(type);for(int i = 0;i<n;i++) glVertex2iv(vert[i]);glEnd();glutSwapBuffers();initQMesh();glutSetWindow(winid);glutPostRedisplay();}//3D图形的显示函数void modelDisplay(){glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glPushMatrix();float M[16];for(int r = 0; r < 4; r++) for(int c = 0; c < 4; c++) M[4 * c + r] = CRM[r][c];glMultMatrixf(M);glScalef(zoom,zoom,zoom);drawQMesh();glPopMatrix();glPushMatrix();glLightfv(GL_LIGHT0,GL_AMBIENT,amb);glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);glPopMatrix();glutSwapBuffers();}3 键盘敲击模块功能描述:该功能主要为两个窗体添加键盘敲击事件,在2D窗体中主要添加了反走样效果,清除所画的图,点线转化功能,对于3D窗体主要添加了投影方式的变换,光源移动的功能代码设计://2D绘制窗体的键盘敲击处理函数void keyboard(unsigned char key, int x,int y){switch(key){case'a': antialiasing = ! antialiasing;//反走样效果if(antialiasing){glEnable(GL_BLEND);glEnable(GL_LINE_SMOOTH);}else{glDisable(GL_BLEND);glDisable(GL_LINE_SMOOTH);}break;case'c': n = 0;break; //清除界面功能case'l': type = GL_LINE_STRIP;break; //绘制线功能case'v': type = GL_POINTS;break; //绘制点功能}glutPostRedisplay();}//3D显示窗体的键盘敲击事件处理函数:void modelKeyboard(unsigned char key, int x, int y){switch (key) {case'o':glMatrixMode(GL_PROJECTION);//正投影glLoadIdentity();glOrtho(-4,4,-4,4,6,14);glMatrixMode(GL_MODELVIEW);break;case'p':glMatrixMode(GL_PROJECTION);//侧投影,不过是默认的 glLoadIdentity();gluPerspective(45.0,1.0,6.0,14.0);glMatrixMode(GL_MODELVIEW);break;case'm':lightPosition[0] = lightPosition[0] - 0.5; //光源移动break;case'n':lightPosition[1] = lightPosition[1] - 0.5;break;case'z':lightPosition[2] = lightPosition[2] - 0.5;break;case'k':glDisable(GL_FOG);break;}glutPostRedisplay();}4鼠标点击模块功能描述:该功能模块主要实现了对两个窗体鼠标事件的处理,对于3D窗体实现了鼠标左键旋转,由键放大缩小的效果,2D窗体实现了左键画点,右键可以对已经存在的点改变它的位置。

代码设计://3D窗体的鼠标事件void modelMouse(int button,int state,int x,int y){switch (button){case GLUT_LEFT_BUTTON:if(state == GLUT_DOWN ){cx = x;cy = h - 1 - y;dx = dy = 0;left_button_down = true;}elseleft_button_down = false;break;case GLUT_RIGHT_BUTTON:if(state == GLUT_DOWN){cx = x;cy = h - 1 - y;right_button_down = true;}elseright_button_down = false;break;}}//2D窗体鼠标事件void mouse(int button, int state, int x ,int y){y = height - 1 - y;switch(button){case GLUT_LEFT_BUTTON:if(state == GLUT_DOWN && ! rubberbanding ){v = n++;vert[v][0] = (x < width/2) ? width/2: (x >= width) ? width - 1 : x;vert[v][1] = (y < 0) ? 0 : (y >= height) ? height -1 : y;rubberbanding = true;glutPostRedisplay();}else rubberbanding = false;break;case GLUT_RIGHT_BUTTON:if(state == GLUT_DOWN && ! rubberbanding && (v = findVertex(x,y)) != -1) {if(glutGetModifiers() == GLUT_ACTIVE_CTRL) {for (int i = v; i< n-1; i++){vert[v][0] = vert[i+1][0];vert[i][1] = vert[i+1][1];}n--;}else{vert[v][0] = (x < width/2) ? width/2 : (x >= width) ? width - 1 : x;vert[v][1] = (y < 0) ? 0 : (y >= height) ? height -1 : y;rubberbanding = true;}glutPostRedisplay();}else rubberbanding = false;break;}}功能截图:利用鼠标在界面上画出原来的图,截图如下:按住“Z”后,上方的光照变化,截图如下:按住“Y”后,下方的光照效果发生变化,截图如下:使用鼠标实现图像方向的变化,截图如下:使用鼠标实现图像大小的变化,截图如下:放大:缩小:三、心得通过对本次大作业试验的编写,更进一步了解了OpenGL的用法,从计算机图形学课程中可能收获最多的并不是图形学的一些基础知识,虽然这些很重要,但是真正有些成就感的还是用OpenGL开发出来的这些程序。

相关文档
最新文档