小满(bill man)个人原创,欢迎转载,转载请注明地址,小满(bill man)的专栏地址http://blog.csdn.net/bill_man
1.法向量
在光学中,有一个概念非常重要,就是法向量,物体每个顶点的法向量决定了光照的反射情况,只有为顶点设置法向量,系统可以正常地进行反射工作,物体每个顶点的法向量是指处于三维物体表面处的法线方向,是一个由三个元素组成的数组。
有两种设置法向量的方法,分别是面法向量法和点平均法向量法,这两种确定法向量的方法分别有其不同的使用的场合,其中面法向量法适合实现本身棱角分明的物体,比如立方体,四棱锥等,而点平均法向量法适合于球面及表面光滑的物体。
面法向量法是指当某个顶点属于某个三角面的时候,我们找到和该面垂直的垂线就是该面的法向量,这里有个问题,比如正方体的某个点属于三个面,那么我们如何确定它的法向量呢?由于opengl es不支持一个点有多个法向量,所以我们这一个顶点会分别和三个法向量组成三组,每个顶点符合某个面。
点平均法向量是当一个点属于多个面的时候,就是分别求出它属于的几个面的法向量,求出平均值即是此点的法向量。
2.材质
设置材质就是设置物体对于不同光源的反射能力,也就是说材质的反射效果,通过glMaterialfv,其中四个参数。
第一个参数设置材质能反光的面,设置为GL10.GL_FRONT_AND_BACK,可以实现正反面均反光的光线
第二个参数是设置反射的光,GL_AMBIENT为环境光,GL_DIFFUSE为散射光,GL_SPECULAR为镜面光,还有一个高反射区域的光GL10.GL_SHININESS.
第三个参数,对于环境光,散射光,镜面光,是一个四元参数表示rgba的值,而对于高光反射区域设置一个参数,数越大高亮区域越小,越暗。
最后一个参数是数组中偏移量,一般为0
参考自Android 3d 游戏开发技术详解与典型案例,如有错误之处,希望大家多多指正
下一篇写一下纹理映射