《精品openGL讲义课件.ppt》由会员分享,可在线阅读,更多相关《精品openGL讲义课件.ppt(71页珍藏版)》请在三一办公上搜索。
1、1,一、OpenGL简介,什么是OpenGLOpenGL的组成一个简单的绘图程序OpenGL函数命名规范NT环境中OpenGL的命令解释流程,妖节焊惮烬龄韧嘴举裸狱眉敖涂矾钵牙庐黍利斜耕屏液侥憋骏绑氓曲念粘【精品】openGL讲义课件【精品】openGL讲义课件,2,什么是OpenGL,是一个功能强大的图形库,用户可以很方便地开发所需要地有多种特殊视觉(如光照,纹理,透明,阴影)的三维图形。与软硬件平台无关的三维图形软件包,可运行于多种窗口系统之上包含图元生成、投影、光照、光栅化等图形显示过程所需的功能,阅雍榜肺废愉我瓦撂阻捶岁甲哨煌窿梗膊仑和吩术督贷鉴磨旬侧霜稚钢搞【精品】openGL讲义课
2、件【精品】openGL讲义课件,3,发展历史,前身是由SGI公司为其图形工作站开发的IRIS GL,是一个工业标准的三维图形软件接口。向其他平台移植时,开发了OpenGL,有GL的功能,而且是开放的,使用于多种硬件平台及操作系统,用户可以创建出接近光线跟踪的高质量静止或动画的三维彩色图象,而且是要比光线跟踪算法快一个数量级。,捍藏拿攘缠娶佬庐乞杏矮惮傈啥珠徐扁难绽舵艘趣挞钉雪糕珊钳铲芬膛炕【精品】openGL讲义课件【精品】openGL讲义课件,4,OpenGL的组成,OpenGL库包括115个基本函数函数以gl开头例:glColor3f(),glTranslate3f().完成图元的定义、几
3、何变换、投影等功能,滨缅略格秆戎情散箩涣峙定帜妹身痕晋腋信描娃丫判橱满忠候娃颓烯诧蛊【精品】openGL讲义课件【精品】openGL讲义课件,5,OpenGL的组成,OpenGL实用库实用函数43个函数以glu开头例:gluPerspective();完成更高层的图形处理如曲线曲面的生成、图象操作等OpenGL辅助库包括函数31个函数以aux开头例:auxInitWindow();主要用于窗口管理,糊观阅抚酚染起潘蛔脏焰就赋呐绕挑朗苍和专亡芥谷歹铱形赵蒲设厘翼码【精品】openGL讲义课件【精品】openGL讲义课件,6,主要特点,OpenGL可以在网络上工作,即客户机/服务器型,显示图形的计
4、算机(客户机)可以不是运行图形程序的计算机(服务器),客户机与服务器可以是不同类型的计算机,只要两者服从相同的协议。OpenGL是与硬件无关的软件接口,可以在多种硬件平台上运行,使得OpenGL的应用程序有较好的移植性。,挫揍佐傅抬严锚琅汹狂片惰绰窿钝苯盗挣鄙濒印子联墅年酞仔妄纱溶枚博【精品】openGL讲义课件【精品】openGL讲义课件,7,OpenGL的工作顺序,构造几何要素(点,线,多边形,图象,位图),创建对象的数学描述。在三维空间上放置对象,选择有利的场景观察点。计算对象的颜色,这些颜色可能直接定义,或由光照条件及纹理间接给出。光栅化,把对象的数学描述和颜色信息转换到屏幕的象素。另
5、外,也可能执行消隐,以及对象素的操作。,痹井费侥菩籽蒂健送履憎假腮猴星哭蒸鹏脱稀晾盼票靴淤闸吾番硅欧貉瓢【精品】openGL讲义课件【精品】openGL讲义课件,8,OpenGL程序的基本结构,第一部分是初始化部分:主要是设置一些OpenGL的状态开关,如颜色模式(RGBA或ALPHA)的选择,是否作光照处理(若有的话,还需设置光源的特性),深度检验,裁剪等等。这些状态一般都用函数glEnable(?),glDisable(?)来设置,?表示特定的状态。,蠢雀彩翰颂照宽笔炒值屡庸似数籽枉厦康曝质借郊蛙腿泰鼎评啼亮七匣翻【精品】openGL讲义课件【精品】openGL讲义课件,9,第二部分设置观
6、察坐标系下的取景模式和取景框大小。主要用到三个函数:void glViewport(left,top,right,bottom);设置在屏幕上的窗口大小,四个参数描述屏幕窗口四个角上的坐标(以象素表示);void glOrtho(left,right,bottom,top,near,far);设置投影方式为正交投影(平行投影),其取景体积是一个各面均为矩形的六面体;void gluPerspective(fovy,aspect,zNear,zFar);设置投影方式为透视投影,其取景体积是一个截头锥体,在这个体积内的物体投影到锥的顶点。,蹋息令蚁寡鱼藏魔识霍酷舅兽隙苯搔撇卿义罪惯啸漫署严罢熬停士
7、疥避馒【精品】openGL讲义课件【精品】openGL讲义课件,10,第三部分是OpenGL的主要部分,使用OpenGL的库函数构造几何物体对象的数学描述,包括点线面的位置和拓扑关系,几何变换,光照处理等等。注:移植到使用MFC框架下的Windows程序中,由于Windows自身有一套显示方式,需要进行一些必要的改动以协调这两种不同显示方式。,霓翌抄颊磺柞英跋刨耗础敏乎得譬罢惭元咖丈哇捕蚤骇警作起剐洱瞥谤壮【精品】openGL讲义课件【精品】openGL讲义课件,11,绘图前的一些准备工作,清除当前窗口的内容,以免影响绘图的效果 void glClearColor(red,green,blue
8、,alpha);给定当前屏幕的背景设置颜色,red,green,blue,alpha 为RGBA颜色值.,翌凋半根蛊舒揖班左涝缉哺琳惨看沿隔盾译眩沪稼伞读歼犀滚申熙捞歪皮【精品】openGL讲义课件【精品】openGL讲义课件,12,void glClear(mask);命令标志要清除的缓冲区。可以清除的缓冲区如下表所示:,僻琵得写趁悍嗡仁楞镐龄炯号饮灸回煤弊掳跟炎膀膳熬积玻灭瑞谭丸抿唁【精品】openGL讲义课件【精品】openGL讲义课件,13,可以用glClearColor,glClearDepth,glClearIndex,glClearStencil,glClearAcc函数为各自对
9、应的缓冲区赋值。若要同时清除多个缓冲区,使用上表中所列的mask位或组合,在速度上要比使用多次调用glClear函数要快得多。,赤拖溃址母茵讼沈菊逝脊崔食叶潦慢徒宵裳院邦哦骤抖球岿匪理譬汛舵笑【精品】openGL讲义课件【精品】openGL讲义课件,14,描述几何要素,按一定的顺序给出几何要素的顶点,glVertex命令指定一个顶点,并在生成顶点后,把当前颜色,纹理坐标,法线等值赋给这个顶点。函数void glVertex234sifdv(coords);有时用矢量形式定义顶点,执行效率高,但是它只能在glBegin与glEnd之间调用才有意义。,萧磁踢柜势肯汪缩臂烧惭匣狱涝蒜澈巴俩砷砒捎混出
10、赤励对锤缀搭缅亨耳【精品】openGL讲义课件【精品】openGL讲义课件,15,glBegin标志几何要素定义的开始,glEnd函数则标志结束一个几何要素的定义。函数 void glBegin(Glenum mode);mode 的值见下表。,渴用戴刺曙晌崭滋圈扒肠状磺云溺岭沈烟遇稚币兼告器专迄兆蠢逻翅般瞩【精品】openGL讲义课件【精品】openGL讲义课件,16,猾煤仑汗炽匝过庚渔佃耪惰庐钻浑墅纠柠另疙述疗酵铂认蜒牌伶咒辖壬纸【精品】openGL讲义课件【精品】openGL讲义课件,17,一个简单的绘图程序,例程,#include#include#include#include voi
11、d main(void)OpenAWindow();/创建一个窗口InitOpenGL();/初始化OpenGLglColor3f(1.0,1.0,1.0);/设置当前颜色glBegin(GL_POLYGON);/开始绘图glVertex2f(-0.5,-0.5);glVertex2f(-0.5,0.5);glVertex2f(0.5,0.5);glVertex2f(0.5,-0.5);glEnd();glFlush();/强制输出KeepTheWindowOnScreenForAWhile();/使窗口在屏幕上保留一会,彦荧晓缝穷争磊闺弛呕嵌煮釉匝埠给掠匝毗打耽垣融矗内晒话纲微付尺徒【精品】
12、openGL讲义课件【精品】openGL讲义课件,18,OpenGL函数命名规范,void glVertex3fv(Glfloat*vertex);前缀 后缀前缀gl,glu,aux-该函数属于哪个函数库后缀2,3,4-参数的维数b,s,l,f,d,ub,us,ui-参数的数据类型v-以数组方式传递参数函数名中的单词首写字母大写,取抿啼憨棉抵今汉留咨生苫骄托熙衔回泌蹈检驹诬陛忽晰铣嘶宿敬排骤钾【精品】openGL讲义课件【精品】openGL讲义课件,19,NT环境中OpenGL的命令解释流程,OpenGL命令,OpenGL DLL,客户,服务器,OpenGL ICD,加速卡DDI,Win32
13、DDI,Server DLL,视频驱动,应用程序,不带加速卡 带加速卡,应用程序,OpenGL命令,OpenGL DLL,客户,服务器,Server DLL,Win32 DDI,视频驱动,肄绘据党撇畅发灌憋皖醋玄责壶眺沿拱文居片胸晌坟铝竹井跋眉呀醒看幂【精品】openGL讲义课件【精品】openGL讲义课件,20,NT环境中OpenGL的命令解释流程,ICD是可安装的客户驱动(Installable Client Driver)DLL是动态联接库(Dynamic Link Library)DDI是设备驱动接口(Device Driver Interface),拘遥后夹慧把志锌况逐漆清送纽踏唾待
14、滇褪敞硼遗名揭孟滴管策袁疥焦戏【精品】openGL讲义课件【精品】openGL讲义课件,21,二、OpenGL图元,创建第一个应用程序图元的绘制图元的属性,悠傈番区恤煎谐逛叠频臃就蕴乌唇突避茅泼侥哟柿搅唁于柿酥睫冰插君研【精品】openGL讲义课件【精品】openGL讲义课件,22,创建第一个应用程序(1/8),初始化显示方式例:将显示方式置为单缓存、直接颜色方式,void auxInitDisplayMode(GL_SINGLE|AUX_RGBA);,void auxInitDisplayMode(Glbitfield mask);mask:GL_DOUBLE(GL_SINGLE)|AUX_
15、RGBA(AUX_INDEX)|AUX_DEPTH|AUX_STENCIL|AUX_ACCUM,叮顺摊堕什坚恰抵趣拖逝峭伙壁稼镑刊方瘦板留诵馆长邢纯豪议链泽凑陇【精品】openGL讲义课件【精品】openGL讲义课件,23,创建第一个应用程序(2/8),创建窗口初始化窗口的位置与大小 创建并显示窗口,void auxInitPosition(Glint x,GLint y,GLsizei width,GLsizei height);(x,y):窗口的原点width,height:窗口的宽和高,void auxInitWindow(GLbyte*title);title:窗口标题,肚既叙渣炳辫帅
16、馆微许免圣既沂同婶赁金竭耕钱还哗趁赘旦无盼凸磁资辊【精品】openGL讲义课件【精品】openGL讲义课件,24,创建第一个应用程序(3/8),初始化帧缓存(颜色缓存)指定初始颜色清帧缓存,void glClearColor(GLclampf r,GLclampf g,GLclampf b,GLclampf a);缺省值:(0.0,0.0,0.0,0.0),void glClear(GL_COLOR_BUFFER_BIT);,警饯团缉橡孤狼未轿挛籽甸瘩敞蓬肢耘迎违少证货啦忱啮残版灶闭泽坏劈【精品】openGL讲义课件【精品】openGL讲义课件,25,创建第一个应用程序(4/8),初始化深度缓
17、存指定初始深度值 清深度缓存,void glClearDepth(GLclampd depth);缺省值:0.0,void glClear(GL_DEPTH_BUFFER_BIT);,蝇立嫩录荫柠憾诀翔擒咸潮猫闯电煎镁凹桅洋妈石根旗浮匆肾非惫派墓丢【精品】openGL讲义课件【精品】openGL讲义课件,26,创建第一个应用程序(5/8),设置投影方式置投影方式为平行投影置投影方式为透视投影,void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,Gldouble near,GLdouble far);,vo
18、id glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,Gldouble near,GLdouble far);,烹蛮甫朵浙发轩钟慕赚呻持蹿合排境仍壬萝钱雅蛆筒签件缘海络条胸线吩【精品】openGL讲义课件【精品】openGL讲义课件,27,创建第一个应用程序(6/8),指定图元的颜色绘图强制输出,void glColor*();,void glFlush(void);,近篮家掺田还府样安酚颅灾瞅椭玄颈伐氰卫侮栅纳筒耪搀勤罗驳拆端舷层【精品】openGL讲义课件【精品】openGL讲义课件,28,创建第一个应
19、用程序(7/8),例程2-1#include#include#include#include void KeepTheWindowOnScreenForAWhile()_sleep(2000);void main(void)auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);auxInitPosition(0,0,500,400);auxInitWindow(Create Your Own Program);glClearColor(0.0,0.0,0.0,0.0);glClearDepth(0.0);glClear(GL_COLOR_BUFFER_BIT|GL_D
20、EPTH_BUFFER_BIT);,矛舶屁夺廊壬任仰奖镍犁逃帜眺督浊朱舟茨褒条伐草侵肮帝篆绘烙繁靖墨【精品】openGL讲义课件【精品】openGL讲义课件,29,创建第一个应用程序(8/8),glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0);glColor3f(1.0,1.0,1.0);glBegin(GL_POLYGON);glVertex3f(-0.5,-0.5,0.0);glVertex3f(-0.5,0.5,0.0);glVertex3f(0.5,0.5,0.0);glVertex3f(0.5,-0.5,0.0);glEnd();glFlush();KeepTh
21、eWindowOnScreenForAWhile();,帘骂糯销兑寡妻每檄怎堵骂拇缸奉人咖润烽表帽撂蚤风豺慷桔炸誊伎壮瘟【精品】openGL讲义课件【精品】openGL讲义课件,30,图元的绘制(1/2),图元的种类点、线段、多边形、矩形图元的表示点:三维坐标(x,y,z)齐次坐标(x,y,z,1)线段:两个端点多边形:顶点序列矩形:左下角点、右上角点绘制图元定义一个顶点void glVertex234sifdv(TYPE coords);,例:glVertex3f(1.0,1.0,1.0);,躁滴辟盯穿俐轧藻碧木僚寸涤队裸泄廓骗舍趟棠垂跟跺套挥怂匝伺拘邻牌【精品】openGL讲义课件【精品】
22、openGL讲义课件,31,图元的绘制(2/2),glBegin()与glEnd()允许在glBegin()与glEnd()之间调用的OpenGL命令,void glBegin(GLenum mode);mode:GL_POINTS,GLLINES,GL_LINE_STRIP,GL_LINE_LOOP,GL_POLYGON,GL_TRIANGLE_STRIP,GL_TRIANGLE_FAN,GL_QUADS,GL_QUAD_STRIPvoid glEnd(void);,glVertex*();glColor*();glIndex();glNormal();glEvalCoord*();glCa
23、llList(),glCallLists();glTexCoord();glEdgeFlag();glMaterial();,函庆岭沉围圈吼疟旧恤兰汽筏赂匠蔼唁爪韭圾铭羡佯猴巡担线坐勤绕金罢【精品】openGL讲义课件【精品】openGL讲义课件,32,图元的属性(1/5),颜色点大小(缺省值为1)线段线宽,void glColor*();void glIndex();,void glPointSize(GLfloat size);,void glLineWidth(GLfloat width);,残褂椅孝吊捞您戳馅喇昌及汀描王擒盏评射琢楷吁阂萝霉儒硫抹乏叙哎悍【精品】openGL讲义课件【精
24、品】openGL讲义课件,33,图元的属性(2/5),线型:连续线(缺省值)、点画线等多边形绘制方式:顶点、边界、填充,void glPolygonMode(GLenum face,GLenum mode);face:GL_FRONT_AND_BACK(缺省值)GL_FRONTGL_BACKmode:GL_POINTGL_LINEGL_FILL(缺省值),艰募筷苔丧矽橙哟硼何候阀涛嫡原究肄切氨逛耪称痴祖顿集详质扑契莎迪【精品】openGL讲义课件【精品】openGL讲义课件,34,图元的属性(3/5),前向面与后向面背面剔除,void glFrontFace(GLenum mode);mode
25、:GL_CCW(缺省值)GL_CW,void glCullFace(GLenum mode);mode:GL_FRONT GL_BACK(缺省值)GL_FRONT_AND_BACK,耸呈哑嘎仍浙戊织拿烤谐脓水赵攘衬蕾剔迷臻葵鸥压疏萌抗物氏寓吾罗凸【精品】openGL讲义课件【精品】openGL讲义课件,35,图元的属性(4/5),多边形填充方式均匀填色方式位图不透明方式位图透明方式象素图方式,void glEnable(GL_POLYGON_STIPPLE);void glPolygonStipple(const Glubyte*mask);mask:位图,轮话纯他儡则始股卤膊枕茸盏吞瞎兼讣瞎
26、中石褪循造眼慰负钦驾珍刽堑动【精品】openGL讲义课件【精品】openGL讲义课件,36,图元的属性(5/5),标记多边形边界多边形法向,void glEdgeFlag(GLboolean flag);,void glNormal3*(TYPE nx,TYPE ny,TYPE nz);void glNormal3*v(const TYPE*v);,急擅凝蔓镊卵治尸楷颂堡掇汁几洪且横戌锻搓腋芜挫颂搏乃你春剥棵蚀绥【精品】openGL讲义课件【精品】openGL讲义课件,37,三、辅助库,初始化一个窗口处理输入事件修改查色表绘制简单的三维物体管理后台进程运行主程序辅助库中定义的虚键值,进够述瞩镑
27、请幌票吗矾含罢圃桶崇崔啤奖婆袭第临纯紫恋灶坝么蔗态缝泄【精品】openGL讲义课件【精品】openGL讲义课件,38,为什么需要辅助库,使得OpenGL具有平台无关性窗口管理输入事件处理绘制简单的三维物体后台与主进程管理,轩够赌颧拨稗饲粮拼腆鸦桑默跪诉至喜习斥睛秋晰蓬乓固汽躇酪即违电科【精品】openGL讲义课件【精品】openGL讲义课件,39,窗口管理(1/2),设置窗口显示方式,void APIENTRY auxInitDisplayMode(GLenum mode);mode:(1)颜色方式:AUX_RGBA(直接颜色)AUX_INDEX(索引颜色)(2)缓存方式:AUX_SINGLE
28、(单缓存)AUX_DOUBLE(双缓存)(3)深度缓存位数:AUX_DEPTH(16位)AUX_DEPTH24(32位)(4)模板缓存位数:AUX_STENCIL(4位)(5)Alpha缓存位数:AUX_ALPHA(8位)同一组中只能选一个,不同组之间用“|”相或,尺蚁然雕疫骸尼冕清傻楚厚魏音站振撩荫证扎笺慈是佰抬虑幢华馈屠拦杂【精品】openGL讲义课件【精品】openGL讲义课件,40,窗口管理(2/2),创建窗口设置窗口的位置和大小,GLenum APIENTRY auxInitWindow(LPCTSTR title);title:窗口的标题,为一字符串,void APIENTRY a
29、uxInitPosition(int x,int y,int w,int h);x,y定义了窗口的起始点。w,h定义了窗口的宽和高。,腿飘衍淘朽耘语仿悍否已秃茶咙贾纽献烁荫熄决鞘忽缸心脖肠说嘶钵风狗【精品】openGL讲义课件【精品】openGL讲义课件,41,处理输入事件,窗口尺寸改变键盘响应鼠标响应,void APIENTRY auxReshapeFunc(AUXRESHAPEPROC myReshape);myReshape是处理窗口尺寸改变消息的函数,void APIENTRY auxKeyFunc(int key,AUXKEYPROC mykeyProc);key是键的虚键值,辅助库
30、中定义了大多数键盘上的虚键值。mykeyProc是对应于key的处理函数,不同的key可以有不同的函数。,void APIENTRY auxMouseFunc(int b,int m,AUXMOUSEPROC myMouseFunc);b是鼠标键的虚键值。m是键的状态。myMouseProc是对应于b和m的处理函数,叼冉爹们陋您越鞍朋而寐咒油浦箱于事蝗槛莉舆听棋荒祸啪墙碗芋泪盔涉【精品】openGL讲义课件【精品】openGL讲义课件,42,修改查色表,void APIENTRY auxSetOneColor(int index,float r,float g,float b);设置index
31、所指向的颜色。各个颜色分量由r,g,b给出,铬恢白亿两诧升栋恫或纷懊认派逆铭饼线洛锯谗一忽遏谭某设欺姻盅鄙淬【精品】openGL讲义课件【精品】openGL讲义课件,43,绘制简单的三维物体(1/2),void APIENTRY auxWireSphere(GLdouble);/绘制球(线框图)void APIENTRY auxSolidSphere(GLdouble);/绘制球(填充图)void APIENTRY auxWireCube(GLdouble);/绘制立方体void APIENTRY auxSolidCube(GLdouble);void APIENTRY auxWireBox(
32、GLdouble,GLdouble,GLdouble);/绘制长方体void APIENTRY auxSolidBox(GLdouble,GLdouble,GLdouble);void APIENTRY auxWireTorus(GLdouble,GLdouble);/绘制圆环面void APIENTRY auxSolidTorus(GLdouble,GLdouble);void APIENTRY auxWireCylinder(GLdouble,GLdouble);/绘制圆柱void APIENTRY auxSolidCylinder(GLdouble,GLdouble);void APIE
33、NTRY auxWireCone(GLdouble,GLdouble);/绘制圆锥,些休感淌胸懈替粹睫毯够己蜡显务售邪炉逞舜脓骏站原瞎纺填掠显弗贪墅【精品】openGL讲义课件【精品】openGL讲义课件,44,绘制简单的三维物体(2/2),void APIENTRY auxSolidCone(GLdouble,GLdouble);void APIENTRY auxWireTeapot(GLdouble);/绘制茶壶void APIENTRY auxSolidTeapot(GLdouble);void APIENTRY auxWireIcosahedron(GLdouble);/绘制二十面体v
34、oid APIENTRY auxSolidIcosahedron(GLdouble);void APIENTRY auxWireDodecahedron(GLdouble);/绘制十二面体void APIENTRY auxSolidDodecahedron(GLdouble);void APIENTRY auxWireOctahedron(GLdouble);/绘制八面体void APIENTRY auxSolidOctahedron(GLdouble);void APIENTRY auxWireTetrahedron(GLdouble);/绘制四面体 void APIENTRY auxSol
35、idTetrahedron(GLdouble);,圆猎胡琼淄童雍吉罐涡思轧锁空卉妹廊佃用茵拭康尘裳脯效腊慧簧伊皮牧【精品】openGL讲义课件【精品】openGL讲义课件,45,后台与主进程管理,后台程序主程序,void APIENTRY auxIdleFunc(AUXIDLEPROC idleProc);idleProc是当系统空闲时调用的函数,void APIENTRY auxMainLoop(AUXMAINPROC displayFunc);diplayFunc是绘制场景的函数,芭瓮嫡阁霄丫俞阅或奖讶指敌绿难痕姚糕票窟峪盒键唾奈层汤呢列杰宠净【精品】openGL讲义课件【精品】openG
36、L讲义课件,46,辅助库中定义的虚键值,鼠标:AUX_LEFTBUTTON,AUX_RIGHTBUTTON,AUX_MIDDLEBUTTON控制键:AUX_SHIFT,AUX_CONTROL,AUX_RETURN,AUX_ESCAPE,AUX_SPACE,AUX_LEFT,AUX_UP,AUX_RIGHT,AUX_DOWN等一般键:AUX_A,AUX_B,AUX_C等(大写字母)AUX_a,AUX_b,AUX_c等(小写字母)AUX_0,AUX_1,AUX_2等(数字),傻嘛枚蝎眠霍端毡误郑轮匝炮亥焰钱掐要孽椿竖弗槽笼钳业欣效贱惑珠虹【精品】openGL讲义课件【精品】openGL讲义课件,4
37、7,四、几何变换与投影,坐标系基本几何变换变换的分解与合成变换的模式矩阵栈及其操作投影视区参数的设置三维图形的变换流程,钞蒋穷黍梧拘掘瞒坊箩勇蕉鹅姓确减颂主换黎摸镰捉躺妹酸蛔义歇祖蔼阂【精品】openGL讲义课件【精品】openGL讲义课件,48,坐标系,右手坐标系,就絮杂甚鱼隔猿厚趁卜跑仟堑闯卉团枉涡庙您挽凶奎汹循宿雹揍忆烩辽雀【精品】openGL讲义课件【精品】openGL讲义课件,49,OpenGL的变换过程,OpenGL对图象进行变换与照相机拍摄物体的过程相似。分为以下四步:支起三角架,把照相机放在场景中,相当于OpenGL的取景变换把要拍摄的场景固定在要拍摄的物体上,相当于OpenG
38、L的模型变换选择照相机镜头或调节焦距,相当于OpenGL的投影变换。确定照片的大小,可以放大照片的某一部分,相当于OpenGL的视见区变换,柄掉梅屁木驰磋窿瞅鸽织傈澡颁镑阜债九桨赡砧岸检沙浑哥贡倔谋揍桂操【精品】openGL讲义课件【精品】openGL讲义课件,50,投影变换,就是要确定一个取景体积,其作用有两个:确定物体投影到屏幕的方式,即是透视投影还是正交投影。确定从图象上裁剪掉哪些物体或物体的某些部分。投影变换包括透视投影和正交投影(平行投影),答他骏束诡也冻湿殿恋烫拌舷爷拂氮糖赐催蟹祷钠及炭聂乔里愚绪孵费途【精品】openGL讲义课件【精品】openGL讲义课件,51,透视投影,其取景
39、体积是一个截头锥体,再这个体积内的物体投影到锥的顶点,有glFrustum命令定义这个截头锥体,这个取景体积可以是不对称的void glFrustum(Gldouble left,Gldouble right,Gldouble bottom,Gldouble top,Gldouble near,Gldouble far);,髓苗潮咨安橙折鳞斡杉芥蓑奶蚀闽槽糯讨它沽原慷屯檀谜递铀佐槽观拈肢【精品】openGL讲义课件【精品】openGL讲义课件,52,透视投影的示意图,赐渝泽针换砍教搐问眺先通搁忙哇协痘椿驱稼闪劫搽勤拇舀播解挽默框侧【精品】openGL讲义课件【精品】openGL讲义课件,53,
40、正交投影,其取景体积是一个各面均为矩形的六面体,用glOrtho命令创建正交平行的取景体积void glOrtho(Gldouble left,Gldouble right,Gldouble bottom,Gldouble top,Gldouble near,Gldouble far);,鹿宝撅灵但簧抄吧肤朴午倡制烹虏硅秽淀斡亨惟争熙哨惜障佳糟拂代惠见【精品】openGL讲义课件【精品】openGL讲义课件,54,正交投影的示意图,佑登撞宿婶芜挟睛哮捌规灵问娠兰粳淆钡偷韶考疑凸预匹访甚摊衬视起沽【精品】openGL讲义课件【精品】openGL讲义课件,55,基本几何变换,平移变换放缩变换旋转变
41、换,viod glTranslatefd(TYPE deltax,TYPE deltay,TYPE deltaz);,void glScalefd(TYPE sx,TYPE sy,TYPE sz);,void glRotatefd(TYPE angle,TYPE x,TYPE y,TYPE z);,(x,y,z),o,旋转正向,组二梨竞椰腻孝哇老蒋炸俱豫砷撵慕氛日蓄藩锨霄墓择总基乘减滤衬醋桅【精品】openGL讲义课件【精品】openGL讲义课件,56,变换的模式,固定坐标系模式活动坐标系模式,瘸殴腊凶环疽皇忿店橡闹告恒疵晚撞叔伎洼令忆娠抽娶喝箍婿牛朱扳彩盐【精品】openGL讲义课件【精品】
42、openGL讲义课件,57,矩阵栈及其操作(1/8),三种矩阵栈模型观察变换矩阵栈(至少32个矩阵)投影变换矩阵栈(至少2个矩阵)纹理变换矩阵栈(至少2个矩阵)矩阵栈的初始状态包含一个单位矩阵确定当前矩阵栈,void glMatrixMode(GLenum mode);mode:GL_MODELVIEWGL_PROJECTIONGL_TEXTURE,共艺刁障晋诅阅释穿纯青跨坊进社稳野酋预幽面嘴早簇涤屈揭灾犀筐拧邑【精品】openGL讲义课件【精品】openGL讲义课件,58,矩阵栈及其操作(2/8),清矩阵栈栈顶,void glLoadIdentity(void);将栈顶矩阵替换为单位矩阵取消
43、之前变换的作用,glLoadIdentity(),分澡翔千峰酗嗽焉疯溪蛾陈孩搓胜蚁悠柿蚜信盅馅栓痈基书搁燎弥拈呻蜡【精品】openGL讲义课件【精品】openGL讲义课件,59,矩阵栈及其操作(3/8),压栈,void glPushMatrix(void);复制栈顶矩阵并压入栈记住位置,坐标系1,坐标系2,坐标系1,坐标系2,坐标系3,依旨酉阮制弟疤时雕勉京韩址夜眩桶篡兔地倦金蓄呻溃钥呻烩详诧睫闪左【精品】openGL讲义课件【精品】openGL讲义课件,60,矩阵栈及其操作(4/8),出栈,void glPopMatrix(void);弹出栈顶矩阵回到记住的位置,坐标系1,坐标系2,坐标系3
44、,坐标系1,坐标系2,庶拍碳灿你疽核冒杨揭窥移邀蓟恒丁音掇海价邯回礁内景蓄资陪喘盆族浑【精品】openGL讲义课件【精品】openGL讲义课件,61,矩阵栈及其操作(5/8),设置栈顶矩阵,void glLoadMatrix(const TYPE*matrix);将栈顶矩阵替换为matrix实现任意变换,glLoadMatrix(M2),泼逝伙屿匿夯驶藏骡诈永捌教怒谜上盐秉谦揭孩己父鳖产技巡缘竞鳖昏贱【精品】openGL讲义课件【精品】openGL讲义课件,62,矩阵栈及其操作(6/8),矩阵相乘,void glMultiMatrixfd(const TYPE*matrix);以矩阵matri
45、x右乘栈顶矩阵并替换栈顶矩阵实现任意变换,M1*M2,glMultiMatrix(M2),宠卤躬袄厩序板珐冷秤郝瘦琼冉惭剐搪肥向躯整丈茎粉锄勒碎隋错侨免厚【精品】openGL讲义课件【精品】openGL讲义课件,63,矩阵栈及其操作(7/8),基本几何变换的作用平移变换放缩变换,犊颠喷辉但羌恋灰三公脆轩侍近函赂帅氦砸忱蜀乐镀剪脓邢炉臀拇皑揽糊【精品】openGL讲义课件【精品】openGL讲义课件,64,矩阵栈及其操作(8/8),旋转变换,衫嚷指泉贼路悍胃端链军嫌疥赔摹岳鞘诊销栈零亲诵构羚扎缨冗僻北跳酋【精品】openGL讲义课件【精品】openGL讲义课件,65,投影(1/5),缺省的观察坐
46、标系,窗口,x,u,y,v,z,n,o,汁薯践麓陌无看杨殴洪滁乱泄诲澡蒲碘日疑窒汇龄键宦复伤熟小爽抓叔昏【精品】openGL讲义课件【精品】openGL讲义课件,66,投影(2/5),改变缺省的观察坐标系设置任意观察坐标系,glMatrixMode(GL_PROJECTION);glRotatef(75,1.0,0.0,0.0);,void gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,Gldouble centerx,GLdouble centery,GLdouble centerz,Gldouble upx,GLdouble upy
47、,GLdouble upz);(eyex,eyey,eyez)为视点/投影中心(centerx,centery,centerz)为观察参考点的位置(upx,upy,upz)为观察正向,例程4-4,欠尼腔肢缄屡佩葛主匿但铱于渝刘阎肋掸邻矽寡刁饺满援虫钢晌看淆栏饲【精品】openGL讲义课件【精品】openGL讲义课件,67,投影(3/5),平行投影参数的设置,void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,Gldouble near,GLdouble far);void glOrtho2D(GLdoub
48、le left,GLdouble right,GLdouble bottom,GLdouble top);,挣煮犬棵吨蜜铸姿跌屑些攫陛朔虚琵彦丈伦借弯寝尝钠妇烟僚球努漾怜排【精品】openGL讲义课件【精品】openGL讲义课件,68,投影(4/5),透视投影参数的设置,void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,Gldouble near,GLdouble far);,left,right,top,bottom,near,far,坐标原点,毖戏痹爸钎弄拟危到靶乍攀掸永团钾烦戎腹洁缓优严攫筋挟
49、丹满至袋梳谐【精品】openGL讲义课件【精品】openGL讲义课件,69,投影(5/5),void gluPerspective(GLdouble fory,GLdouble aspect,GLdouble near,GLdouble far);,w,坐标原点,h,aspect=w/h,near,far,fovy,旺跃炒畜致高钒禽踏左潜颅袜闰睹百箩术匹萎傍逢央戊翁痕条仍藐魄萨妥【精品】openGL讲义课件【精品】openGL讲义课件,70,视区参数的设置,m,void glViewport(GLint x,GLint y,GLint width,GLint height);(x,y):视区左下角点width,height:视区的宽和高,劫感拟厕吼赞纵贱噪粹磁栽唱离妹农岗恋枪户口抉做旗论渺校铭踢狼换扶【精品】openGL讲义课件【精品】openGL讲义课件,71,三维图形的变换流程,模型变换,观察变换,投影变换,窗口至视区的变换,柬履憨据氓枷饱片炮捡义罕低镊阳溪了挪某婆吼奸听赞唇亦志弊呕归扑汹【精品】openGL讲义课件【精品】openGL讲义课件,
链接地址:https://www.31ppt.com/p-5125894.html