1、第四章第四章 图形几何变换图形几何变换 内容提要内容提要4.1 概述概述4.2 二维几何变换二维几何变换4.3 二维组合变换二维组合变换4.4 三维几何变换三维几何变换4.5 三维组合变换三维组合变换4.6 OpenGL编程(补充内容)编程(补充内容)平移平移 旋转旋转 缩放缩放 错切错切4.1 概述:概述:一一 图形变换的几种形式图形变换的几种形式:(动画演示)动画演示)点的表示:点的表示:二维图形中的点可以用坐标(x,y)来表示,也可以用矢量x,y来表示。二维行矢量 x,y 三维行矢量 x,y,z 二维列矢量 三维列矢量 图形的表示图形的表示 用nx2 或 nx3 矩阵来表示二维或三维图形
2、上 所有n个点。二维空间上 三维空间上 的所有点 的所有点二二 图形与矢量图形与矢量yxzyxnnyyyxxx2121nnnzzzyyyxxx212121 1 图形变换的方法:借助变换矩阵来实现图形变换的方法:借助变换矩阵来实现三三 图形的变换图形的变换图形(可用点集表示)矩阵P新矩阵P 新图形P变换矩阵变换矩阵T表示成表示成2 变换矩阵变换矩阵:点 :变换矩阵:变换:变换后的点:新矩阵:TPPdybxycyaxxP=x,ydcbaTdybxcyaxdcbayxyxP 3 为什么要用变换矩阵?为什么要用变换矩阵?(1)图形可用点集表示,点集可用矩阵表示:图形可用点集表示,点集可用矩阵表示:所以
3、对图形进行各种变换,就是对图形中的点进行变化,就是使点集对应的矩阵发生变化。反过来,当矩阵发生变化时,它所代表的图形也发生变化 (2)结论:结论:图形变换可通过对矩阵进行某种运算来实现,通常将矩阵P乘以一个相应的变换矩阵变换矩阵T,从而得到新矩阵P,新矩阵P代表变换后新图形上的各个点的坐标。(3)例:例:动画演示(进行图形变换需要借助不同的变换矩阵)1 图形模式(固定坐标系模式)图形模式(固定坐标系模式)变换前后点的坐标发生变化,但都是在同一坐标变换前后点的坐标发生变化,但都是在同一坐标系中。系中。2 空间模式(活动坐标系模式)空间模式(活动坐标系模式)改变参照系,变换前后是相对不同坐标系的改
4、变参照系,变换前后是相对不同坐标系的四四 变换方式变换方式 设有两个矢量设有两个矢量 矢量和矢量和 zyxvvvV五五 数学基础数学基础 zyxuuuUzzyyxxvuvuvuVU矢量的数乘矢量的数乘 矢量的点积矢量的点积zyxukukukUkzzyyxxvuvuvuVU矢量的长度矢量的长度 单位矢量:单位矢量:长度为1的矢量 矢量的夹角矢量的夹角矢量的叉积矢量的叉积 222zyxuuuUUUVUVUcoszyxzyxvvvuuukjiVU1 比例变换的变换矩阵:比例变换的变换矩阵:则:则:a为x方向的比例因子,d为y方向的比例因子。dyyaxxd00aT00yxdyaxdayx4.2 二维变
5、换:二维变换:一一 比例变换:比例变换:2 例:例:以坐标原点为放缩参照点以坐标原点为放缩参照点 不仅改变了物体的大小和形状,也改变了它不仅改变了物体的大小和形状,也改变了它离原点的距离离原点的距离 TPPyxbaT003 动画演示图形比例变换的过程动画演示图形比例变换的过程 对对X轴对称变换轴对称变换 变换矩阵:变换矩阵:则:则:图形对x轴进行对称变换 yyxx1-001T1001yxyxyx二二 对称变换对称变换对对Y轴对称变换轴对称变换变换矩阵:变换矩阵:则:则:图形对y轴进行对称变换yyxx1001-T1001yxyxyx对对原点原点对称变换对称变换变换矩阵:变换矩阵:则:则:图形对坐
6、标原点进行对称变换yyxx1-001-T1001yxyxyx 动画演示图形对称变换的过程动画演示图形对称变换的过程三三 旋转变换旋转变换1 旋转变换的变换矩阵:旋转变换的变换矩阵:X=R cos(+)=R cos cos-Rsin sin =Xcos-Ysin Y=R sin(+)=R cos sin+R sin cos =X sin+Y cos 绕坐标原点旋转角的变换矩阵为:cossinsin-cosRcossinsin-cosyxyx 写成矩阵形式:2 旋转变换旋转变换 绕坐标原点旋转绕坐标原点旋转 角度角度 (逆时针为正,顺(逆时针为正,顺时针为负)时针为负)PRPcossinsinco
7、sR3 动画演示图形旋转变换的过程动画演示图形旋转变换的过程四四 错切变换错切变换 1 错切变换的变换矩阵:错切变换的变换矩阵:ybxycyxx ybxcyxcbyxyx1111cbT ycyxcyxyx101yycyxx2 沿沿x方向错切方向错切(b=0,c0)3 沿沿y方向错切方向错切(b 0,c=0)ybxxbyxyx101ybxyxx4 沿沿X,y方向错切方向错切(b 0,c 0)ybxcyxcbyxyx11ybxycyxx 5 动画演示图形错切变换的过程动画演示图形错切变换的过程五五 平移变换平移变换 1 平移变换的例子:平移变换的例子:例如:从例如:从A平移到平移到A 得到结果:得
8、到结果:即:即:平移变换平移变换:,AAlmmyylxx mlyxyxTPP2 平移变换的问题平移变换的问题 问题的提出:问题的提出:平移变换平移变换:的运算为的运算为加法,加法,不统一不统一 比例变换比例变换:的运算为的运算为乘法乘法.旋转变换旋转变换:的运算为的运算为乘法乘法.复合变换:复合变换:T=T1T2 T3 T4 T5的运算为的运算为乘法乘法.理想是用乘法来统一。理想是用乘法来统一。问题的解决:问题的解决:采用齐次坐标技术可以使所有变换全都使用采用齐次坐标技术可以使所有变换全都使用乘法乘法,即,即如下的形式:如下的形式:TPPT PP R PP TPP3 齐次坐标技术齐次坐标技术
9、齐次坐标表示法齐次坐标表示法 由由n+1维向量表示一个维向量表示一个n维向量维向量 采用了齐次坐标技术,图形变换才可以转换为表示图采用了齐次坐标技术,图形变换才可以转换为表示图形的点集矩阵与某一变换矩阵形的点集矩阵与某一变换矩阵相乘相乘这一单一问题。因这一单一问题。因而可以借助计算机高速计算功能,快速得到变换后的而可以借助计算机高速计算功能,快速得到变换后的图形。为高度动态的计算机图形显示提供了可能性。图形。为高度动态的计算机图形显示提供了可能性。齐次坐标表示法的优点齐次坐标表示法的优点 便于变换合成便于变换合成 便于硬件实现便于硬件实现4 齐次坐标表示的实现齐次坐标表示的实现 给二维点增加一
10、维,给变换矩阵增加一列。给二维点增加一维,给变换矩阵增加一列。变换后的点也增加一列。变换后的点也增加一列。结果:平移变换也可以使用结果:平移变换也可以使用矩阵乘法矩阵乘法来进行计算。来进行计算。推广:二维推广:二维 三维三维 11001mdybxlcyaxmldcbayxTPP1yx1zyx5 齐次坐标的正常化齐次坐标的正常化 讨论:点没有唯一的齐次坐标表示讨论:点没有唯一的齐次坐标表示 齐次坐标的一般形式:齐次坐标的一般形式:H=1时,为:时,为:H=2时,为:时,为:它们都表示二维空间点它们都表示二维空间点zyx120HHHYX321yx222yx6 齐次坐标表示的物理含义齐次坐标表示的物
11、理含义 只要只要 和和 对应的元素对应的元素成比例,成比例,则它们对应于二维空间的同一个点。该点对则它们对应于二维空间的同一个点。该点对应的齐次坐标为三维空间的一条直线。应的齐次坐标为三维空间的一条直线。该直线上的每一个点都对应于一个二维坐标该直线上的每一个点都对应于一个二维坐标点(点(x,y)。)。111hyx222hyx212121hhyyxxzhzyhyxhxhhh 齐次坐标表示法用齐次坐标表示法用n+1维表示维表示n 维图形的物维图形的物理含义是:理含义是:xzy1Z=1平面图形落在图形落在 Z1的平面上,它对图形的形状没有影响。的平面上,它对图形的形状没有影响。11001mdybxl
12、cyaxmldcbayx7 齐次坐标的正常化齐次坐标的正常化 小结:小结:只有只有H=1时,点的齐次坐标时,点的齐次坐标x,y才与二维坐标的才与二维坐标的x,y值相等。值相等。所以应当进行齐次坐标的正常化:所以应当进行齐次坐标的正常化:HHyHHxyx/一一 组合变换:组合变换:一个复杂的变换可以转化为多个基本变换,这种一个复杂的变换可以转化为多个基本变换,这种方法叫做方法叫做组合变换组合变换。齐次坐标统一了图形变换的表示形式,为组合变齐次坐标统一了图形变换的表示形式,为组合变换提供了基础。换提供了基础。4.3 二维组合变换二维组合变换 二二 复合变换及变换的模式复合变换及变换的模式 1 关于
13、绕任意参照点关于绕任意参照点 旋转旋转的变换的变换 变换矩阵:变换矩阵:T=T1T2 T3(位移,位移,旋转旋转,-位移)位移)P xyrrr(,)1010001001yxT1000cossin0sincos2T1010001003yxT2 关于任意参照点关于任意参照点 的放缩变换的放缩变换 位移,位移,缩放缩放,-位移位移 P xyrrr(,)3 关于任意轴的对称变换关于任意轴的对称变换关于任意轴的对称变换(平移,旋转,关于任意轴的对称变换(平移,旋转,对称对称,-旋转,旋转,-平移)平移)关于任意轴的对称变换步骤:关于任意轴的对称变换步骤:1)平移直线,使其通过原点,变换矩阵为:平移直线,
14、使其通过原点,变换矩阵为:10/0100011ACT1000)cos()sin(0)sin()cos(2T2)绕原点旋转,使直线与绕原点旋转,使直线与X轴重合,变换矩阵为:轴重合,变换矩阵为:3)对对X坐标轴对称变换,其变换矩阵为:坐标轴对称变换,其变换矩阵为:1000100013T4)绕原点放置使直线回到原来与绕原点放置使直线回到原来与X轴成轴成角的角的位置,位置,变换矩阵为:变换矩阵为:1000)cos()sin(0)sin()cos(4T5)平移直线,使其回到原来的位置,变换矩阵为:平移直线,使其回到原来的位置,变换矩阵为:10/0100015ACT通过上述5个步骤,即可实现图形对任意直
15、线的对称变换,其组合变换矩阵为:T=T1T2T3T4T5 1/2sin/)12(cos0)2cos()2sin(0)2sin()2cos(ACAC结论:复杂变换可以通过基本变换的组合而生成。结论:复杂变换可以通过基本变换的组合而生成。注意:注意:变换顺序影响结果,组合的顺序不能颠倒。变换顺序影响结果,组合的顺序不能颠倒。4.4 三维几何变换三维几何变换 一一 三维几何变换三维几何变换1 三维几何变换是二维几何变换的推广。三维几何变换是二维几何变换的推广。2 三维几何变换在齐次坐标空间中可以用三维几何变换在齐次坐标空间中可以用44的变换矩阵表示,的变换矩阵表示,(x,y,z)点对应的齐次坐标点对
16、应的齐次坐标为为:(x,y,z,h),其中其中h是不等于是不等于0的任意常数。的任意常数。3 变换矩阵:变换矩阵:snmlrjihqfedpcba二二 三维齐次坐标三维齐次坐标(x,y,z)点对应的齐次坐标为点对应的齐次坐标为标准齐次坐标标准齐次坐标(x,y,z,1),(hzyxhhh0,hhzzhyyhxxhhh三三 比例变换比例变换 比例变换变换矩阵:比例变换变换矩阵:若a=e=j 则:xyz 方向的 缩放比例相同,如图1若aej 则:立体产生类似变形,如图2。1000000000000jeaTzyxzyx图图1图图2四四 全比例变换全比例变换 全比例变换矩阵:全比例变换矩阵:变换结果:变
17、换结果:需要进行齐次坐标正常化sT000010000100001szyxszyx000010000100001111zyxszsysx五五 对称变换对称变换 变换矩阵:变换矩阵:立体对立体对xoy平面对称时,平面对称时,x,y坐标不变,坐标不变,z坐标变化。坐标变化。1000010000100001Tzyxzzyyxx1 对对xoy平面的对称平面的对称变换变换2 对对xoz和和yoz 平面的对称平面的对称变换变换 对对xoz平面的对称变换:平面的对称变换:对对xoz平面的对称变换:平面的对称变换:1000010000100001Tzzyyxx1000010000100001Tzzyyxx1 绕
18、绕x轴轴旋转变换旋转变换10000cossin00sincos00001)(xRzyxzyx绕x轴旋转六六 旋转变换旋转变换变换矩阵:2 绕绕y轴轴旋转变换:旋转变换:变换矩阵:变换矩阵:zyx绕y轴旋转10000cossin00100sin0cos)(yRzyx3 绕绕z轴轴旋转变换旋转变换 变换矩阵:变换矩阵:zyxzyx绕z轴旋转1000010000cossin00sincos)(zR七七 平移变换平移变换 平移变换矩阵平移变换矩阵 l,m,n分别为x,y,z方向的平移量。1010000100001),(nmlnmlTzyx八八 错切变换错切变换1错切变换错切变换:2 错切变换是指立体沿
19、错切变换是指立体沿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 10000101011zyxihfdcbzyxzfycxzizybxyhzdyxx3 错切变换矩阵:错切变换矩阵:1000010101ihfdcbT则:主对角线元素全为主对
20、角线元素全为1,第,第4行,第行,第4列的其余元素全为列的其余元素全为0。b,c,d,f,h,I中至少有一个不为中至少有一个不为0。(1)沿沿x含含y 错切错切 变换矩阵:变换矩阵:x的值随着的值随着y的增大而增大。的增大而增大。100001000010001dTzzyydyxxzyx(2)沿沿x含含z 错切错切 变换矩阵:变换矩阵:x的值随着的值随着z的增大而增大。的增大而增大。100001000100001hTzzyyhzxxzyx(3)沿)沿y含含x 错切错切 变换矩阵:变换矩阵:y的值随着的值随着x的增大而增大。的增大而增大。100001000010001bTzzbxyyxxzyx(4
21、)沿)沿y含含z 错切错切 变换矩阵:变换矩阵:y的值随着的值随着z的增大而增大。的增大而增大。100001000100001iTzzizyyxxzyx(5)沿)沿z含含x 错切错切 变换矩阵:变换矩阵:z的值随着的值随着x的增大而增大。的增大而增大。100001000010001cTcxzzyyxxzyx(6)沿)沿z含含y 错切错切 变换矩阵:变换矩阵:z的值随着的值随着y的增大而增大。的增大而增大。100001000100001fTfyzzyyxxzyx九九 三维组合变换三维组合变换 分成分成5个个 步骤步骤:1)J轴轴绕绕Z轴转轴转,成为成为J1,使使J1与与YOZ共面。共面。2)J1
22、轴轴绕绕X轴转轴转,成为成为J2,使使J2与与Z轴重合。轴重合。3)立方体立方体绕绕J2轴转轴转,达到目的。达到目的。4)从从J2返回返回J1。5)从从J1返回返回J。J2J2zyxJ1JzyxJ1zyxJ11 问题问题1:如何实现三维物体绕任意轴旋转?:如何实现三维物体绕任意轴旋转?2 思路:思路:将任意轴将任意轴J轴重合轴重合Z轴之后,使立方体轴之后,使立方体旋转旋转角角,然后返回。然后返回。3 实现方法:实现方法:三维组合变换三维组合变换 通过对三维基本变换矩阵的组合,可以实现对三维物体 的复杂变换,变换结果是每次变换矩阵相乘。)1()(321nTTTTPTPPn4 实现步骤:实现步骤:
23、(1)将三维物体与任意轴将三维物体与任意轴J一起作平移变换,使任意轴过原点,一起作平移变换,使任意轴过原点,其变换矩阵为:其变换矩阵为:10100001000011ZJYJXJTzyxJzyxJ平移变换(2)令令J轴轴绕绕X轴转轴转 角角 ,成为,成为J1,使使J1与与XOZ共面。共面。再再绕绕Y轴旋转轴旋转角角,使其与,使其与Z轴重合。轴重合。其变换矩阵为:其变换矩阵为:10000)cos(0)sin(00100)sin(0)cos(10000cossin00sincos000012TzyxJ旋转变换yxzJzzyxJ旋转变换(3)将立方体绕将立方体绕Z轴(轴(J轴)旋转轴)旋转 角角 其变
24、换矩阵为:其变换矩阵为:1000010000cossin00sincos3TzyxJ旋转变换zyxJ(4)对步骤(对步骤(2)作逆变换,将)作逆变换,将J轴回到原来的位置,轴回到原来的位置,其变换矩阵为:其变换矩阵为:10000)cos()sin(00)sin()cos(0000110000)cos(0)sin(00100)sin(0)cos(4TzyxJyxzJzzyxJ旋转变换旋转变换(5)对步骤对步骤(1)作逆变换,将任意轴作逆变换,将任意轴J轴回到原来的位置轴回到原来的位置 其变换矩阵为:其变换矩阵为:10100001000011ZJYJXJTzyxJ平移变换zyxJ上述五个步骤连起来
25、,便组成绕任意轴的旋转变换矩阵:54321TTTTTTzyxJzyxJ组合变换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.6 OpenGL编程(补充内容)编程(补充内容)4.6.1 OpenG
26、L编程基础知识编程基础知识4.6.2 Windows环境下环境下OpenGL编程概论编程概论4.6.3 基本几何图元的定义基本几何图元的定义4.6.4 坐标变换坐标变换4.6.1 OpenGL编程基础知识编程基础知识4.6.1.1 OpenGL概述概述4.6.1.2 OpenGL命令语法及各种状态的含义命令语法及各种状态的含义4.6.1.3 运用辅助库创建规则几何对象运用辅助库创建规则几何对象4.6.1.4 OpenGL辅助库函数详解辅助库函数详解4.6.1.5 Windows环境下环境下OpenGL编程步骤编程步骤4.6.1.1 OpenGL概述概述一一 问题:问题:从事三维图形开发的技术人
27、员编写了大量的矩阵变换、外部设备访问等函数,但很多工作与自己的目标关系 不大,浪费精力。例如:1 演示本人编写的程序旋转的矩形rotate1 2 演示本人用OpenGL提供的函数编写的旋转的矩形 OpenGLrotate 说明OpenGL带来极大便利,可帮助我们将精力放在 更大目标上。二二 OpenGL是是一个三维图形开发的有力工具:一个三维图形开发的有力工具:OpenGL提供了一种直观的编程环境,它提供的一系列函数大大简化了三维图形程序。三三 OpenGL基本概念:基本概念:1 OpenGL是一个性能卓越的开放式三维图形标准:是一个性能卓越的开放式三维图形标准:(1)Microsoft、SG
28、I、IBM、DEC、SUN、HP等大公司等大公司 都采用都采用OpenGL作为三维图形标准作为三维图形标准 (2)许多软件厂商也以许多软件厂商也以OpenGL为基础开发自己的产品:为基础开发自己的产品:著名的产品包括动画制作软件:SoftImage 3D、3D Studio MAX、仿真软件Open Inventor、VR软件World Tool Kit、CAM软件ProEngineer、GIS软件ARC/INFO等。(3)OpenGL是开放的图形标准:是开放的图形标准:用户在UNIX下开发的OpenGL图形软件很容易移植到 微机上的Windows上。2OpenGL独立于硬件设备、窗口系统和操
29、作系统:独立于硬件设备、窗口系统和操作系统:3 许多计算机公司已把OpenGL集成到各种操作系统4 和窗口系统中,5 其中窗口系统:X窗口系统,Windows等。6 操作系统包括:unix,Windows NT 和Windows等系统。3OpenGL实际是一个开放的三维图形软件包:实际是一个开放的三维图形软件包:4 OpenGL可以与Visual C+紧密接口。四四 OpenGL的七大功能:的七大功能:1 建模:建模:OpenGL提供的绘制函数:提供的绘制函数:基本的点、线、多边形的绘制函数、复杂的三维物体(球、锥、多面体、茶壶等)的绘制函数、复杂曲线和曲面的绘制函数。(演示茶壶显示的程序)2
30、 变换:变换:OpenGL图形库的变换包括基本变换和投影变换。图形库的变换包括基本变换和投影变换。基本变换有:基本变换有:平移、旋转、缩放、镜像4种变换 投影变换有:投影变换有:平行投影、透视投影两种变换 有利于减少算法的运行时间,提高三维图形的显示速度。有利于减少算法的运行时间,提高三维图形的显示速度。3颜色模式设置:颜色模式设置:4 OpenGL颜色模式有两种:5 RGBA模式、颜色索引两种4光照和材质设置:光照和材质设置:5 OpenGL光有:光有:6 辐射光 (Emitted Light)、环境光(Ambient Light)、7 漫反射光(Diffuse Light)、镜面光(Spe
31、cular Light)、8 材质用光反射率表示9 场景中物体最终反映到人眼的颜色是:10 光的红、绿、蓝分量与材质红、绿、蓝分量的反射率相乘后11 形成的颜色。12 5 纹理映射:纹理映射:利用OpenGL纹理映射功能可以十分逼真地表达物体表面细节6 位图显示和图像增强位图显示和图像增强7 双缓存动画:双缓存动画:双缓存即前台缓存和后台缓存,后台缓存计算场景,生成画面,前台显示后台缓存已画好的画面。4.6.1.2 OpenGL命令语法及各种状态的含义命令语法及各种状态的含义一一OpenGL有有115个核心函数:个核心函数:二 核心函数有多种形式并能接受不同类型的参数,三 这些函数又可派生出3
32、00多个函数。二二基本函数的命名规则:基本函数的命名规则:三 以前缀gl开头,组成命令名的每个字的开头用大写字母。四 例:glClearColor().三三OpenGL定义的符号常数以定义的符号常数以GL_开头,各字母间用下划线分隔。开头,各字母间用下划线分隔。四 例:GL_COLOR_BUFFER_BIT四四OpenGL定义的数据类型以定义的数据类型以GL开头开头:五 例:int GLint4.6.1.3 运用辅助库创建规则几何对象运用辅助库创建规则几何对象一一 辅助库简介:辅助库简介:1 问题:问题:OpenGL中提供了许多图形函数,但没有窗口函数及 读取键盘和鼠标事件的函数,初学者感到困
33、难。2 解决方法:解决方法:使用辅助库提供的函数。辅助库提供:辅助库提供:基本的窗口管理、基本三维图形绘制函数。辅助库的主要目的:辅助库的主要目的:帮助初学者尽快掌握OpenGL的精髓。二二 辅助库分类:辅助库分类:1 窗口初始化函数 2 窗口处理和事件处理函数 3 定义场景绘制循环函数 4 三维物体绘制函数 5 颜色索引表装入函数 6 空闲时间处理函数三三 辅助库应用示例辅助库应用示例 演示演示C+OpenGL程序(旋转的立方体、球体)程序(旋转的立方体、球体)4.6.1.4 OpenGL辅助库函数详解辅助库函数详解一一 窗口初始化函数(需窗口初始化函数(需3个函数完成)个函数完成)1 vo
34、id auxInitWindow(Glbyte *titleString);表示打开一个窗口,函数的参数是窗口的标题。在打开窗口之前需要先调用:auxInitDisplayMode()和auxInitPosition()函数。程序运行时在此窗口内按下Esc键可以关闭该程序及窗口。2void auxInitDisplayMode(Glbitfield mask);3 用来设置窗口显示模式。4 窗口的基本模式:5 RGBA或颜色索引模式、单缓存或双缓存模式。6 例:auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);7 表示以RGBA单缓存模式显示。3void auxI
35、nitPosition(Glint x,Glint y,Glsizei width,4 Glsizei height);5 用于设置窗口的大小及位置。6 x,y为窗口的左上角屏幕坐标7 width、height分别决定窗口的初始宽度和高度,单位均为像素。二二 窗口处理和事件处理函数(由窗口处理和事件处理函数(由3个回调函数组成)个回调函数组成)1void auxReshapeFunc(void(*function)(Glsizei);2 指定在窗口形状改变时对绘制产生的影响2void auxKeyFunction(Glint key,void(*function)(void);3 定义键盘事件
36、响应函数3void auxMouseFunc(Glint button,Glint mode,4 void(*function)(AUX_EVENTREC*);5 定义鼠标事件响应函数三三三维物体绘制函数:三维物体绘制函数:(辅助库可绘制辅助库可绘制11种基本几何图形)种基本几何图形)四 绘制球的函数:绘制球的函数:五五 void auxWireSphere(Gldouble);六六 void auxSolidSphere(Gldouble);七七 绘制立方体、长方体、圆柱、二十面体、八面体、绘制立方体、长方体、圆柱、二十面体、八面体、八八 四面体、十二面体、圆锥、茶壶等函数四面体、十二面体、
37、圆锥、茶壶等函数4.6.1.5 Windows环境下环境下OpenGL编程步骤编程步骤一一 创建项目文件创建项目文件二二 选择选择Project|Setting菜单项,菜单项,在在Link选项组的选项组的Lib列表框中添加:列表框中添加:opengl32.lib、glu32.lib、glaux.lib三对视图类进行以下操作:三对视图类进行以下操作:PIXELFORMATDESCRIPTOR pfd=sizeof(PIXELFORMATDESCRIPTOR),1,PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER|PFD_SUPPORT_
38、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,;CClientDC dc(this);int pf=ChoosePixelFormat(dc.m_hDC,&pfd);BOOL rt=SetPixelFormat(dc.m_hDC,pf,&pfd);hglrc=wglCreateContext(dc.m_hDC);1 在在OnCreate()中添加代码:中添加代码:(后面详细讲解)(后面详细讲解)2 在在OnDestory()中添加代码中添加代码 wglDeleteContext(hglr
39、c);3 在在PreCreateWindows()中添加代码:中添加代码:cs.style|=WS_CLIPSIBLINGS|WS_CLIPCHILDREN;4 在在OnDraw()中添加:中添加:HWND hWnd=GetSafeHwnd();HDC hDC=: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段添加成员变量:HGLRC hglrc;3 添加成员函数说明:DrawScene();至此,一个基于OpenGL标准的程序框架已构造好。4.6.2 Windows环境下环境下OpenGL编程概论编程概论4.6.2.1 Windows环境下环境下OpenGL基本程序结构基本程序结构4.6.2.2 Windows环境下环境下OpenGL编程方法编程方法4.6.2.1 Windows环境下环境下OpenGL基本程序结构基本程序结构