Android 3D 游戏学习笔记(5)-法向量及材质

小满(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 游戏开发技术详解与典型案例,如有错误之处,希望大家多多指正

下一篇写一下纹理映射

posted @ 2012-03-04 18:24  满硕泉  阅读(197)  评论(0编辑  收藏  举报