课件-计算机图形学-图形几何变换

PPT
  • 阅读 52 次
  • 下载 0 次
  • 页数 86 页
  • 大小 518.145 KB
  • 2022-12-01 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
课件-计算机图形学-图形几何变换
可在后台配置第一页与第二页中间广告代码
课件-计算机图形学-图形几何变换
可在后台配置第二页与第三页中间广告代码
课件-计算机图形学-图形几何变换
可在后台配置第三页与第四页中间广告代码
课件-计算机图形学-图形几何变换
课件-计算机图形学-图形几何变换
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 86
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】课件-计算机图形学-图形几何变换.ppt,共(86)页,518.145 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-77581.html

以下为本文档部分文字说明:

第四章图形几何变换内容提要4.1概述4.2二维几何变换4.3二维组合变换4.4三维几何变换4.5三维组合变换4.6OpenGL编程(补充内容)•–平移–旋转–缩放–错切4.1概述:一图形变换的几种形式:(动画演示)••点的表示:二维图形

中的点可以用坐标(x,y)来表示,也可以用矢量[x,y]来表示。二维行矢量[x,y]三维行矢量[x,y,z]二维列矢量三维列矢量•图形的表示用nx2或nx3矩阵来表示二维或三维图形上所有n个点。二维空间上三维空间上的所有点的所有点二图形

与矢量yxzyxnnyyyxxx2121nnnzzzyyyxxx212121•1图形变换的方法:借助变换矩阵来实现三图形的变换图形(可用点集表示)矩阵P新矩阵P

’新图形P×变换矩阵T表示成表示成•2变换矩阵:点:变换矩阵:变换:变换后的点:新矩阵:TPPdybxycyaxxP=[x,y]dcbaTdybxcyaxdcbayx

'''yxP•3为什么要用变换矩阵?(1)图形可用点集表示,点集可用矩阵表示:所以对图形进行各种变换,就是对图形中的点进行变化,就是使点集对应的矩阵发生变化。反过来,当矩阵发生变化时,它所代表的图形也发生变化(2)结论:图形变换可通过对矩阵进行某种运算来实现,通常将矩阵P乘以一个相应的变换

矩阵T,从而得到新矩阵P’,新矩阵P’代表变换后新图形上的各个点的坐标。(3)例:动画演示(进行图形变换需要借助不同的变换矩阵)•1图形模式(固定坐标系模式)•变换前后点的坐标发生变化,但都是在同一坐标系中。2空间模式(活动坐标系模式)•改变参照系,变换前后是相对

不同坐标系的四变换方式••设有两个矢量•矢量和zyxvvvV五数学基础zyxuuuUzzyyxxvuvuvuVU•矢量的数乘矢量的点积

zyxukukukUkzzyyxxvuvuvuVU•矢量的长度•单位矢量:长度为1的矢量•矢量的夹角矢量的叉积222zyxuuuUUUVUVUcoszyxzyxvvvuuukjiVU•1比例变换的变换矩阵:则:a为x方向的比

例因子,d为y方向的比例因子。dyyaxxd00aT''00yxdyaxdayx4.2二维变换:一比例变换:•2例:–以坐标原点为放缩参照点–不仅改变了物体的大小和形状,也改变了它离原点的距离TPPyxbaT003动画

演示图形比例变换的过程•对X轴对称变换变换矩阵:则:图形对x轴进行对称变换yyxx1-001T''1001yxyxyx二对称变换•对Y轴对称变换变换矩阵:则:图形对y轴进行对称变换

yyxx1001-T''1001yxyxyx•对原点对称变换变换矩阵:则:图形对坐标原点进行对称变换yyxx1-001-T''1001yxyxyx动画演示图

形对称变换的过程•三旋转变换1旋转变换的变换矩阵:X’=Rcos(α+θ)=Rcosαcosθ-Rsinαsinθ=Xcosθ-YsinθY’=Rsin(α+θ)=Rcosαsinθ+Rsinαcosθ=Xsinθ+Ycosθ绕坐标原点旋转θ角的变换矩阵为:

cossinsinθ-cosθRcossinsinθ-cosθyx''yx=写成矩阵形式:•2旋转变换–绕坐标原点旋转角度(逆时针为正,顺时针为负)PRPcossins

incosR3动画演示图形旋转变换的过程•四错切变换1错切变换的变换矩阵:ybxycyxxybxcyxcbyxyx11''11cbT•ycyxcyxyx101''yycyxx2沿x方向错

切(b=0,c≠0)•3沿y方向错切(b≠0,c=0)ybxxbyxyx101''ybxyxx•4沿X,y方向错切(b≠0,c≠0)ybxcyxcbyxyx11''

ybxycyxx5动画演示图形错切变换的过程•五平移变换1平移变换的例子:–例如:从A平移到A’·–得到结果:–即:–平移变换:,AA’lmmyylxxmlyxyx''TPP•2平移变换的问题•问题的提出:–平移变换

:的运算为加法,不统一–比例变换:的运算为乘法.–旋转变换:的运算为乘法.–复合变换:T=T1·T2·T3·T4·T5的运算为乘法.–理想是用乘法来统一。•问题的解决:–采用齐次坐标技术可以使所有变换全都使用乘法,即如下的形式:

TPPT·PPR·PPTPP•3齐次坐标技术•齐次坐标表示法–由n+1维向量表示一个n维向量–采用了齐次坐标技术,图形变换才可以转换为表示图形的点集矩阵与某一变换矩阵相乘这一单一问题。因而可以借助计算机高速计算功能,快速得到变换后的图形。为高度动态的计算机

图形显示提供了可能性。•齐次坐标表示法的优点–便于变换合成–便于硬件实现•4齐次坐标表示的实现•给二维点增加一维,给变换矩阵增加一列。•变换后的点也增加一列。•结果:平移变换也可以使用矩阵乘法来进行计算。

•推广:二维三维11001mdybxlcyaxmldcbayxTPP1yx1zyx•5齐次坐标的正常化•讨论:点没有唯一的齐次坐标表示•齐次坐标的一般形式:•H=1时,为:•H=2

时,为:•它们都表示二维空间点zyx120HHHYX321yx222yx•6齐次坐标表示的物理含义•只要和对应的元素成比例,•则它们对应于二维空间的同一个点。该点对应的齐次坐标为三维空间的一条直线。•该直线上的每一个点都对应于一个二维坐标点(x,y)。

111hyx222hyx212121hhyyxxzhzyhyxhxhhh••齐次坐标表示法用n+1维表示n维图形的物理含义是:xzy1Z=1平面图形落在Z=1的平面上,它对图形的形状没有影响。

11001mdybxlcyaxmldcbayx•7齐次坐标的正常化•小结:–只有H=1时,点的齐次坐标x,y才与二维坐标的x,y值相等。–所以应当进行齐次坐标的正常化:HHyHHxyx//•一组合变换:–一个复杂的变

换可以转化为多个基本变换,这种方法叫做组合变换。–齐次坐标统一了图形变换的表示形式,为组合变换提供了基础。4.3二维组合变换•二复合变换及变换的模式1关于绕任意参照点旋转θ的变换•变换矩阵:T=T1•T2•T3(位移,旋转,-位移)Pxyrr

r(,)1010001001yxT1000cossin0sincos2θθθθT1010001003yxT•2关于任意参照点的放缩变换位移,缩放,-位移Pxy

rrr(,)•3关于任意轴的对称变换关于任意轴的对称变换(平移,旋转,对称,-旋转,-平移)•关于任意轴的对称变换步骤:1)平移直线,使其通过原点,变换矩阵为:10/0100011ACT

1000)cos()sin(0)sin()cos(2θθθθT2)绕原点旋转,使直线与X轴重合,变换矩阵为:•3)对X坐标轴对称变换,其变换矩阵为:1000100

013T4)绕原点放置使直线回到原来与X轴成θ角的位置,变换矩阵为:1000)cos()sin(0)sin()cos(4θθθθT•5)平移直线,使其回到原来的位置,变换矩阵为:

10/0100015ACT通过上述5个步骤,即可实现图形对任意直线的对称变换,其组合变换矩阵为:T=T1•T2•T3•T4•T5=1/2sin/)12(cos0)2cos()2sin(0)2sin()2cos(ACACθθθ

θθθ结论:复杂变换可以通过基本变换的组合而生成。注意:变换顺序影响结果,组合的顺序不能颠倒。•4.4三维几何变换一三维几何变换1三维几何变换是二维几何变换的推广。2三维几何变换在齐次坐标空间中可以用4×4的变换矩阵表

示,(x,y,z)点对应的齐次坐标为:(x,y,z,h),其中h是不等于0的任意常数。3变换矩阵:snmlrjihqfedpcba•二三维齐次坐标(x,y,z)点对应的齐次坐标为标准齐次坐标(x,y,z,1

)),,,(hzyxhhh0,,,hhzzhyyhxxhhh•三比例变换比例变换变换矩阵:若a=e=j则:xyz方向的缩放比例相同,如图1若a≠e≠j则:立体产生类似变形,如图2。1000000000000jeaTzyxzyx图1图2•四

全比例变换全比例变换矩阵:变换结果:需要进行齐次坐标正常化sT000010000100001szyxszyx00001000010000111'''1zyxs

zsysx•五对称变换变换矩阵:立体对xoy平面对称时,x,y坐标不变,z坐标变化。1000010000100001Tzyxzzyyxx'''1对xoy平面的对称变换•2对xoz和yoz平面的对称变换•对xoz平面的对称变换

:•对xoz平面的对称变换:1000010000100001Tzzyyxx'''1000010000100001T

zzyyxx'''•1绕x轴旋转变换10000cossin00sincos00001)(xRzyxzyx绕x轴旋转六旋转变换变换矩阵:•2绕y轴旋转变换:变换矩阵:zyx绕y轴旋转10000cossin00100sin0cos

)(yRzyx•3绕z轴旋转变换变换矩阵:zyxzyx绕z轴旋转1000010000cossin00sincos)(zR•七平移变换•平移变换矩阵•l,m

,n分别为x,y,z方向的平移量。1010000100001),,(nmlnmlTzyx•八错切变换1错切变换:2错切变换是指立体沿x,y,z三个方向产生错切变形,3它是斜轴测投影变换的基础。2错切变换的6种形式:1)沿x方向含y分量错切

,2)沿x方向含z分量错切3)沿y方向含x分量错切,4)沿y方向含z分量错切5)沿z方向含x分量错切,6)沿z方向含y分量错切•]1'''[10000101011zyxihfdcbzyxzfy

cxzizybxyhzdyxx'3错切变换矩阵:1000010101ihfdcbT则:主对角线元素全为1,第4行,第4列的其余元素全为0。b,c,d,f,h,I中至少有一个不为0。•(1)沿x含y错切•

变换矩阵:•x的值随着y的增大而增大。100001000010001dTzzyydyxx'zyx•(2)沿x含z错切•变换矩阵:•x的值随着z的增大而增大。100001000100001hTzzyyh

zxx'zyx•(3)沿y含x错切•变换矩阵:•y的值随着x的增大而增大。100001000010001bTzzbxyyxx'zyx•(4)沿y含z错切•变换矩阵:•y

的值随着z的增大而增大。100001000100001iTzzizyyxx'zyx•(5)沿z含x错切•变换矩阵:•z的值随着x的增大而增大。100001000010001cTcxz

zyyxx'zyx•(6)沿z含y错切•变换矩阵:•z的值随着y的增大而增大。100001000100001fTfyzzyyxx'zyx•九三维组合变换分成5个步骤

:1)J轴绕Z轴转φ,成为J1,使J1与YOZ共面。2)J1轴绕X轴转γ,成为J2,使J2与Z轴重合。3)立方体绕J2轴转θ,达到目的。4)从J2返回J1。5)从J1返回J。J2J2zyxJ1JzyxJ1zyxJ11问题1:如何实现三维物体绕任意轴旋转?2思路:

将任意轴J轴重合Z轴之后,使立方体旋转θ角,然后返回。•3实现方法:三维组合变换通过对三维基本变换矩阵的组合,可以实现对三维物体的复杂变换,变换结果是每次变换矩阵相乘。)1()('321nTTTTPTPPn•4实现步骤:(1)将三维物体与任意轴J一

起作平移变换,使任意轴过原点,其变换矩阵为:10100001000011ZJYJXJTzyxJzyxJ平移变换•(2)令J轴绕X轴转角,成为J1,使J1与XOZ共面。再绕Y轴旋转ß角,使其与Z轴重合。其变换矩阵为:

10000)cos(0)sin(00100)sin(0)cos(10000cossin00sincos000012TzyxJ旋转变换yxzJzzyxJ旋转变换•(3)将立方体绕Z轴(J轴)旋转角其变换矩阵为:

1000010000cossin00sincos3TzyxJ旋转变换zyxJ•(4)对步骤(2)作逆变换,将J轴回到原来的位置,其变换矩阵为:10000)cos()sin(00)sin(

)cos(0000110000)cos(0)sin(00100)sin(0)cos(4TzyxJyxzJzzyxJ旋转变换旋转变换•(5)对步骤(1)作逆变换,将任意轴J轴回到原来的位置其变换矩阵为:10100001000011ZJY

JXJTzyxJ平移变换zyxJ•上述五个步骤连起来,便组成绕任意轴的旋转变换矩阵:54321TTTTTTzyxJzyxJ组合变换•5问题2:相对任一参考点的三维变换相对于参考点F(xf,yf,zf)作比例、旋转、错

切等变换的过程分为以下三步:(1)将参考点F移至坐标原点(2)针对原点进行二维几何变换(3)进行反平移•(x',y',z')zyxzyx(x',y',z')zyx(x',y',z')zy(x',y',z')xFF图7-8相对参考点F的比例变换(

a)原图(b)移至坐标原点(c)基本比例变换(d)移回F点原来位置例:相对于F(xf,yf,zf)点进行比例变换•4.6OpenGL编程(补充内容)4.6.1OpenGL编程基础知识4.6.2Windows环境

下OpenGL编程概论4.6.3基本几何图元的定义4.6.4坐标变换•4.6.1OpenGL编程基础知识4.6.1.1OpenGL概述4.6.1.2OpenGL命令语法及各种状态的含义4.6.1.3运用辅助库创建规则几何对象4.6.1.4

OpenGL辅助库函数详解4.6.1.5Windows环境下OpenGL编程步骤•4.6.1.1OpenGL概述一问题:从事三维图形开发的技术人员编写了大量的矩阵变换、外部设备访问等函数,但很多工作与自己的目标关系不大,浪费精力。例如:1演示本人编写的程序旋转的矩形rotate12演示本人用O

penGL提供的函数编写的旋转的矩形OpenGLrotate说明OpenGL带来极大便利,可帮助我们将精力放在更大目标上。二OpenGL是一个三维图形开发的有力工具:OpenGL提供了一种直观的编程环境,它提供的一系列函数大大简化了三维图形程序。•三Open

GL基本概念:1OpenGL是一个性能卓越的开放式三维图形标准:(1)Microsoft、SGI、IBM、DEC、SUN、HP等大公司都采用OpenGL作为三维图形标准(2)许多软件厂商也以OpenGL为基础开发自己的产品:著名的产品包括动画制作软件:SoftImage3D、3DStud

ioMAX、仿真软件OpenInventor、VR软件WorldToolKit、CAM软件ProEngineer、GIS软件ARC/INFO等。(3)OpenGL是开放的图形标准:用户在UNIX下开发的OpenGL图形软件很容易移植到微机上的Windows上。•2O

penGL独立于硬件设备、窗口系统和操作系统:3许多计算机公司已把OpenGL集成到各种操作系统4和窗口系统中,5其中窗口系统:X窗口系统,Windows等。6操作系统包括:unix,WindowsNT和Windows等系统。3OpenGL实际是一个开放的三维图形软件包:4OpenG

L可以与VisualC++紧密接口。•四OpenGL的七大功能:1建模:OpenGL提供的绘制函数:基本的点、线、多边形的绘制函数、复杂的三维物体(球、锥、多面体、茶壶等)的绘制函数、复杂曲线和曲面的绘制函数。(演示茶壶显示的程序)2变换:Open

GL图形库的变换包括基本变换和投影变换。基本变换有:平移、旋转、缩放、镜像4种变换投影变换有:平行投影、透视投影两种变换有利于减少算法的运行时间,提高三维图形的显示速度。•3颜色模式设置:4OpenGL颜色模式有两种:5RGBA模式、颜色索引两种4光照和材质设置:5OpenGL光

有:6辐射光(EmittedLight)、环境光(AmbientLight)、7漫反射光(DiffuseLight)、镜面光(SpecularLight)、8材质用光反射率表示9场景中物体最终反映到人眼的颜色是:10光的红、绿、蓝分量与材质红、绿、蓝分量

的反射率相乘后11形成的颜色。12•5纹理映射:利用OpenGL纹理映射功能可以十分逼真地表达物体表面细节6位图显示和图像增强7双缓存动画:双缓存即前台缓存和后台缓存,后台缓存计算场景,生成画面,前台显示后台缓存已画好的画面。•4.6.1.2OpenGL命令语法及各种状态的含义一OpenGL有1

15个核心函数:二核心函数有多种形式并能接受不同类型的参数,三这些函数又可派生出300多个函数。二基本函数的命名规则:三以前缀gl开头,组成命令名的每个字的开头用大写字母。四例:glClearColor().三OpenGL定义的符号常数以GL_开头,各字母间用下划线分隔。四

例:GL_COLOR_BUFFER_BIT四OpenGL定义的数据类型以GL开头:五例:intGLint•4.6.1.3运用辅助库创建规则几何对象一辅助库简介:1问题:OpenGL中提供了许多图形函数,但没有窗口函数及读取键盘和鼠标事件的函数,初学者

感到困难。2解决方法:使用辅助库提供的函数。辅助库提供:基本的窗口管理、基本三维图形绘制函数。辅助库的主要目的:帮助初学者尽快掌握OpenGL的精髓。•二辅助库分类:1窗口初始化函数2窗口处理和事件处理函数3定义场

景绘制循环函数4三维物体绘制函数5颜色索引表装入函数6空闲时间处理函数•三辅助库应用示例演示C++OpenGL程序(旋转的立方体、球体)•4.6.1.4OpenGL辅助库函数详解一窗口初始化函数(需3个函数完成)1voidauxInitWind

ow(Glbyte*titleString);表示打开一个窗口,函数的参数是窗口的标题。在打开窗口之前需要先调用:auxInitDisplayMode()和auxInitPosition()函数。程序运行时在此窗口内按下Esc键可以关闭该程序及窗口。

•2voidauxInitDisplayMode(Glbitfieldmask);3用来设置窗口显示模式。4窗口的基本模式:5RGBA或颜色索引模式、单缓存或双缓存模式。6例:auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);7表示以RGBA单缓存模式显示。3voi

dauxInitPosition(Glintx,Glinty,Glsizeiwidth,4Glsizeiheight);5用于设置窗口的大小及位置。6x,y为窗口的左上角屏幕坐标7width、heig

ht分别决定窗口的初始宽度和高度,单位均为像素•二窗口处理和事件处理函数(由3个回调函数组成)1voidauxReshapeFunc(void(*function)(Glsizei));2指定在窗口形状改变时对绘制产生的影响2voidauxKeyFunction(Glintke

y,void(*function)(void));3定义键盘事件响应函数3voidauxMouseFunc(Glintbutton,Glintmode,4void(*function)(AUX_EVE

NTREC*));5定义鼠标事件响应函数•三三维物体绘制函数:(辅助库可绘制11种基本几何图形)四绘制球的函数:五voidauxWireSphere(Gldouble);六voidauxSolidSphere(Gldouble);七绘制立方体、

长方体、圆柱、二十面体、八面体、八四面体、十二面体、圆锥、茶壶等函数•4.6.1.5Windows环境下OpenGL编程步骤一创建项目文件二选择Project|Setting菜单项,在Link选项组的Lib列表框中添加:opengl32.lib、glu32.l

ib、glaux.lib三对视图类进行以下操作:•PIXELFORMATDESCRIPTORpfd={sizeof(PIXELFORMATDESCRIPTOR),1,PFD_DRAW_TO_WINDO

W|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER|PFD_SUPPORT_GDI,PFD_TYPE_RGBA,24,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,PFD_MAIN_PLANE,0,0,0,0,};CClientDCdc(this

);intpf=ChoosePixelFormat(dc.m_hDC,&pfd);BOOLrt=SetPixelFormat(dc.m_hDC,pf,&pfd);hglrc=wglCreateContext(dc.m_hDC);1在OnCreate()中添加代码:(后面详细讲解)•2在OnD

estory()中添加代码wglDeleteContext(hglrc);3在PreCreateWindows()中添加代码:cs.style|=WS_CLIPSIBLINGS|WS_CLIPCHILDREN;4在OnDraw()中添加:HWNDhWnd=GetSafeHwnd();HDCh

DC=::GetDC(hWnd);wglMakeCurrent(hDC,hglrc);DrawScene();wglMakeCurrent(NULL,NULL);5添加成员函数DrawScene()•四在视图类的头

文件中加入:1#include"gl/gl.h"#include"gl/glu.h"#include"gl/glaux.h“2在protected段添加成员变量:HGLRChglrc;3添加成员函数说明:Dra

wScene();至此,一个基于OpenGL标准的程序框架已构造好。•4.6.2Windows环境下OpenGL编程概论4.6.2.1Windows环境下OpenGL基本程序结构4.6.2.2Windows环境下OpenGL编程方法•4.6.2.1Wi

ndows环境下OpenGL基本程序结构•

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?