计算机图形学CG08-三维观察_第1页
计算机图形学CG08-三维观察_第2页
计算机图形学CG08-三维观察_第3页
计算机图形学CG08-三维观察_第4页
计算机图形学CG08-三维观察_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章

三维观察1本章目标三维图形显示流程重点掌握透视投影变换学会使用OpenGL的显示函数2主要内容三维图形的基本问题平面几何投影观察坐标系中的投影变换投影举例三维图形的显示流程图三维裁剪图形显示过程OpenGL相关函数38.1三维图形的基本问题在二维屏幕上如何显示三维物体?显示器屏幕、绘图纸等是二维的显示的图形对象是三维的解决方法投影三维显示设备(正在研制中)如何表示三维物体?二维形体的表示

----直线段、折线、曲线段、多边形区域等三维形体的表示(9章)

----空间直线段、折线、曲线段、多边形、曲面片等48.1三维图形的基本问题如何反映遮挡关系?物体之间或物体的不同部分之间存在相互遮挡关系遮挡关系是空间位置关系的重要组成部分解决方法----消除隐藏面与隐藏线(10章)如何产生真实感图形何谓真实感图形逼真(颜色、纹理、材质和光照)人们观察现实世界产生的真实感来源于空间位置关系----近大远小的透视关系和遮挡关系光线传播引起的物体表面颜色的自然分布解决方法----建立光照明模型、开发真实感图形绘制方法(11章)58.1三维图形的基本问题三维图形的基本研究内容投影三维形体的表示消除隐藏面与隐藏线建立光照明模型、真实感图形绘制方法68.2平面几何投影如何投影?生活中的类比—照相拍摄过程选景取景--裁剪对焦--参考点按快门--成像取景方式移动景物移动照相机78.2.1照相机模型与投影步骤选定投影类型

——

平行、透视设置投影参数——

拍摄方向、距离等三维裁剪

——取景投影和显示——成像简单的三维图形显示流程图88.2.2平面几何投影及分类平面几何投影投影(Projection)将n维的点变换成小于n维的点

将3维的点变换成2维的点投影中心(COP:CenterofProjection)视觉系统—

观察点、视点电影放映机—

光源投影面不经过投影中心平面-照相机底片曲面-球幕电影,视网膜98.2.2平面几何投影及分类投影线从投影中心向物体上各点发出的射线

两类射线直线曲线平面几何投影投影面是平面投影线为直线投影变换projectiontransformation投影过程投影的数学表示(a)(b)108.2.2平面几何投影及分类平面几何投影分类平行投影(parallelprojection)

投影中心与投影平面之间的距离为无限透视投影(perspectiveprojection)

投影中心与投影平面之间的距离为有限118.2.2平面几何投影及分类示例投影中心与投影平面之间的距离为无限

投影中心与投影平面之间的距离为有限

平行投影透视投影128.2.3透视投影透视投影投影中心与投影平面之间的距离为有限例子:室内白炽灯的投影,视觉系统灭点(vanishingpoint)不平行于投影平面的平行线,经过透视投影之后收敛于一点,称为灭点灭点的个数无限138.2.3透视投影主灭点:平行于坐标轴的平行线的灭点。一点透视:1个灭点两点透视:2个灭点三点透视:3个灭点特点产生近大远小的视觉效果,由它产生的图形深度感强,看起来更加真实。148.2.3透视投影例一点透视二点透视三点透视158.2.4平行投影平行投影

投影中心与投影平面之间的距离为无限是透视投影的极限状态投影线方向投影平面168.2.4平行投影(1)正投影与斜投影正投影(orthogonalprojection)

投影线垂直于投影平面斜投影 投影线不垂直于投影平面正投影斜投影178.2.4平行投影(2)三视图:正视图、侧视图和俯视图正视图侧视图俯视图188.3观察坐标系中的投影变换如何进行投影变换?变换矩阵?在什么坐标系中进行?观察坐标系生活中的类比--移动舞台还是移动摄像机移动舞台投影(摄像)简单移动难度大移动摄像机移动容易投影复杂建立观察坐标系,投影简单198.3.1观察坐标系什么是观察坐标系ViewReferenceCoordinate或VRC依赖于投影平面建立的三维坐标系uvn。如照相机所在的坐标系如何建立观察坐标系坐标原点----投影平面(如底片)上的一点,称为观察参考点VRP(ViewReferencePoint)n轴(VPN)----照相机镜头方向(投影平面的法向)v轴----标志物体的朝向,类似照相机向上的方向(观察正向VUP在投影平面上的投影)u轴----208.3.1观察坐标系观察坐标系的简化加速投影变换投影平面----n=0投影中心----(0,0,d)COP218.3.2视见体视见体视见体是三维裁剪窗口建立步骤(1)定义窗口(2)形成观察空间(发出射线)(3)形成视见体(前后裁剪面)228.3.2视见体(1)建立窗口在投影平面uv上只有在窗口内的图形才能在视区中显示指定参数(umin,vmin)(umax,vmax)窗口中心CW不一定落在观察参考点VRP上238.3.2视见体(2)生成观察空间投影参考点PRP:ProjectionReferencePoint确定投影中心或投影方向透视投影:COP=PRP平行投影:投影方向DOP=窗口中心CW-PRP248.3.2视见体(3)形成视见体可看到的范围有限:定义前后裁剪面四棱台或长方体又称为裁剪空间有限观察空间亦称视见体或裁剪空间258.3.2视见体定义一个视见体所需的投影参数及其作用参数作用投影类型定义投影是平行投影还是透视投影观察参考点VRP在世界坐标系中指定,为观察坐标系原点观察平面法向VPN在世界坐标系中指定,为观察坐标的n轴观察正向VUP在世界坐标系中指定,确定观察坐标系的v投影参考点PRP在观察坐标系中指定确定投影中心或投影方向前裁剪面裁距F在观察坐标系中指定,n=F为前裁剪面后裁剪面裁距B在观察坐标系中指定,n=B为后裁剪面窗口umin,umax、vmin、vmax在观察坐标系的uv平面上指定,确定窗口与视见体268.3.3透视投影变换问题----在uvn中,投影平面为n=0,投影中心为(0,0,d),待投影点为P(up,vp,np),求投影点Q278.3.3透视投影变换投影线的参数方程投影平面方程n=0Q点的坐标由此式可解释为什么透视投影产生近大远小的视觉效果288.3.3透视投影变换透视投影变换矩阵298.3.4平行投影变换问题----在uvn中,投影平面为n=0,投影方向为(0,0,-1),待投影点为P,求投影点Q308.3.4平行投影变换投影线的参数方程投影平面方程n=0Q点的坐标318.3.4平行投影变换平行投影变换矩阵328.3.4平行投影变换透视投影与平行投影之间的关系338.3.5从世界坐标系到观察坐标系的变换条件VRC的坐标原点(观察参考点)VRP(VRPx,VRPy,VRPz)投影平面法向VPN观察正向VUP348.3.5从世界坐标系到观察坐标系的变换变换公式MWC→VRC358.4投影举例待投影的单位立方体顶点3的坐标(1,1,1)缺省投影参数

参数 值投影类型 平行投影VRP(WC)(0,0,0)VPN(WC)(0,0,1) VUP(WC)(0,1,0)PRP(VRC)(0.5,0.5,1)窗口(VRC)

(0,1,0,1)F(VRC) 正无穷B(VRC)

负无穷36一点透视8.4投影举例参数值投影类型透视投影VRP(WC)(0,0,0)VPN(WC)(0,0,1)VUP(WC)(0,1,0)PRP(VRC)(0.5,0.5,4)窗口(VRC)(-0.5,1.5,-0.5,1.5)参数值投影类型透视投影VRP(WC)(0,0,0)VPN(WC)(0,0,1)VUP(WC)(0,1,0)PRP(VRC)(2.0,2.0,4.0)窗口(VRC)(-0.5,1.5,-0.5,1.5)378.4投影举例两点透视参数 值 投影类型透视投影VRP(WC)(0,0,0)VPN(WC)(1,0,1)VUP(WC)(0,1,0)PRP(VRC)(0.5,0.5,4)窗口(VRC)

(-1.5,1.5,-1.5,1.5)

参数 值 投影类型透视投影VRP(WC)(0,0,0)VPN(WC)(1,0,1)VUP(WC)(1,1,0)PRP(VRC)(0.5,0.5,4)窗口(VRC)

(-1.5,1.5,-1.5,1.5)

38平行投影8.4投影举例参数 值投影类型平行投影VRP(WC)(0,0,0)VPN(WC)(0,0,1)VUP(WC)(0,1,0)PRP(VRC)(0.5,0.5,1)窗口(VRC)

(-0.5,1.5,0.5,1.5)

参数 值投影类型平行投影VRP(WC)(0,0,0)VPN(WC)(1,1,1)VUP(WC)(0,1,0)PRP(VRC)(0.5,0.5,2)窗口(VRC)(-0.5,1.5,0.5,1.5)39前、后裁剪面的影响8.4投影举例参数 值投影类型透视投影VRP(WC)(0,0,0)VPN(WC)(0,0,1)VUP(WC)(0,1,0)PRP(VRC)(0.5,0.5,2)窗口(VRC)(-0.5,1.5,-0.5,1.5)F(VRC)1.2B(VRC)

0.2408.5三维图形的显示流程图显示流程图(先裁剪后投影)模型变换:

从局部(模型)坐标系到世界坐标系的变换观察变换:从世界坐标系到观察坐标系的变换418.5.1模型变换模型坐标系ModelingCoordinate物体的局部坐标系在模型坐标系中物体的表示简单世界坐标系中的立方体模型坐标系中的立方体42模型变换ModelingTransformation将物体从本身的模型坐标系变换到上层物体的模型坐标系(或世界坐标系)的几何变换模型变换是构造复杂物体的方法例子:8.5.1模型变换模型变换143先投影后裁剪优点二维裁剪相对容易缺点需要对所有的物体进行投影变换8.5.2裁剪448.5.2裁剪在投影之前裁剪的理由三维物体的表面通常被离散表示成多边形或折线,而对这类简单图元,三维裁剪同样比较简单三维图形在显示过程中需要被消隐,做这个工作要有图形的深度信息,所以必须在投影之前完成。消隐很费时,如果在此之前裁剪(或部分裁剪)掉不可见的图形,可使需要消隐的图形减至最小458.5.3规范视见体为什么引入规范视见体简化投影简化裁剪规范化变换将任意视见体变换成规范视见体的变换规范投影坐标(三维坐标)经规范化的观察坐标系468.5.3规范视见体平行投影的规范视见体半立方体透视投影的规范视见体四棱台478.5.3规范视见体采用规范视见体的三维图形显示流程图488.5.4平行投影的规范视见体将任意的平行投影视见体变换为规范平行投影视见体方法:变换的分解与合成步骤:p162~164平移变换错切变换平移变换放缩变换结果498.5.4平行投影的规范视见体508.5.5透视投影视见体的规范化将任意的透视投影视见体变换为规范透视投影视见体方法:变换的分解与合成步骤:p164~166平移变换错切变换平移变换放缩变换结果518.5.5透视投影视见体的规范化528.5.6规范视见体之间的变换将透视投影的规范视见体变换为平行投影的规范视见体538.5.6规范视见体之间的变换原因关于长方体的裁剪较关于正四棱台的裁剪简单平行投影较透视投影简单透视投影与平行投影都采用同一套裁剪与投影程序,处理一致,便于用硬件实现将视见体变换结合到透视投影的规范化变换矩阵中548.5.6规范视见体之间的变换采用视见体变换的三维图形显示流程图558.6三维裁剪三维裁剪的两种方法在三维空间关于视见体裁剪,需要将齐次坐标转换为三维坐标优点:三维裁剪相对容易缺点:需要将齐次坐标转换为三维坐标直接在四维齐次坐标空间中进行裁剪优点:不需要将齐次坐标转换为三维坐标有理曲线曲面可能直接用齐次坐标来表示,对它们的裁剪只能在齐次坐标空间中进行

缺点:四维裁剪相对复杂568.6.1关于规范视见体的裁剪直线段裁剪Cohen_Sutherland算法-27个区域Linang_Barskey算法的直接推广-三维到一维多边形裁剪的Sutherland_Hodgman算法的直接推广-逐面裁剪主要运算求线段与平面的交点57求线段与平面的交点平面S的方程记为:直线段(与平面不平行)P1(u1,v1,n1)P2(u2,v2,n2)交点参数t8.6.1关于规范视见体的裁剪58编码算法平行投影6个面的方程6位编码,C1C2C3C4C5C627个区域算法过程类似2维裁剪8.6.1关于规范视见体的裁剪598.7三维图形显示过程三维图形显示过程1、将三维坐标扩展为齐次坐标,(x,y,z)

(x,y,z,1);2、进行模型变换;3、进行观察变换;4、进行视见体的规范化变换Npar或Nper;5、除以h返回三维空间(有些情况下,h保持为1,所以不必做除法运算);6、关于规范视见体进行裁剪;7、将三维坐标扩展为齐次坐标;8、进行投影变换Mort或Mper;9、进行窗口至视区的变换;10、除以h返回二维设备坐标系;11、扫描转换(显示)608.8OpenGL相关函数观察变换函数指定观察参数,生成一个矩阵并与当前模型观察矩阵合并建模观察模式:glMatrixMode(GL_MODELVIEW)指定观察参数:

gluLookAt(eyex,eyey,eyez,atx,aty,atz,upx,upy,upz)如果不调用此函数,则默认(1)eye=(0,0,0)(2)at=(0,0,-1)(3)up=(0,1,0)61投影模式建立投影变换矩阵:glMatrixMode(GL_PROJECTION)设定当前投影矩阵正投影函数

glOrtho(xmin,xmax,ymin,ymax,near,far)或glOrtho(left,right,bottom,top,near,far)(1)形成视见体(2)near和far为从观察坐标系原点沿负Z轴方向的距离8.8OpenGL相关函数62正投影函数(续)默认参数:glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0)是一对称规范化对称正方体对二维而言,glOrtho2D建立裁剪窗口如不指定投影函数,默认正投影来显示场景8.8OpenGL相关函数zviewyviewxview近裁剪面远裁剪面63透视投影函数(1)glFrustum(left,right,bottom,top,near,far)

前四个参数设定近平面上裁剪窗口的坐标(OpenGL投影平面为近裁剪面)8.8OpenGL相关函数64(2)gluPerspective(fovy,aspect,near,far)

fovy:上下裁剪面间的夹角(0~180)

aspect:裁剪窗口纵横比(宽度/高度)

near:近裁剪面

far:远剪面8.8OpenGL相关函数65实例8-1:观察立方体移动视点旋转物体8.8OpenGL相关函数668.8OpenGL相关函数#include<stdlib.h>#include<GL/glut.h>GLfloatvertices[][3]={{-1.0,-1.0,-1.0},{1.0,-1.0,-1.0},{1.0,1.0,-1.0},{-1.0,1.0,-1.0},{-1.0,-1.0,1.0},{1.0,-1.0,1.0},{1.0,1.0,1.0},{-1.0,1.0,1.0}};GLfloatcolors[][3]={{0.0,0.0,0.0},{1.0,0.0,0.0},{1.0,1.0,0.0},{0.0,1.0,0.0},{0.0,0.0,1.0},{1.0,0.0,1.0},{1.0,1.0,1.0},{0.0,1.0,1.0}};voidpolygon(inta,intb,intc,intd){

glBegin(GL_POLYGON);glColor3fv(colors[a]);glVertex3fv(vertices[a]);glVertex3fv(vertices[b]);glVertex3fv(vertices[c]);glVertex3fv(vertices[d]);

glEnd();}678.8OpenGL相关函数staticGLfloattheta[]={0.0,0.0,0.0};staticGLintaxis=2;staticGLdoubleviewer[]={0.0,0.0,5.0};voidcolorcube(){polygon(0,3,2,1);polygon(2,3,7,6);polygon(0,4,7,3);polygon(1,2,6,5);polygon(4,5,6,7);polygon(0,1,5,4);}voiddisplay(){

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

glLoadIdentity();//更新视点位置

gluLookAt(viewer[0],viewer[1],viewer[2],0.0,0.0,0.0,0.0,1.0,0.0);glRotatef(theta[0],1.0,0.0,0.0);glRotatef(theta[1],0.0,1.0,0.0);/*旋转立方体*/glRotatef(theta[2],0.0,0.0,1.0);colorcube();

glutSwapBuffers();}688.8OpenGL相关函数voidmouse(int

btn,intstate,intx,inty){

if(btn==GLUT_LEFT_BUTTON&&state==GLUT_DOWN)axis=0;

if(btn==GLUT_MIDDLE_BUTTON&&state==GLUT_DOWN)axis=1;

if(btn==GLUT_RIGHT_BUTTON&&state==GLUT_DOWN)axis=2;

theta[axis]+=2.0;if(theta[axis]>360.0)theta[axis]-=360.0;display();}voidkeys(unsignedcharkey,intx,inty){/*用x,X,y,Y,z,andZ键移动视点*/

if(key=='x')viewer[0]-=1.0;

if(key=='X')viewer[0]+=1.0;

if(key=='y')viewer[1]-=1.0;

if(key=='Y')viewer[1]+=1.0;

if(key=='z')viewer[2]-=1.0;

if(key=='Z')viewer[2]+=1.0;

display();}698.8OpenGL相关函数voidmyReshape(intw,inth){glViewport(0,0,w,h);

glMatrixMode(GL_PROJECTION);glLoadIdentity();

if(w<=h)glFrustum(-2.0,2.0,-2.0*(GLfloat)h/(GLfloat)w,2.0*(GLfloat)h/(GLfloat)w,2.0,20.0);elseglFrustum(-2.0,2.0,-2.0*(GLfloat)w/(GLfloat)h,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论