资源描述:
《《光线跟踪算法》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、光线跟踪算法主要内容:一、实验设计二、静止多光源实现三、材料属性对光照效果的影响四、移动光源的实现实验设计问题一、影响光照效果的因素?问题二、OPENGL光线跟踪函数的函数?问题三、光线跟踪实现的基本步骤?一、OPENGL中影响光照效果的因素?1、光源光的种类:环境光:light_ambient散射光:light_diffuse镜面光:light_specular光源的分类:方向性光源:无限远,所有光线是平行的位置性光源:位置决定场景中的效果区别:GLfloatlight_position[]中的第四个参数2、材料属性材料的环境颜色:GL_AMBIENT材
2、料的散射颜色:GL_DIFFUSE材料的镜面颜色:GL_SPECULAR材料的镜面指数:GL_SHININESS材料的发射颜色:GL_EMISSION问题二、OPENGL光线跟踪函数的函数?光源:voidglLight{if}(GLenumlight,GLenumpname,TYPEparam);voidglLight{if}v(GLenumlight,GLenumpname,TYPE*param);Light:指定光源pname:光源属性param:属性值材料属性:voidglMaterial{if}(GLenumface,GLenumpname,TYP
3、Eparam);voidglMaterial{if}v(GLenumface,GLenumpname,TYPE*param);Face:那个面受光照pname:光源属性param:属性值问题三、光线跟踪实现的基本步骤?一、创建光源二、选择光照模型三、定义材料属性有了这些知识,我们就可以进行第一个简单的多光源实验。静止多光源实现自己的工作:按照光线跟踪实现的步骤进行。设置光源参数,衰减因子,聚光灯参数,材料属性参数,调用glLightfv,glMaterialfv,glEnable等函数进行设置。已有的:实现静态光源显示voidreshape(intw,in
4、th)voiddisplay(void)创建光源1、设置光源参数方向性光源,环境光颜色为蓝色GLfloatlight_ambient[]={0.0,0.0,1.0,1.0};GLfloatlight_diffuse[]={1.0,1.0,1.0,1.0};GLfloatlight_specular[]={1.0,1.0,1.0,1.0};GLfloatlight_position[]={1.0,1.0,1.0,0.0};位置性光源,环境光和散射光颜色为红色GLfloatlight1_ambient[]={1.0,0.0,0.0,1.0};GLfloatli
5、ght1_diffuse[]={1.0,0.0,0.0,1.0};GLfloatlight1_specular[]={1.0,1.0,1.0,1.0};GLfloatlight1_position[]={0.0,2.0,2.0,1.0};2、衰减因子定义衰减因子目的:增强真实效果glLightf(GL_LIGHT0,GL_CONSTANT_ATTENUATION,2.0);glLightf(GL_LIGHT0,GL_LINEAR_ATTENUATION,1.0);glLightf(GL_LIGHT0,GL_QUADRATIC_ATTENUATION,0.5
6、);glLightf(GL_LIGHT1,GL_CONSTANT_ATTENUATION,1.5);glLightf(GL_LIGHT1,GL_LINEAR_ATTENUATION,0.5);glLightf(GL_LIGHT1,GL_QUADRATIC_ATTENUATION,0.2);三个参数的默认值为1,0,03,聚光灯参数光源LIGHT1GLfloatspot_direction[]={1.0,-1.0,-1.0};glLightfv(GL_LIGHT1,GL_SPOT_DIRECTION,spot_direction);glLightf(GL_L
7、IGHT1,GL_SPOT_CUTOFF,45.0);//默认值180glLightf(GL_LIGHT1,GL_SPOT_EXPONENT,5.0);//用于控制光的集中度,越高强度越集中4,glLightfv的调用glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient);glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular);glLightfv(GL_LIGHT0,GL_POSITION,
8、light_position);glLightfv(GL_LIGH