实验4+5-3D图形旋转+消隐
- 格式:ppt
- 大小:752.00 KB
- 文档页数:58
《计算机图形学》实验报告2011年1月实验四图形综合运用4.1实验目的1、通过本次实验,掌握三维图形的旋转等变换和消隐的基本概念和相关算法。
2、掌握凸多面体的消隐算法和实现。
3、进一步熟练和掌握编程环境中三维图形的绘制和消隐的程序设计方法。
4.2实验内容4.2.1绘制一个三维几何图形简单光照例程"light 0. cpp"利用openGL绘制模型#i nclude "glos.h"#i nclude <GL/gl.h>#i nclude <GL/glu.h>#i nclude <GL/glaux.h>void myi ni t(void);void CALLBACK myReshape(GLsizei w, GLsizei h);void CALLBACK display(void);void myi ni t(void){GLfloat light_positio n[] = { 1.0, 1.0, 1.0, 0.0 };glLightfv(GL_LIGHTO, GL_POSITION, light_positio n);glE nable(GL_LIGHTING);glE nable(GL_LIGHTO);glDepthFu nc(GL_LESS);glE nable(GL_DEPTH_TEST);}void CALLBACK display(void){glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);auxSolidSphere(1.0);glFlush();}void CALLBACK myReshape(GLsizei w, GLsizei h){glViewport(0, 0, w, h);glMatrixMode(GL_PROJECTION);glLoadIde ntity();if (w <= h)glOrtho (-1.5, 1.5, -1.5*(GLfloat)h/(GLfloat)w, 1.5*(GLfloat)h/(GLfloat)w,-10.0, 10.0);elseglOrtho (-1.5*(GLfloat)w/(GLfloat)h,1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0);4.2.1绘制一个三维几何图形简单光照例程"light 0. cpp"glMatrixMode(GL_MODELVIEW);glLoadIde ntity();void mai n(void){auxl ni tDisplayMode (AUX_SINGLE | AUX_RGBA);auxl ni tPositio n (0, 0, 500, 500);auxI nitWin dow ("Simple Lighti ng");myi ni t();auxReshapeF unc (myReshape); auxMa in Loop(display);程序运行结果:显示一个具有灰色光影的球。
计算机图形学实验报告4一、实验目的本次计算机图形学实验旨在深入了解和掌握计算机图形学中的一些关键概念和技术,通过实际操作和编程实现,提高对图形生成、变换、渲染等方面的理解和应用能力。
二、实验环境本次实验使用的软件环境为_____,编程语言为_____,硬件环境为_____。
三、实验内容1、二维图形的绘制使用基本的绘图函数,如直线、矩形、圆形等,绘制简单的二维图形。
通过设置线条颜色、填充颜色等属性,增强图形的表现力。
2、图形的几何变换实现图形的平移、旋转和缩放操作。
观察不同变换参数对图形的影响。
3、三维图形的生成构建简单的三维模型,如立方体、球体等。
应用光照和材质效果,使三维图形更加逼真。
四、实验步骤1、二维图形的绘制首先,在编程环境中导入所需的图形库和相关模块。
然后,定义绘图窗口的大小和坐标范围。
接下来,使用绘图函数按照指定的坐标和参数绘制直线、矩形和圆形。
最后,设置图形的颜色和填充属性,使图形更加美观。
2、图形的几何变换对于平移操作,通过修改图形顶点的坐标值来实现水平和垂直方向的移动。
对于旋转操作,根据旋转角度计算新的顶点坐标,实现图形的绕中心点旋转。
对于缩放操作,将图形的顶点坐标乘以缩放因子,达到放大或缩小图形的效果。
3、三维图形的生成首先,定义三维模型的顶点坐标和三角形面的连接关系。
然后,设置光照的位置、颜色和强度等参数。
接着,为模型添加材质属性,如颜色、反射率等。
最后,使用渲染函数将三维模型显示在屏幕上。
五、实验结果与分析1、二维图形的绘制成功绘制出了各种简单的二维图形,并且通过颜色和填充的设置,使图形具有了更好的视觉效果。
例如,绘制的矩形和圆形边缘清晰,颜色鲜艳,填充均匀。
2、图形的几何变换平移、旋转和缩放操作都能够准确地实现,并且变换效果符合预期。
在旋转操作中,发现旋转角度的正负会影响旋转的方向,而缩放因子的大小直接决定了图形的缩放程度。
3、三维图形的生成生成的三维模型具有一定的立体感和真实感。
利用OpenGL进行CAD三维图形消隐处理利用OpenGL进行CAD三维图形消隐处理三维图形消隐算法已比较成熟,但要普通编程人员对复杂三维图形进行消隐编程,却不是容易的事。
OpenGL图形库中提供了消隐处理函数,但消隐却不知因何原因而质量不高,如消隐时直线断断续续。
为此笔者进行了一定改进和精细消隐处理,下面介绍两种办法。
一、一般消隐这种方法为首先设置消隐使能,初始化深度缓存,设置消隐比较,直接进行绘图即可。
但此种结果是直线断断续续,时有时无,效果差。
改进只需将直线线宽加粗,若需多边形边框一同绘出,则要GL_LINES方式将边框线段重绘。
具体方法如下:glEnable(GL_DEPTH_TEST);//设置消隐使能glClearDepth(1.0);//设置初始化深度缓存值glClear(GL_DEPTH_BUFFER_BIT);//深度缓存消除gldephFunc(GL_LEQUAL);//设置消隐比较glLineWidth(2.0);//直线线宽应比多连形线宽多一倍下述设置后,即可开始绘图。
消隐能正常显示,只是直线线宽均比多边形宽一倍,图形变得粗糙,效果不十理想。
二、精细消隐处理精细消隐设计分三步:1、首先在消隐方式下对所有多边形面进行绘图,其目的是在深度缓存中写入消隐后的多边形面的Z值,并比较后再写入深度缓存,即大大简化了多边形面的Z缓存计算。
2、将直线及多边形边框直线由目标坐标转换成窗口坐标下的值,并将线段离散化为窗口坐标下的象素点,再比较象素点的窗口坐标下Z值与深度缓存值,从而将隐藏直线段消除,记录显示线段,并窗口坐标由三维换为二维。
3、消除显示缓存,重新显示二维窗口坐标下的可视线段。
这样处理,一方面极大地简化了Z缓存计算,使普通编程人员能胜任高级三维CAD软件设计,消隐显示质量高;另一方面获得的可视线段,便于纯Windows图形打印,大大地增强了OpenGL图形打印能力;此处还可便于三维图形标注。
202类似地可求得其他5个面与直线段的有效交点。
连接有效交点可得到落在裁剪窗口内的有效线段。
对于透视投影的棱台其方法类似,读者可自行推导。
3.三维中点分割裁剪法前面讨论的二维问题的中点分割裁剪方法可以直接推广到三维问题,其原理和过程是完全相同的。
对于平行投影和透视投影,仅仅是线段编码的处理和线段与体表面的交点计算不同,其他部分则完全相同。
只要对二维问题的编码数组和裁剪窗口的维数等进行修改,就可以得出对三维中点分割裁剪法的算法。
5.4.2 三维图形消隐1.消隐技术概述在现实世界中,当我们观察空间任何一个不透明的物体时,只能看到物体上朝向我们的那部分表面,而其余的表面(一般是朝向物体背面)是不可能被我们看见的。
在用计算机生成立体图形时,物体的所有部分都将被表现出来,不管是可见的还是不可见的。
这样的图形所表示的物体形状是不清楚的,甚至是不确定的。
下面这个简单例子,可以说明这一点。
图5.43(a)所示为一个立方体的线条画,它的所有的边均无一遗漏,全部画出。
但是这个立方体,可以有两种解释:其一是从立方体的左上方向下看,这时应该看到的是图5.43(b)的图形;其二是从立方体的右下方向上看,这时应该看到的是图5.43(c)的图形。
我们在观察图5.43(b)和图5.43(c)时,根据图形立即可以知道观察点及观察方向,不会产生在看到图5.43(a)时的那种二义性,这是因为这两个图都根据假定的观察点和观察方向消除了不可见线段的缘故。
图5.43 立方体线框图和消隐图为了得到一个确定的、立体感强的投影图,就需要消除隐藏线和隐藏面,也就是在给定的投影图中,确定物体哪些边、面是可见的,哪些边、面是不可见的。
并消除那些不可见的棱线和表面,这就是所谓消隐问题。
消隐问题是计算机中引人注目的难题之一。
目前,虽已提出了多种算法,但仍吸引着人们探索新的有效的解决方法。
而这方面研究工作又主要是寻求正确可靠、占用存储空间少、运算速度快的消隐算法。
图形消隐课程设计一、课程目标知识目标:1. 学生能够理解并掌握三维图形消隐的基本概念和原理;2. 学生能够识别并分类常见的三维图形消隐方法;3. 学生能够运用所学的消隐方法,分析和解决实际问题。
技能目标:1. 学生能够运用几何画板或其他绘图工具,绘制并展示三维图形消隐的过程;2. 学生能够运用计算工具,进行简单消隐算法的编程与实现;3. 学生能够通过小组合作,共同探讨并解决消隐问题,提高团队协作能力。
情感态度价值观目标:1. 学生能够认识到图形消隐在现实生活中的广泛应用,增强对数学学科的兴趣和认同;2. 学生在学习过程中,培养勇于尝试、克服困难的积极态度;3. 学生通过图形消隐的学习,体会数学美感,提高审美能力。
分析课程性质、学生特点和教学要求:本课程为初中数学课程,旨在让学生掌握图形消隐的基本知识和技能。
学生正处于好奇心强、求知欲旺盛的阶段,对新颖的图形消隐现象感兴趣。
因此,课程目标应具体、可衡量,注重实践操作和团队合作,以激发学生的学习兴趣和主动性。
课程目标分解为具体学习成果:1. 学生能够理解并解释图形消隐的基本概念;2. 学生能够独立绘制并展示三种常见的消隐方法;3. 学生能够编写简单的消隐算法,并运用计算工具实现;4. 学生能够通过小组合作,解决实际问题,提高团队协作能力;5. 学生能够体会到图形消隐的美感和数学价值,激发对数学学科的兴趣。
二、教学内容1. 引入图形消隐的概念,介绍其在现实生活中的应用,如建筑设计、游戏制作等;- 教材章节:第三章第四节“图形的消隐”2. 详细讲解三种常见图形消隐方法:隐藏面消除法、背面消隐法和深度缓冲消隐法;- 教材章节:第三章第五节“消隐方法”3. 通过几何画板演示图形消隐过程,让学生直观感受消隐效果;- 教材章节:第三章第六节“消隐效果的演示”4. 编写简单消隐算法,运用计算工具实现图形消隐;- 教材章节:第三章第七节“消隐算法及其实现”5. 小组合作,探讨并解决实际问题,如建筑物消隐、三维模型消隐等;- 教材章节:第三章实践活动“图形消隐的应用”6. 分析图形消隐在数学、艺术和科技领域的价值,提高学生的审美能力;- 教材章节:第三章总结“图形消隐的价值与意义”教学内容安排与进度:第一课时:引入图形消隐概念,介绍应用场景;第二课时:讲解三种消隐方法,演示消隐效果;第三课时:编写简单消隐算法,实现图形消隐;第四课时:小组合作,解决实际问题;第五课时:分析图形消隐的价值,进行课程总结。
实验四图像旋转1、实验原理:旋转一般是指将图像围绕某一指定点旋转一定的角度,图像旋转后会有一部分图像转出显示区域,可以截图那部分,也可以改变图像的尺寸使得图像显示完全。
本实验中利用旋转中心、旋转角度和缩放尺度来建立一个变换矩阵,通过变换矩阵对图像进行旋转。
这个方法不改变图像的大小,可以用黑色来填充图像边界外的区域,丢弃超出显示区域外的部分。
2、实验内容:计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。
旋转是图像处理的基本操作,本实验需要将一个图像逆时针旋转45度。
代码:PS=imread('room.jpg');figure(1);imshow(PS);title('原图像');[m,n,r]=size(PS);%m行数,n列数,r维数dag=45*pi/180;backgroundgray=0;a=cos(dag);b=sin(dag);processedxmin=round(a-n*b);processedxmax=round(m*a-b);processedymin=round(a+b);processedymax=round(m*b+n*a);nr=processedxmax-processedxmin+1;%行数,xnc=processedymax-processedymin+1;%列数,yprocessedimag(1:nr,1:nc,1:r)=backgroundgray;for i=1:mfor j=1:nii=round(i*a-j*b)-processedxmin+1;jj=round(i*b+j*a)-processedymin+1;for k=1:rprocessedimag(ii,jj,k)=PS(i,j,k);endendendfor i=1:nrfor j=2:nc-1for k=1:rif(processedimag(i,j,k) == backgroundgray&&processedimag(i,j-1,k)~=backgroundgray&&processedimag(i,j+1,k )~=backgroundgray)processedimag(i,j,k)=processedimag(i,j-1,k);endendendendfigure(2);imshow(processedimag/256);title('旋转后的图像');结果如图:实验五 图像放大1、实验原理:图像的放大可以用插值的方法其中一种简单的插值就是线性插值,线性插值虽然简单,却非常有效。
实验四、OpenGL透视投影与消隐1、实验目的1)了解OpenGL 图形库的功能和结构;2)学习了解OpenGL 程序的基本结构,及常用函数;3)学习使用OpenGL 透视投影与深度测试;2、实验内容1)使用OpenGL 编写一个简单的C++程序,使该程序能够绘制出透视投影的球体。
2 )在该C++程序中,更改代码,使该程序启动深度测试,实现消隐。
3、实验过程1)在系统上配置好OpenGL的环境(头文件,库文件,和链接库文件);2)使用Visual V++6.0 新建一个C++文档,并创建相应的工程;3)在文档中引入OpenGL的头文件,编辑代码实现:透视投影下,多个球体的绘制,光照的设置,球体材质设置,启动深度测试,实现球体运动时消隐。
4、实验结果窗口中显示了四个球体,三个球体围绕中心球体做不同半径,不同速度的圆周运动,单击鼠标左键关闭或开启深度测试,可观察出球体运动时,是否产生消隐。
结果截图:1.启用深度测试的球体运动:2.关闭深度测试的球体运动:5、实验代码1.#include "stdio.h"2.#include <gl/glut.h>3.#include <windows.h>4.5.//用于确定当前的深度比较测试方式6.GLenum DepthFunc = GL_LESS;7.///////初始化8.void Initial()9.{10.glEnable(GL_DEPTH_TEST); // 启用深度测试11.//glClearColor(1.0f, 1.0f, 1.0f, 1.0f );12.glClearColor(0.9,0.9,0.8,1.0); //初始背景色13./********* 光照处理**********/14.GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 };15.GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };16.GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 };17.GLfloat light_position0[] = { 0.0, 0.0, -220 ,1.0 };18.//定义光位置得齐次坐标(x,y,z,w),如果w=1.0,为定位光源(也叫点光源),19.//如果w=0,为定向光源(无限光源),定向光源为无穷远点,因而产生光为20.//平行光。
中国民航大学计算机与技术学院图形学实验报告课程名称:计算机图形学*名:***系:计算机科学与技术专业:计算机科学与技术年级:2010级学号:*********指导教师:***2012年12 月17 日实验项目:消隐算法实例实现一、实验目的与要求了解各种消隐算法,初步掌握消隐算法的实现。
了解真实感图形的基本原理,掌握真实感图形绘制的基本方法,为进一步掌握计算机图形学中图形处理技术奠定基础。
二、实验内容给定一个长方体8个顶点坐标,编程实现正投影变换和轴侧投影变换。
自给定长方体个顶点坐标,编程实现一点透视绘图。
修改上面程序,实现两点透视变换图形。
给定一个三维几何体坐标,实现它的轴侧变换和一点透视变换。
三、重要算法分析Z-Buffer算法的基本思想是:将Z缓冲器中各单元的初始值设为-1。
当要改变某像素的颜色值时,首先检查当前多边形的深度值是否大于该像素原来的深度值(保存在该像素所对应的Z缓冲器的单元中),如果大于,说明当前多边形更靠近观察点,用它的颜色替换像素原来的颜色;否则,说明在当前像素处,当前多边形被前面所绘制的多边形遮挡了,是不可见的,像素的颜色值不改变。
Z-Buffer算法流程如下:帧缓冲区置背景色;Z缓冲区置最小值(离观察点最远);for(场景中的每个多边形){扫描转换该多边形;for(多边形所覆盖的每一像素点(x,y)){计算多边形在该像素点的深度值z(x,y);if(z(x,y)>Z-buf中对应此像素点(x,y)的z值){把多边形在(x,y)处的深度值z(x,y)存入Z-buf中(x,y)处;把多边形在(x,y)处的亮度值存入F-buf中的(x,y)处;}}}四、程序运行截图程序运行结果分别如以下各图所示:其中图1至图5是按键盘中“上”箭头时凸多面体的变化过程:图1图2图3 图4图5图6图6至图9是按键盘中“下”箭头时凸多面体的变化过程:图7图8图9 图10五、总结与调试经验最后一次实验,竟有些窃喜,额,似乎不太认真~~~不过好歹还是调试出来了~~~不敢说收获,但是很开心!!希望考试取得好成绩!!加油!!GO GO~。
一种3D图形背面消隐算法及其硬件加速实现
随着科技的不断发展,3D图形渲染技术也在不断进步,其中背面消隐算法是其中一个重要的技术。
在3D图像中,如果不进行背面消隐处理,会造成图像混乱,影响视觉效果。
因此,背面消隐算法是实现高质量3D图像的重要一环。
一种常用的背面消隐算法是Z-Buffer算法,它的实现原理是将所有像素点按照深度值进行排序,把深度值最小的像素点输出到屏幕上。
这个算法的优点是简单易懂,但缺点是需要大量的内存来存储深度缓存区,会消耗大量的计算资源。
为了提高背面消隐算法的效率,硬件加速实现是一种有效的途径。
硬件加速可以通过专门的加速卡来实现Z-Buffer算法的处理,大大提高了图像处理的速度。
例如,NVIDIA的GeForce专业显卡中就内置了Z-Buffer处理器,可以实现高性能的背面消隐算法。
另一个硬件加速实现的途径是在图形处理器(GPU)中实现背面消隐算法。
在GPU中,背面消隐算法可以通过着色器来实现。
在顶点着色器中,将顶点的坐标与视图矩阵相乘,得到其在相机坐标系中的坐标;在片元着色器中,将片元的深度值与深度缓存区中的值进行比较,找出最前面的像素点输出到屏幕上。
这种方法的优点是可以获得更高的性能,缺点是需要GPU的支持。
总之,背面消隐算法是实现高质量3D图像的必需技术之一。
通过硬件加速的方式,可以大大提高算法的处理速度,实现更好的视觉效果。
一、实验题目:使用OpenGL编程实现三维实体消隐算法实验二、实验要求:学习Visual C++ 6.0 集成编程环境的使用,OpenGL编程环境的设置,OpenGL语法及基本函数的使用等基础知识,并编程实现三维消隐实体算法,得出相应的三维消隐实体输出图形。
三、算法的源程序:#include<GL/glut.h>GLfloat pos[]={-2,4,5,1},amb[]={0.3,0.3,0.3,1.0};GLfloat front_amb_diff[]={0.7,0.5,1.1,1.0};GLfloat back_amb_diff[]={0.4,0.7,1,1.0};GLfloat spe[]={0.25,0.25,0.25,1.0};GLfloat theta=0,dt=1.5,axes[3][3]={{1,0,0},{0,1,0},{0,0,1}};int axis=0;void display(void){glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glPushMatrix();if(axis<3)glRotated(theta,axes[axis][0],axes[axis][1],axes[axis][2]);else{glPushMatrix();glRotated(theta,0,0,1);glLightfv(GL_LIGHT0,GL_POSITION,pos);glPopMatrix();}glutSolidTorus(.4,1,48,96); // 图片调用函数可以设置图片的属性glPopMatrix(); // glutWireTeapot(); 茶壶glutSwapBuffers(); // glutSolidCone(); 圆锥}void idle(void){if(theta>=360)axis=(axis+1)%4;theta=(theta<360)?theta+dt:dt;glutPostRedisplay();}void main(int argc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH); glutInitWindowSize(500,500);glutInitWindowPosition(200,100);glutCreateWindow("GLUT Object");glClearColor(1,1,0,0);//背景颜色黄色glEnable(GL_DEPTH_TEST);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(45,1.0,2,8);glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,front_amb_diff); glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,back_amb_diff); glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,spe);glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,75);glLightfv(GL_LIGHT0,GL_AMBIENT,amb);glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE);glMatrixMode(GL_MODELVIEW);glLoadIdentity();glTranslated(0,0,-5);glLightfv(GL_LIGHT0,GL_POSITION,pos); glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);glutDisplayFunc(display); glutIdleFunc(idle);glutMainLoop();}。
计算机绘制三维曲面图形的一种改进消隐法
汤正诠;徐嘉芳
【期刊名称】《应用科学学报》
【年(卷),期】1990(000)004
【总页数】5页(P338-342)
【作者】汤正诠;徐嘉芳
【作者单位】不详;不详
【正文语种】中文
【中图分类】TH126
【相关文献】
1.二维图形消隐技术在液压支架装配图绘制中的应用 [J], 陈雷;郑泉
2.离心压气机叶轮一种消隐图形绘制方法 [J], 朱士灿
3.计算机绘制圆柱,圆锥相贯体正轴测图消隐的研究 [J], 王勉之
4.图形绘制中的消隐与动态显示研究 [J], 张军海;胡文亮
5.螺旋转子的计算机绘制与消隐处理 [J], 洪汉玉
因版权原因,仅展示原文概要,查看原文内容请购买。