小满(bill man)个人原创,欢迎转载,转载请注明地址,小满(bill man)的专栏地址http://blog.csdn.net/bill_man
本篇开始介绍android 3d的opengl es中的光照基本知识,在android的java开发中,使用gl.glEnable(GL10.GL_LIGHTING)打开光源,但是,这里有一点需要指出的是,如果我们只是添加了这句话而不进行其它设置的话,那么这句话起不到他应有的效果,也就是说我们不会看到光照的效果。相对而言,关闭光源则相对简单,直接在句子里加入如下这句就可以了:gl.glDisable(GL10.GL_LIGHTING)。
在opengl场景中包含8个光源,分别是GL_LIGHT0到GL_LIGHT7,它们可以是不同的颜色。和开启光照一样,如果只是启动了某灯之后如果不进行其它设置,同样达不到开灯的效果。
Opengl es中使用glLightfv的方法来设置光的性质。
首先介绍如何设置定向光,定向光就是平行的光源,我们可以认为我们的光照的光线是平行的。就是同过glLightfv设置。此函数有四个参数,第一个参数就是GL_LIGHT0到GL_LIGHT7,第二个参数表明是定向光,应该设置为GL_POSITION,第三个参数是一个float类的数组,这个数组由四个部分组成,前三个表示光方向的向量,最后一个应该设置为0表示这是个定向光。最后一个参数表示第一个数值在数组中的偏移量
定位光是从某一位置上散射出来的光源,同样是通过glLightfv来设置。第一个参数就是GL_LIGHT0到GL_LIGHT7。第二个参数参数表明是定位光,和定位光一样,也使用GL_POSITION,第三个参数是不同的,数组前三个位置是给定坐标点和原点之间的向量,最后一个参数定位量设置为1。最后一个参数表示第一个数值在数组中的偏移量
设置环境光的时候,第一个参数还是GL_LIGHT0到GL_LIGHT7。第二个参数,环境光设置为GL_AMBIENT,第三个参数的数组的四个元素是R,G,B,A四个色彩值,最后一个参数设置为0,表示第一个色彩通道值在数组中的偏移量。
设置散射光的时候,第一个参数还是GL_LIGHT0到GL_LIGHT7。第二个参数,环境光设置为GL_DIFFUSE,第三个参数的数组的四个元素是R,G,B,A四个色彩值,最后一个参数设置为0,表示第一个色彩通道值在数组中的偏移量。
镜面反射光是指光源来自一个特定的方向,并且倾向于从表面向某个特定的方向反射。设置镜面反射光的时候,第一个参数还是GL_LIGHT0到GL_LIGHT7。第二个参数,环境光设置为GL_SPECULAR,第三个参数的数组的四个元素是R,G,B,A四个色彩值,最后一个参数设置为0,表示第一个色彩通道值在数组中的偏移量
参考自Android 3d 游戏开发技术详解与典型案例,如有错误之处,希望大家多多指正
下一篇写一下法向量及材质