最新计算机图形学CG11课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《最新计算机图形学CG11课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 计算机 图形学 CG11 课件
- 资源描述:
-
1、2本章目标本章目标l掌握真实感图形绘制的主要内容掌握真实感图形绘制的主要内容n光照、纹理、阴影等光照、纹理、阴影等l重点掌握光照方程、基本纹理映射及多边形绘制重点掌握光照方程、基本纹理映射及多边形绘制l学会使用学会使用OpenGL的相关函数的相关函数911.1 简单光照模型简单光照模型11.1.3 镜面反射光和冯(镜面反射光和冯(Phong)反射模型)反射模型l高光(高光(high light):光滑物体表面在点光源的照射下形成一):光滑物体表面在点光源的照射下形成一块特别亮的区域块特别亮的区域l镜面反射(镜面反射(Specular Reflection)n物体表面对入射光的反射物体表面对入射
2、光的反射n遵循反射定律遵循反射定律(1)反射光与入射光位于表面法向两侧)反射光与入射光位于表面法向两侧(2)理想反射面而言:入射角反射角)理想反射面而言:入射角反射角n观察者在反射方向上看到反射光最强观察者在反射方向上看到反射光最强1011.1 简单光照模型简单光照模型lPhong模型(非理想反射面)模型(非理想反射面)nspnspsRVKIKII)(cos计算公式:计算公式:Ks是物体表面镜面反射系数,它与是物体表面镜面反射系数,它与入射角和波长有关;入射角和波长有关;是视线与反射方向的夹角;是视线与反射方向的夹角;n 为镜面高光系数,用来模拟镜面为镜面高光系数,用来模拟镜面反射光在空间中的
3、汇聚程度,它是一反射光在空间中的汇聚程度,它是一个反映物体表面光泽度的常数;个反映物体表面光泽度的常数;近似地描述了镜面反射光的近似地描述了镜面反射光的空间分布。空间分布。ncos1111.1 简单光照模型简单光照模型l简化简化Phong模型模型LNLNRNLLNSNRLNS)(coscoscoscos22RVNHVLH/2/2)2/)((2SSHnspnspnspsNHKIRVKIKII)()(cosL,N,R都是单位向量都是单位向量1211.1 简单光照模型简单光照模型l镜面参数镜面参数 n的影响效果的影响效果n=15 n=5 n=1n 常规取值常规取值 5-205-201311.1 简单
4、光照模型简单光照模型l局部光照方程局部光照方程n结合环境光、漫反射光及镜面反射光结合环境光、漫反射光及镜面反射光n当光源与视点无穷远时,对表面上任意一点而言,当光源与视点无穷远时,对表面上任意一点而言,L和和V固定不变,固定不变,H只需计算一次只需计算一次)()(nsdpaasdeNHKNLKIIKIIIIH1411.1 简单光照模型简单光照模型11.1.4 光的衰减光的衰减n光在传播过程中,能量会衰减光在传播过程中,能量会衰减n传播过程传播过程u光源到物体表面的传播,使入射光强度变弱光源到物体表面的传播,使入射光强度变弱u物体表面到人眼的传播,使人接受到物体表面的反射光强度减弱物体表面到人眼
5、的传播,使人接受到物体表面的反射光强度减弱n光到物体表面的衰减光到物体表面的衰减n考虑衰减的方程考虑衰减的方程1,1min)(1)(22102dcdccdfddf)()()(nsdpaasdeNHKNLKIdfIKIIII1511.1 简单光照模型简单光照模型n物体表面到人眼过程中的衰减物体表面到人眼过程中的衰减u深度暗示技术(深度暗示技术(Depth Cueing)u使据视点远的点比近的点暗一些使据视点远的点比近的点暗一些亮度计算亮度计算u前参考面前参考面 n=Nf;后参考面;后参考面 n=Nb(规范化视见体内)(规范化视见体内)u分别赋比例因子分别赋比例因子Sf和和Sb(Sf Sb)u给点
6、物体上的一点的深度给点物体上的一点的深度N0,比例因子比例因子S0,)(fbbfbbfbfbbfNNNNNNNNNNNSSSSSS000001611.1 简单光照模型简单光照模型亮度计算亮度计算u光照方程计算出的光照方程计算出的I按比例按比例S0与熔合亮度与熔合亮度Idc混合混合u若若Sf=1,Sb=0,Idc=0时时(1)当物体位于前参考面前,)当物体位于前参考面前,I=I(2)当物体位于后参考面后,)当物体位于后参考面后,I=0(3)N0在在Nb和和Nf间时,间时,I=S0I,亮度部分衰减,亮度部分衰减dcISISI)(0011711.1 简单光照模型简单光照模型13.1.5 产生颜色产生
7、颜色n前面的光照模型仅用于白光,只能产生灰度前面的光照模型仅用于白光,只能产生灰度n彩色模型计算彩色模型计算u选择合适模型(如选择合适模型(如RGB、HSV等)等)u为颜色的三个分量分别建立光照方程为颜色的三个分量分别建立光照方程nRGB模型模型u光源的颜色光源的颜色IpR,IpG,IpB,环境光的颜色,环境光的颜色IaR,IaG,IaBu表面反射系数表面反射系数(1)环境反射:)环境反射:KaR,KaG,KaB(2)漫反射:)漫反射:KdR,KdG,KdB(3)镜面反射:)镜面反射:KsR,KsG,KsB1811.1 简单光照模型简单光照模型 彩色光照方程(模型)彩色光照方程(模型))()(
8、)()()()()()()(nsBdBpBaBaBBnsGdGpGaGaGGnsRdRpRaRaRRNHKNLKIdfIKINHKNLKIdfIKINHKNLKIdfIKI1911.1 简单光照模型简单光照模型11.1.6 多个光源多个光源 如果场景中有如果场景中有m个光源,那么物体上任一点的亮度应该为个光源,那么物体上任一点的亮度应该为m个光源的贡献之和个光源的贡献之和 在在RGB彩色模型中,彩色模型中,分别为分别为R、G和和B。注意:注意:I可能会超出系统允许的最大亮度值,处理方法可能会超出系统允许的最大亮度值,处理方法 (1)截去超出部分,设置为最大值)截去超出部分,设置为最大值 (2)
9、首先计算出所有亮度值,)首先计算出所有亮度值,再进行变换(如缩放变换)再进行变换(如缩放变换)使其落在系统规定范围之内使其落在系统规定范围之内minisidpiaaNHKNLKIdfIKIi1)()()(2011.1 简单光照模型简单光照模型11.1.7 OpneGL光照函数光照函数(1)OpenGL 光组成光组成 在在OpenGL简单光照模型中的几种光分为:环境光简单光照模型中的几种光分为:环境光(Ambient Light)、漫射光、漫射光(Diffuse Light)、镜面光、镜面光(Specular Light)。(2)创建光源)创建光源(Light Source)void glLig
10、htifv(GLenum light,GLenum pname,TYPE param)l创建具有某种特性的光源。其中第一个参数创建具有某种特性的光源。其中第一个参数light指定所创指定所创建的光源号,如建的光源号,如GL_LIGHT0、GL_LIGHT1、.、GL_LIGHT7。第二个参数。第二个参数pname指定光源特性,这个参数指定光源特性,这个参数的辅助信息见表的辅助信息见表11-1-7-1所示。最后一个参数设置相应的光所示。最后一个参数设置相应的光源特性值。源特性值。2111.1 简单光照模型简单光照模型函数函数glLight*()参数参数pname及及param说明说明 2211.
11、1 简单光照模型简单光照模型(3)启动光照)启动光照 l在在OpenGL中,必须明确指出光照是否有效或无效。如果光照无中,必须明确指出光照是否有效或无效。如果光照无效,则只是简单地将当前颜色映射到当前顶点上去,不进行法向、效,则只是简单地将当前颜色映射到当前顶点上去,不进行法向、光源等复杂计算,那么显示的图形就没有真实感光源等复杂计算,那么显示的图形就没有真实感l要使光照有效,首先得启动光照,即:要使光照有效,首先得启动光照,即:glEnable(GL_LIGHTING);若使光照无效,则调用若使光照无效,则调用 gDisable(GL_LIGHTING)可关闭当可关闭当前光照。前光照。l然后
12、,必须使所定义的每个光源有效。然后,必须使所定义的每个光源有效。glEnable(GL_LIGHT0);其它光源类似,只是光源号不同而已其它光源类似,只是光源号不同而已2311.1 简单光照模型简单光照模型(4)例:简单光照)例:简单光照#include#include#pragma comment(lib,glaux.lib)void myinit(void)GLfloat light_position=1.0,1.0,1.0,0.1;GLfloat light_color=1.0,0.0,0.0,1.0;glLightfv(GL_LIGHT0,GL_POSITION,light_posit
13、ion);glLightfv(GL_LIGHT0,GL_AMBIENT,light_color);glLightfv(GL_LIGHT0,GL_DIFFUSE,light_color);glLightfv(GL_LIGHT0,GL_SPECULAR,light_color);glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);glEnable(GL_DEPTH_TEST);void display(void)glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);auxSolidSphere(1.0);/绘制球体绘制球体
14、 glFlush();2411.1 简单光照模型简单光照模型void myReshape(int w,int h)glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if(w=h)glOrtho(-1.5,1.5,-1.5*(GLfloat)h/(GLfloat)w,1.5*(GLfloat)h/(GLfloat)w,-10.0,10.0);else glOrtho(-1.5*(GLfloat)w/(GLfloat)h,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5,-10.0,10.0);gl
15、MatrixMode(GL_MODELVIEW);glLoadIdentity();2511.1 简单光照模型简单光照模型void main(void)glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(250,250);glutInitWindowPosition(300,300);glutCreateWindow(Simple Lighting);myinit();glutReshapeFunc(myReshape);glutDisplayFunc(display);glutMainLoop();2611.1 简单光照模
16、型简单光照模型(5)聚光)聚光 定位光源可以定义成聚光灯形式,即将光的形状限制在一个定位光源可以定义成聚光灯形式,即将光的形状限制在一个圆锥内。圆锥内。一、定义聚光源位置。一、定义聚光源位置。因为聚光源也是定向光源,因为聚光源也是定向光源,所以他的位置同一般定向光一样。所以他的位置同一般定向光一样。如:如:GLfloat light_position=1.0,1.0,1.0,1.0;glLightfv(GL_LIGHT0,LIGHT_POSITION,light_position);2711.1 简单光照模型简单光照模型二、定义聚光截止角二、定义聚光截止角 参数参数GL_SPOT_CUTOFF
17、给定光锥的轴与中给定光锥的轴与中 心线的夹角,也可心线的夹角,也可说成是光锥顶角的一半。说成是光锥顶角的一半。缺省时,这个参数为缺省时,这个参数为180.0,即顶角为,即顶角为360度,度,光向所有的方向发射,因此聚光关闭。光向所有的方向发射,因此聚光关闭。一般在聚光启动情况下,聚光截止角限制在一般在聚光启动情况下,聚光截止角限制在0.0,90.0之间,如下面一行代码设置截止角为之间,如下面一行代码设置截止角为45度:度:glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,45.0);2811.1 简单光照模型简单光照模型三、定义聚光方向三、定义聚光方向 聚光方向决定光锥的轴,
18、它齐次坐标定义,其缺省值为聚光方向决定光锥的轴,它齐次坐标定义,其缺省值为(0.0,0.0,-1.0),即指向即指向Z负轴。聚光方向也要进行几何变换,其结果保存在视点坐标中。负轴。聚光方向也要进行几何变换,其结果保存在视点坐标中。定义如下:定义如下:GLfloat spot_direction=-1.0,-1.0,0.0,-1;glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,spot_direction);四、定义聚光指数四、定义聚光指数 参数参数GL_SPOT_EXPONENT控制光的集中控制光的集中程度,光锥中心的光强最大,越靠边的光强越小,程度,光锥中心的光强
19、最大,越靠边的光强越小,缺省时为缺省时为0。如:。如:glLightf(GL_LIGHT0,GL_SPOT_EXPONENT,2.0);2911.1 简单光照模型简单光照模型(6)例:多光源)例:多光源#include#include#pragma comment(lib,glaux.lib)/*初始化光源、材质等初始化光源、材质等*/void myinit(void)GLfloat mat_ambient=0.2,0.2,0.2,1.0;GLfloat mat_diffuse=0.8,0.8,0.8,1.0;GLfloat mat_specular=1.0,1.0,1.0,1.0;GLflo
20、at mat_shininess=50.0;GLfloat light0_diffuse=0.0,0.0,1.0,1.0;GLfloat light0_position=1.0,1.0,1.0,0.0;GLfloat light1_ambient=0.2,0.2,0.2,1.0;GLfloat light1_diffuse=1.0,0.0,0.0,1.0;GLfloat light1_specular=1.0,0.6,0.6,1.0;GLfloat light1_position=-3.0,-3.0,3.0,1.0;GLfloat spot_direction=1.0,1.0,-1.0;glM
21、aterialfv(GL_FRONT,GL_AMBIENT,mat_ambient);glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);/转下页转下页3011.1 简单光照模型简单光照模型 /接上页接上页 glLightfv(GL_LIGHT0,GL_DIFFUSE,light0_diffuse);glLightfv(GL_LIGHT0,GL_POSITION
22、,light0_position);glLightfv(GL_LIGHT1,GL_AMBIENT,light1_ambient);glLightfv(GL_LIGHT1,GL_DIFFUSE,l ight1_diffuse);glLightfv(GL_LIGHT1,GL_SPECULAR,light1_specular);glLightfv(GL_LIGHT1,GL_POSITION,light1_position);glLightf(GL_LIGHT1,GL_SPOT_CUTOFF,30.0);glLightfv(GL_LIGHT1,GL_SPOT_DIRECTION,spot_direct
23、ion);glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);glEnable(GL_LIGHT1);glDepthFunc(GL_LESS);glEnable(GL_DEPTH_TEST);3111.1 简单光照模型简单光照模型void display(void)glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glPushMatrix();glTranslated(-3.0,-3.0,3.0);/光源光源1位置位置 glDisable(GL_LIGHTING);glColor3f(1.0,0.0,0.0);au
24、xWireCube(0.1);/绘制光源绘制光源1 glEnable(GL_LIGHTING);glPopMatrix();auxSolidSphere(2.0);glFlush();3211.1 简单光照模型简单光照模型void myReshape(GLsizei w,GLsizei h)glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if(w=h)glOrtho(-5.5,5.5,-5.5*(GLfloat)h/(GLfloat)w,5.5*(GLfloat)h/(GLfloat)w,-10.0,10.0);
25、else glOrtho(-5.5*(GLfloat)w/(GLfloat)h,5.5*(GLfloat)w/(GLfloat)h,-5.5,5.5,-10.0,10.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();void main(void)glutInitDisplayMode(GLUT_SINGLE GLUT_RGBA);glutInitWindowSize(250,250);glutInitWindowPosition(300,300);glutCreateWindow(Multi_lights);myinit();glutReshape
展开阅读全文