打开,关闭光照
gl.glEnable(GL10.GL_LIGHTING);//允许光照
gl.glDisable(GL10.GL_LIGHTING);//关掉光照
打开后还要其他设置
。。。//每次先关闭n号灯
。。。//打开n号灯
。。。//设置n号灯
。。。//初始化材质
//begin 绘制
//begin 开启光照一定要开户向量
//开启顶点向量数据
gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);
//为画笔指定顶点法向量数据
gl.glNormalPointer(GL10.GL_FIXED, 0, mNormalBuffer);
//end 开启光照一定要开户向量
//绘制drawSelf
//end 绘制
然后还要加下这句
gl.glLoadIdentity();
定向光,定位光
void javax.microedition.khronos.opengles.GL10.glLightfv(int light, int pname, float[] params, int offset)
light GL10.GL_LIGHT0,GL10.GL_LIGHT1.。。。
pname GL10.GL_POSITION
params 一般四个数,最后一个数如果是,0表示定向,1表示定位
offset 为偏移量,一般设置为0,0表示第1个值在数组中的偏移量为0
光源颜色
其实就是就是照在物休上三部分的颜色
void javax.microedition.khronos.opengles.GL10.glLightfv(int light, int pname, float[] params, int offset)
light GL10.GL_LIGHT0,GL10.GL_LIGHT1.。。。
pname GL10.GL_AMBIENT(背面,环境光)GL10.GL_DIFFUSE(中间,散射光),GL10.GL_SPECULAR(前面,反射光)
params 一般四个数,最后一个数如果是,0表示定向,1表示定位
offset 为偏移量,一般设置为0,0表示第1个色彩通道的值在数组中的偏移量为0
//环境光设置
float[] ambientParams={0.1f,0.1f,0.1f,1.0f};//光参数 RGBA
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, ambientParams,0);
//散射光设置
float[] diffuseParams={0.5f,0.5f,0.5f,1.0f};//光参数 RGBA
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_DIFFUSE, diffuseParams,0);
//反射光设置
float[] specularParams={1.0f,1.0f,1.0f,1.0f};//光参数 RGBA
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_SPECULAR, specularParams,0);
物体的材质
void javax.microedition.khronos.opengles.GL10.glMaterialfv(int face, int pname, float[] params, int offset)
face 设置材质能反光的面,设置为GL10.GL_FRONT_AND_BACK,可以实现正反面均可反射光线。
pname GL10.GL_AMBIENT(背面,环境光)GL10.GL_DIFFUSE(中间,散射光),GL10.GL_SPECULAR(前面,反射光), GL10.GL_SHININESS(高光反射区域)
params GL10.GL_SHININESS设置一个参数(参数越大高亮区域越小,越暗),其他设置RGBA
offset 一般设置为0
//环境光为白色材质
float ambientMaterial[] = {0.4f, 0.4f, 0.4f, 1.0f};
gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_AMBIENT, ambientMaterial,0);
//散射光为白色材质
float diffuseMaterial[] = {0.8f, 0.8f, 0.8f, 1.0f};
gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_DIFFUSE, diffuseMaterial,0);
//高光材质为白色
float specularMaterial[] = {1.0f, 1.0f, 1.0f, 1.0f};
gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_SPECULAR, specularMaterial,0);
//高光反射区域,数越大高亮区域越小越暗
float shininessMaterial[] = {1.5f};
gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_SHININESS, shininessMaterial,0);
//蓝色自发光
float emission[] = {0.0f, 0.0f, 0.3f, 1.0f};
gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_EMISSION, emission,0);