定向光具有方向但沒有位置.首先在3D空間定義一個點,而『方向』表示為該點指向『原點』向量之方向.若在3D空間右則射過來定向光
public class LightDirectional {
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[] direction = {0, 0, -1, 0};// 定向光-方向
int id = 0;// 燈光ID
構造定向光.燈光id:GL10.GL_LIGHT0至GL10.GL_LIGHT7
public LightDirectional(int ID){
this.id = ID;// 燈光ID
}
設置方向,將位置轉換為方向.將w分量設0,代表方向
public void setDirection(float x,float y,float z){
direction[0] = -x;
direction[1] = -y;
direction[2] = -z;
direction[3] = 0;
}
設置定向光顏色
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, direction, 0);
}
定向光屏蔽
public void disable(GL10 gl){
gl.glDisable(id);
}
}