上一讲我们大致讲了如何绘制ply。但是这还不够,你得到的东西看起来就像是一个颜色块。这是因为这个世界没有光,我们要加上光照的效果。为此,我们在Init函数里这样设置
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
这样我们开启了光照功能,并启动了light0,你可以依葫芦画瓢的启动light1,2,3,4……不过,要注意的是,在opengl管线编程,也就是像我们这样用函数设置各种效果的编程下,能启动的光源是有限的。同时,开启光源将关闭你的所有关于颜色的定义。
接着我们把光源绑在相机上,这样方便我们看清楚模型的每一个毛孔。
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glLightfv(GL_LIGHT0, GL_POSITION, l_position);
gluLookAt(b, c, a,
T_x, T_y, T_z,
0, 1, 0);
1_position是一个数组,{0,0,0,1},前三个数据代表相机位置,最后一个一般情况下是1,如果想弄面光源(英文说是direction light),就写0,前三个参数就会变成光源方向。其他的值参考书里没讲,有兴趣的自己查吧。我们在调用视点变化函数指定相机状态之前说明光源位置,光源就会一起做变化,因为这里放在了(0,0,0),也就是相机初始点,所以之后不管怎么动,光源都在相机的地方。
同时,我们对于法向量也要设置,这样opengl才能计