物體都由特定材質構成.材質決定照射在物體上光返射方式並會改變反射光顏色.材質為多邊形設置材質屬性用於光照計算,它是全域性影響所有繪製多邊形,直到它在次調用.OpenGL ES中需要為每種材質指定『環境色』『漫反射色』『鏡面反射色』RGBA顏色值.此材質吸收光.只有『光源顏色』與『材質顏色』最小值運算(RGB值)得到『反射光顏色』
材質顏色 | 光源顏色 | 反射光顏色『最小值運算』 |
(0,1,0) | (1,1,1) | (0,1,0) |
(0,1,0) | (1,0,0) | (0,0,0) |
(0,0,1) | (1,1,1) | (0,0,1) |
材質類代碼
public class Material {
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 = {1.0f, 1.0f, 1.0f, 1.0f};// 材質-鏡面顏色
//設置材質環境色
public void setAmbient(float r,float g,float b){
ambient[0]=r;
ambient[1]=g;
ambient[2]=b;
ambient[3]=1;
}
// 設置材質漫反射色
public void setDiffuse(float r,float g,float b){
diffuse[0]=r;
diffuse[1]=g;
diffuse[2]=b;
diffuse[3]=1;
}
// 設置材質鏡面反射色
public void setSpecular(float r,float g,float b){
specular[0]=r;
specular[1]=g;
specular[2]=b;
specular[3]=1;
}
//使能材質
public void enable(){
GL10 gl = GRAPHICS.gl;
gl.glMaterialfv(GL10.GL_FRONT_AND_BACK,GL10.GL_AMBIENT, ambient, 0);// 環境色
gl.glMaterialfv(GL10.GL_FRONT_AND_BACK,GL10.GL_DIFFUSE, diffuse, 0);// 漫反射色
gl.glMaterialfv(GL10.GL_FRONT_AND_BACK,GL10.GL_SPECULAR, specular,0);// 鏡面反射色
}
}