Android遊戲之定向光

Android遊戲之定向光

定向光具有方向但沒有位置.首先在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);

}

}

評論