點光(燈光)特點是有固定3D位置.首先你需要啟用0號燈光
gl.glEnable(GL10.GL_LIGHT0);
設定燈光顏色,燈光索引為0,最後一個參數是顏色數組偏移量.
float[] ambient = {1.0f, 1.0f, 1.0f, 1.0f};// 點光-環境色
float[] diffuse = {1.0f, 1.0f, 1.0f, 1.0f};// 點光-漫反射色
float[] specular = {0.0f, 0.0f, 0.0f, 1.0f};// 點光-高亮顏色
gl.glLightfv(GL10.GL_LIGHT0,GL10.GL_AMBIENT, ambient, 0);
gl.glLightfv(GL10.GL_LIGHT0,GL10.GL_DIFFUSE, diffuse, 0);
gl.glLightfv(GL10.GL_LIGHT0,GL10.GL_SPECULAR, specular, 0);
設定燈光位置,設定3D空間xyz座標,第四個元素必須設置為1,即光源有位置.
float[] position = {0, 0, 0, 1};// 點光-位置
gl.glLightfv(GL10.GL_LIGHT0,GL10.GL_POSITION, position, 0);
完成渲染後關閉燈光
gl.glDisable(GL10.GL_LIGHT0);
燈光類代碼
public class LightPoint {
private float[] ambient = {1.0f, 1.0f, 1.0f, 1.0f};// 點光-環境色
private float[] diffuse = {1.0f, 1.0f, 1.0f, 1.0f};// 點光-漫反射色
private float[] specular = {0.0f, 0.0f, 0.0f, 1.0f};// 點光-高亮顏色
private float[] position = {0, 0, 0, 1};// 燈光位置
int id = 0;// 燈光ID
構造點光(燈泡) 燈光ID輸入:GL10.GL_LIGHT0至GL10.GL_LIGHT7
public LightPoint(int ID ){
this.id = ID;// 燈光ID
}
設定點光(燈泡)位置
public void setPosition(float x,float y,float z){
position[0] = x;
position[1] = y;
position[2] = z;
position[3] = 1;
}
設定點光(燈泡)顏色
public void setColor(float r,float g,float b){
ambient[0] = r;
ambient[1] = g;
ambient[2] = b;
ambient[3] = 1;
}
使能點光(燈泡)
public void enable(){
GL10 gl = GRAPHICS.gl;
gl.glEnable(id);//使能
gl.glLightfv(id,GL10.GL_AMBIENT, ambient, 0);
gl.glLightfv(id,GL10.GL_DIFFUSE, diffuse, 0);
gl.glLightfv(id,GL10.GL_SPECULAR, specular, 0);
gl.glLightfv(id,GL10.GL_POSITION, position, 0);
}
屏蔽點光(燈泡)
public void disable(){
GL10 gl = GRAPHICS.gl;
gl.glDisable(id);
}
}
你必須登入才能發表留言。