计算机图形学CG.ppt
《计算机图形学CG.ppt》由会员分享,可在线阅读,更多相关《计算机图形学CG.ppt(68页珍藏版)》请在三一办公上搜索。
1、1,第11章 真实感图形的绘制,2,本章目标,掌握真实感图形绘制的主要内容光照、纹理、阴影等重点掌握光照方程、基本纹理映射及多边形绘制学会使用OpenGL的相关函数,3,第11章 真实感图形的绘制,简单光照模型多边形绘制方法纹理映射阴影,4,11.1 简单光照模型,光作用反射透射(透明物体)被物体吸收转化为热能假设物体不透明,即没有透射光光种类环境光、漫反射光和镜面反射光,只有反射光和透射光决定物体的颜色,5,11.1 简单光照模型,11.1.1 环境光(Ambient light)在物体和周围环境之间多次反射后,最终达到平衡时的一种光,又称为背景光光强(度):空间上分布均匀,即任何位置和方向
2、光强度一样,亮度值记为Ia反射系数:与物体表面性质有关,决定物体表面呈现的亮度,记为Ka光照模型方程 Ie=Ka Ia Ie为物体表面呈现的亮度,Ka=0.4 Ka=0.8,6,11.1 简单光照模型,11.1.2 漫反射(Diffuse Reflection)点光源:向周围所有方向发射等强度的光漫反射光是由物体表面的粗糙不平引起的,它均匀地向各个方向传播,与视点无关漫反射光在空间均匀分布,反射光强 I 与入射光的入射角 的余弦成正比,即:其中,Kd 是漫反射系数(01之间的常数),与物体表面性质有关;Ip 是入射光(光源)的光强;是入射光的入射角,即入射光与物体表面法向量之间的夹角,7,11
3、.1 简单光照模型,向量表示的计算设物体表面在照射点 P 处的单位法向量为N,P 到点光源的单位向量为L,则上式可表达为如下的向量形式:,如果有多个光源,则可以把各个光源的漫反射光照效果进行叠加:,8,11.1 简单光照模型,环境光与漫反射光结合方程:例子:,9,11.1 简单光照模型,11.1.3 镜面反射光和冯(Phong)反射模型高光(high light):光滑物体表面在点光源的照射下形成一块特别亮的区域镜面反射(Specular Reflection)物体表面对入射光的反射遵循反射定律(1)反射光与入射光位于表面法向两侧(2)理想反射面而言:入射角反射角观察者在反射方向上看到反射光最
4、强,10,11.1 简单光照模型,Phong模型(非理想反射面),计算公式:,Ks是物体表面镜面反射系数,它与入射角和波长有关;是视线与反射方向的夹角;n 为镜面高光系数,用来模拟镜面反射光在空间中的汇聚程度,它是一个反映物体表面光泽度的常数;近似地描述了镜面反射光的空间分布。,11,11.1 简单光照模型,简化Phong模型,S,S,L,N,R都是单位向量,12,11.1 简单光照模型,镜面参数 n的影响效果,n=15 n=5 n=1,n 常规取值 5-20,13,11.1 简单光照模型,局部光照方程结合环境光、漫反射光及镜面反射光当光源与视点无穷远时,对表面上任意一点而言,L和V固定不变,
5、H只需计算一次,14,11.1 简单光照模型,11.1.4 光的衰减光在传播过程中,能量会衰减传播过程光源到物体表面的传播,使入射光强度变弱物体表面到人眼的传播,使人接受到物体表面的反射光强度减弱光到物体表面的衰减考虑衰减的方程,15,11.1 简单光照模型,物体表面到人眼过程中的衰减深度暗示技术(Depth Cueing)使据视点远的点比近的点暗一些亮度计算前参考面 n=Nf;后参考面 n=Nb(规范化视见体内)分别赋比例因子Sf和Sb(Sf Sb)给点物体上的一点的深度N0,比例因子S0,16,11.1 简单光照模型,亮度计算光照方程计算出的I按比例S0与熔合亮度Idc混合若Sf=1,Sb
6、=0,Idc=0时(1)当物体位于前参考面前,I=I(2)当物体位于后参考面后,I=0(3)N0在Nb和Nf间时,I=S0I,亮度部分衰减,17,11.1 简单光照模型,13.1.5 产生颜色前面的光照模型仅用于白光,只能产生灰度彩色模型计算选择合适模型(如RGB、HSV等)为颜色的三个分量分别建立光照方程RGB模型光源的颜色IpR,IpG,IpB,环境光的颜色IaR,IaG,IaB表面反射系数(1)环境反射:KaR,KaG,KaB(2)漫反射:KdR,KdG,KdB(3)镜面反射:KsR,KsG,KsB,18,11.1 简单光照模型,彩色光照方程(模型),19,11.1 简单光照模型,11.
7、1.6 多个光源 如果场景中有m个光源,那么物体上任一点的亮度应该为m个光源的贡献之和 在RGB彩色模型中,分别为R、G和B。注意:I可能会超出系统允许的最大亮度值,处理方法(1)截去超出部分,设置为最大值(2)首先计算出所有亮度值,再进行变换(如缩放变换)使其落在系统规定范围之内,20,11.1 简单光照模型,11.1.7 OpneGL光照函数(1)OpenGL 光组成 在OpenGL简单光照模型中的几种光分为:环境光(Ambient Light)、漫射光(Diffuse Light)、镜面光(Specular Light)。(2)创建光源(Light Source)void glLight
8、ifv(GLenum light,GLenum pname,TYPE param)创建具有某种特性的光源。其中第一个参数light指定所创建的光源号,如GL_LIGHT0、GL_LIGHT1、.、GL_LIGHT7。第二个参数pname指定光源特性,这个参数的辅助信息见表11-1-7-1所示。最后一个参数设置相应的光源特性值。,21,11.1 简单光照模型,函数glLight*()参数pname及param说明,22,11.1 简单光照模型,(3)启动光照 在OpenGL中,必须明确指出光照是否有效或无效。如果光照无效,则只是简单地将当前颜色映射到当前顶点上去,不进行法向、光源等复杂计算,那么
9、显示的图形就没有真实感要使光照有效,首先得启动光照,即:glEnable(GL_LIGHTING);若使光照无效,则调用 gDisable(GL_LIGHTING)可关闭当前光照。然后,必须使所定义的每个光源有效。glEnable(GL_LIGHT0);其它光源类似,只是光源号不同而已,23,11.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.
10、0,1.0;glLightfv(GL_LIGHT0,GL_POSITION,light_position);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|
11、GL_DEPTH_BUFFER_BIT);auxSolidSphere(1.0);/绘制球体 glFlush();,24,11.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*(G
12、Lfloat)w/(GLfloat)h,-1.5,1.5,-10.0,10.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();,25,11.1 简单光照模型,void main(void)glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(250,250);glutInitWindowPosition(300,300);glutCreateWindow(Simple Lighting);myinit();glutReshapeFunc(myReshape);glutDisplayF
13、unc(display);glutMainLoop();,26,11.1 简单光照模型,(5)聚光 定位光源可以定义成聚光灯形式,即将光的形状限制在一个圆锥内。一、定义聚光源位置。因为聚光源也是定向光源,所以他的位置同一般定向光一样。如:GLfloat light_position=1.0,1.0,1.0,1.0;glLightfv(GL_LIGHT0,LIGHT_POSITION,light_position);,27,11.1 简单光照模型,二、定义聚光截止角 参数GL_SPOT_CUTOFF给定光锥的轴与中 心线的夹角,也可说成是光锥顶角的一半。缺省时,这个参数为180.0,即顶角为36
14、0度,光向所有的方向发射,因此聚光关闭。一般在聚光启动情况下,聚光截止角限制在0.0,90.0之间,如下面一行代码设置截止角为45度:glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,45.0);,28,11.1 简单光照模型,三、定义聚光方向 聚光方向决定光锥的轴,它齐次坐标定义,其缺省值为(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
15、);四、定义聚光指数 参数GL_SPOT_EXPONENT控制光的集中程度,光锥中心的光强最大,越靠边的光强越小,缺省时为0。如:glLightf(GL_LIGHT0,GL_SPOT_EXPONENT,2.0);,29,11.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=
16、1.0,1.0,1.0,1.0;GLfloat 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_direc
17、tion=1.0,1.0,-1.0;glMaterialfv(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);/转下页,30,11.1 简单光照模型,/接上页 glLightfv(GL_LIGHT0,GL_DIFFUSE,light0_diffuse);glLightfv(GL_LIGHT0,
18、GL_POSITION,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,
19、spot_direction);glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);glEnable(GL_LIGHT1);glDepthFunc(GL_LESS);glEnable(GL_DEPTH_TEST);,31,11.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
20、);auxWireCube(0.1);/绘制光源1 glEnable(GL_LIGHTING);glPopMatrix();auxSolidSphere(2.0);glFlush();,32,11.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);els
21、e 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();glutReshapeFu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 CG
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6143893.html