OpenGL中的颜色、光照和材质(六)——某个光照方案

六、某个光照方案
     本光照方案用于某CAD系统,因为只需体现对象的立体感,所以只考虑辐射光和漫射光,忽略环境光和镜面光。假定对象颜色为”R,G,B” ,辐射光材质取”0.4*R, 0.4*G, 0.4*B”,作为对象的底色,与光源无关,与法向无关。漫射光取”0.5, 0.5, 0.5”,漫射光材质取”R, G, B” ,对象表面的明暗效果随表面法向的不同而不同。
 
1.设置光照模式
GLfloat lightmodel_ambient[]={0.0, 0.0, 0.0, 1.0};              //全局环境光

glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lightmodel_ambient);     //全局环境光
glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 0);                  //远视点
glLightModeli(LIGHT_MODEL_TWO_SIDE, 0);                         //单面光照 
 
2.设置光源 1
glEnable(GL_LIGHTING);                                          //打开光照计算
glEnable(GL_LIGHT0);                                            //启动光源0
glEnable(GL_LIGHT1);                                            //启动光源1

//光源1
GLfloat light0_ambient[] = { 0.0, 0.0, 0.0, 1.0 };              //环境光
GLfloat light0_diffuse[]   = { 0.5, 0.5, 0.5, 1.0 };            //漫射光
GLfloat light0_specular[] = { 0.0, 0.0, 0.0, 1.0 };             //镜面反射光
GLfloat light0_position[]  = { 0.4, 0.8, 0.6, 0.0 };            //平行光方向
glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light0_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light0_position);	
 
3.设置光源 2
GLfloat light1_ambient[] = { 0.0, 0.0, 0.0, 1.0 };              //环境光
GLfloat light1_diffuse[]   = { 0.5, 0.5, 0.5, 1.0 };            //漫射光
GLfloat light1_specular[] = { 0.0, 0.0, 0.0, 1.0 };             //镜面反射光
GLfloat light1_position[] = { -0.4, -0.8, 0.6, 0.0 };           //平行光方向
glLightfv(GL_LIGHT1, GL_AMBIENT, light1_ambient);
glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse);
glLightfv(GL_LIGHT1, GL_SPECULAR, light1_specular);
glLightfv(GL_LIGHT1, GL_POSITION, light1_position);

4.设置材质
GLfloat mat_emission[] = { 0.4*R, 0.4*G, 0.4*B, 1.0};           //辐射光材质
GLfloat mat_ambient[]  = { 0.0, 0.0, 0.0, 1.0};                 //环境光材质
GLfloat mat_diffuse[]    = { R, G, B, 1.0};                     //漫射光材质
GLfloat mat_specular[]  = { 0.0, 0.0, 0.0, 1.0 };               //镜面光材质
GLfloat mat_shininess[] = { 100.0 };                            //镜面指数

glMaterialfv(GL_FRONT,GL_EMISSION, mat_emission);
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);
 
5.光照方向示意图
   

6.光照效果图
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值