Android遊戲之點光

Android遊戲之點光

點光(燈光)特點是有固定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);

}

}

評論