opengl es demo(有附件)

创建android工程
以下代码有一个activity类 和一些 renderer的渲染类
在附件里有项目工程,这里共享给大家一起研究下
有什么好的提议,欢迎给我留言啊。
activity:

package com.tracy;

import android.app.Activity;
import android.graphics.Color;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.LinearLayout;

public class Test extends Activity {
/** Called when the activity is first created. */
GLSurfaceView glSurfaceView;
GLTexRender glRender;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

glSurfaceView = new GLSurfaceView(this);
glRender = new GLTexRender(this);
glSurfaceView.setRenderer(glRender);
// Log.i("tracy", "glSurfaceView"+glSurfaceView.getTop()+" "+glSurfaceView.getWidth()+" "+glSurfaceView.getHeight());

LinearLayout ll = new LinearLayout(this);
ll.addView(glSurfaceView);
ll.setBackgroundColor(Color.WHITE);
setContentView(ll);
Log.i("tracy", "glSurfaceView"+glSurfaceView.getTop()+" "+glSurfaceView.getWidth()+" "+glSurfaceView.getHeight());
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
glSurfaceView.onPause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
glSurfaceView.onResume();
}
// @Override
// public boolean onKeyDown(int keyCode, KeyEvent event) {
// Log.i("tracy", "onKeyDown");
// switch(keyCode){
//
// case KeyEvent.KEYCODE_DPAD_LEFT:
// glRender.yflag=-1;
// glRender.key=true;
// glRender.leftOrRight=true;
// glRender.upOrDown=false;
// break;
// case KeyEvent.KEYCODE_DPAD_RIGHT:
// glRender.yflag=1;
// glRender.key=true;
// glRender.leftOrRight=true;
// glRender.upOrDown=false;
// break;
// case KeyEvent.KEYCODE_DPAD_UP:
// glRender.xflag=-1;
// glRender.key=true;
// glRender.leftOrRight=false;
// glRender.upOrDown=true;
// break;
// case KeyEvent.KEYCODE_DPAD_DOWN:
// glRender.xflag=1;
// glRender.key=true;
// glRender.leftOrRight=false;
// glRender.upOrDown=true;
// break;
// case KeyEvent.KEYCODE_DPAD_CENTER:
// Log.i("tracy", "KEYCODE_DPAD_CENTER");
// if(glRender.onOrOffLight){
// glRender.onOrOffLight=false;
// }else{
// glRender.onOrOffLight=true;
// }
// glRender.fogMode();
// break;
// }
// return super.onKeyDown(keyCode, event);
// }
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
Log.i("tracy", "onKeyUp");
// glRender.key=false;
return super.onKeyUp(keyCode, event);
}


}


GLRender.java

package com.tracy;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.IntBuffer;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.opengl.GLUtils;
import android.opengl.GLSurfaceView.Renderer;
import android.util.Log;

public class GLRender implements Renderer {

public GLRender(Context context) {
bm[0] = BitmapFactory.decodeResource(context.getResources(),
R.drawable.icon);
// TODO Auto-generated constructor stub
}

private static final String tag = "tracy";
private int one = 0x10000;
// 三角形旋转角度
// private float rotateTri = 0.2f;
private int[] a = { 0, 40000, 0, 0, 0, 0, 60000, 0, 0 };
// 三角形三个顶点
// private IntBuffer triggerBuffer = IntBuffer.wrap(a);

// private IntBuffer texBuffer = IntBuffer.wrap(new int[] { 0, 40000, 0, 0,
// 60000, 0 });
int[] tex={0, 0, 1, 0,
0, 1,1,1 };

private int[] b = { one, 0, 0, one, 0, one, 0, one, 0, 0, one, one };
private IntBuffer colorBuffer = IntBuffer.wrap(b);

@Override
public void onDrawFrame(GL10 gl) {
// TODO Auto-generated method stub
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glColor4f(1, 0, 0, 0);
gl.glLoadIdentity();
gl.glTranslatef(-0.5f, 0.0f, -1.0f);
gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[0]);

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

// rotateTri+=0.5f;
// gl.glRotatef(rotateTri, 0, 1, 0);

gl.glColorPointer(4, GL10.GL_FIXED, 0, colorBuffer);
gl.glVertexPointer(3, GL10.GL_FIXED, 0, getNativeIntBuffer(a));
gl.glTexCoordPointer(2, GL10.GL_FIXED, 0, getNativeIntBuffer(tex));

gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);

gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

gl.glDisableClientState(GL10.GL_COLOR_ARRAY);





}

@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
// TODO Auto-generated method stub
Log.i(tag, "onSurfaceChanged");
float ratio = (float) width / height;
// 设置OpenGL场景的大小
gl.glViewport(0, 0, width, height);
// 设置投影矩阵
gl.glMatrixMode(GL10.GL_PROJECTION);
// 重置投影矩阵
gl.glLoadIdentity();
// 设置视口的大小
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
// 选择模型观察矩阵
gl.glMatrixMode(GL10.GL_MODELVIEW);
// 重置模型观察矩阵
gl.glLoadIdentity();
}

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
// TODO Auto-generated method stub
Log.i(tag, "onSurfaceCreated");
// 启用阴影平滑
gl.glShadeModel(GL10.GL_SMOOTH);
//
// 黑色背景
gl.glClearColor(0, 0, 0, 0);
//
// 设置深度缓存
gl.glClearDepthf(1.0f);
// 启用深度测试
gl.glEnable(GL10.GL_DEPTH_TEST);
// 所作深度测试的类型
gl.glDepthFunc(GL10.GL_LEQUAL);
//
// 告诉系统对透视进行修正
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
// 允许2D贴图,纹理
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glEnable(GL10.GL_CULL_FACE);

IntBuffer intBuffer = IntBuffer.allocate(1);

gl.glGenTextures(1, intBuffer);
texture = intBuffer.array();

// 设置要使用的纹理
gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[0]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm[0], 0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
GL10.GL_LINEAR);
}

int[] texture;
Bitmap[] bm = new Bitmap[5];

private IntBuffer getNativeIntBuffer(int[] buffer) {
ByteBuffer ibb = ByteBuffer.allocateDirect(buffer.length * 4);
ibb.order(ByteOrder.nativeOrder());
IntBuffer ibf = ibb.asIntBuffer();

ibf.put(buffer);
ibf.position(0);
return ibf;
}

}


GLTexRender.java

package com.tracy;

import java.nio.IntBuffer;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.opengl.GLUtils;
import android.opengl.GLSurfaceView.Renderer;

public class GLTexRender implements Renderer {
Bitmap[] bm = new Bitmap[6];
float rotx=0.2f;
float roty=0.2f;
float rotz=0.2f;
public GLTexRender(Context context) {
super();
bm[0] = BitmapFactory.decodeResource(context.getResources(), R.drawable.a);
bm[1] = BitmapFactory.decodeResource(context.getResources(), R.drawable.b);
bm[2] = BitmapFactory.decodeResource(context.getResources(), R.drawable.c);
bm[3] = BitmapFactory.decodeResource(context.getResources(), R.drawable.d);
bm[4] = BitmapFactory.decodeResource(context.getResources(), R.drawable.e);
bm[5] = BitmapFactory.decodeResource(context.getResources(), R.drawable.f);
}
int one = 0x10000;
private IntBuffer quaterBuffer = IntBuffer.wrap(new int[]{
// FRONT
-one, -one, one, one, -one, one,
-one, one, one, one, one, one,
// BACK
-one, -one, -one, -one, one, -one,
one, -one, -one, one, one, -one,
// LEFT
-one, -one, one, -one, one, one,
-one, -one, -one, -one, one, -one,
// RIGHT
one, -one, -one, one, one, -one,
one, -one, one, one, one, one,
// TOP
-one, one, one, one, one, one,
-one, one, -one, one, one, -one,
// BOTTOM
-one, -one, one, -one, -one, -one,
one, -one, one, one, -one, -one,
});

IntBuffer texCoords=IntBuffer.wrap(new int[]{
0,one,one,one,0,0,one,0,
one,one,one,0,0,one,0,0,
one,one,one,0,0,one,0,0,
one,one,one,0,0,one,0,0,
one,0,0,0,one,one,0,one,
0,0,0,one,one,0,one,one,
});


@Override
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -5.0f);

gl.glRotatef(rotx, 1, 0, 0);
gl.glRotatef(roty, 0, 1, 0);
gl.glRotatef(rotz, 0, 0, 1);


gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

gl.glVertexPointer(3, GL10.GL_FIXED, 0, quaterBuffer);
gl.glTexCoordPointer(2, GL10.GL_FIXED, 0, texCoords);



this.bindTexturePic(gl);

gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
rotx+=0.5f;
roty+=0.5f;
rotz+=0.5f;
}
//指定纹理图片
private void bindTexturePic(GL10 gl){
gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[0]);
// gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 4, GL10.GL_UNSIGNED_BYTE, indices);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[1]);
// gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 4, GL10.GL_UNSIGNED_BYTE, indices);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 4, 4);


gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[2]);
// gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 4, GL10.GL_UNSIGNED_BYTE, indices);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 8, 4);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[3]);
// gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 4, GL10.GL_UNSIGNED_BYTE, indices);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 12, 4);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[4]);
// gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 4, GL10.GL_UNSIGNED_BYTE, indices);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 16, 4);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[5]);
// gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 4, GL10.GL_UNSIGNED_BYTE, indices);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 20, 4);
}

@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
float ratio = (float) width / height;
//设置OpenGL场景的大小
gl.glViewport(0, 0, width, height);
//设置投影矩阵
gl.glMatrixMode(GL10.GL_PROJECTION);
//重置投影矩阵
gl.glLoadIdentity();
// 设置视口的大小
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
// 选择模型观察矩阵
gl.glMatrixMode(GL10.GL_MODELVIEW);
// 重置模型观察矩阵
gl.glLoadIdentity();

}

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
// 启用阴影平滑
gl.glShadeModel(GL10.GL_SMOOTH);
//
// 黑色背景
gl.glClearColor(0, 0, 0, 0);


// 设置深度缓存
gl.glClearDepthf(1.0f);
// 启用深度测试
gl.glEnable(GL10.GL_DEPTH_TEST);
// 所作深度测试的类型
gl.glDepthFunc(GL10.GL_LEQUAL);
//
// 告诉系统对透视进行修正
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);

//允许2D贴图,纹理
gl.glEnable(GL10.GL_TEXTURE_2D);
// gl.glEnable(GL10.GL_CULL_FACE);
toTex(gl);

}
int[] texture= new int[6];

//纹理映射
private void toTex(GL10 gl){
IntBuffer intBuffer = IntBuffer.allocate(6);

gl.glGenTextures(6, intBuffer);
texture=intBuffer.array();

// 设置要使用的纹理
gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[0]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm[0], 0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[1]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm[1], 0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[2]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm[2], 0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[3]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm[3], 0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[4]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm[4], 0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[5]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm[5], 0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
}

}


GLBlendRender.java

package com.tracy;

import java.nio.IntBuffer;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.opengl.GLUtils;
import android.opengl.GLSurfaceView.Renderer;

public class GLBlendRender implements Renderer {
Bitmap[] bm = new Bitmap[6];
float rotx=0.2f;
float roty=0.2f;
float rotz=0.2f;
public boolean key=true;
public GLBlendRender(Context context) {
super();
bm[0] = BitmapFactory.decodeResource(context.getResources(), R.drawable.a);
bm[1] = BitmapFactory.decodeResource(context.getResources(), R.drawable.b);
bm[2] = BitmapFactory.decodeResource(context.getResources(), R.drawable.c);
bm[3] = BitmapFactory.decodeResource(context.getResources(), R.drawable.d);
bm[4] = BitmapFactory.decodeResource(context.getResources(), R.drawable.e);
bm[5] = BitmapFactory.decodeResource(context.getResources(), R.drawable.f);
}
int one = 0x10000;
private IntBuffer quaterBuffer = IntBuffer.wrap(new int[]{
// FRONT
-one, -one, one, one, -one, one,
-one, one, one, one, one, one,
// BACK
-one, -one, -one, -one, one, -one,
one, -one, -one, one, one, -one,
// LEFT
-one, -one, one, -one, one, one,
-one, -one, -one, -one, one, -one,
// RIGHT
one, -one, -one, one, one, -one,
one, -one, one, one, one, one,
// TOP
-one, one, one, one, one, one,
-one, one, -one, one, one, -one,
// BOTTOM
-one, -one, one, -one, -one, -one,
one, -one, one, one, -one, -one,
});
//纹理坐标
IntBuffer texCoords=IntBuffer.wrap(new int[]{
0,one,one,one,0,0,one,0,
one,one,one,0,0,one,0,0,
one,one,one,0,0,one,0,0,
one,one,one,0,0,one,0,0,
one,0,0,0,one,one,0,one,
0,0,0,one,one,0,one,one,
});


@Override
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -5.0f);

gl.glRotatef(rotx, 1, 0, 0);
gl.glRotatef(roty, 0, 1, 0);
gl.glRotatef(rotz, 0, 0, 1);


gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

gl.glVertexPointer(3, GL10.GL_FIXED, 0, quaterBuffer);
gl.glTexCoordPointer(2, GL10.GL_FIXED, 0, texCoords);
this.bindTexturePic(gl);

gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
rotx+=0.5f;
roty+=0.5f;
rotz+=0.5f;
//混合开关
if (key)
{
gl.glEnable(GL10.GL_BLEND); // 打开混合
gl.glDisable(GL10.GL_DEPTH_TEST); // 关闭深度测试
}
else
{
gl.glDisable(GL10.GL_BLEND); // 关闭混合
gl.glEnable(GL10.GL_DEPTH_TEST); // 打开深度测试
}
}
//指定纹理图片
private void bindTexturePic(GL10 gl){
gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[0]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[1]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 4, 4);


gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[2]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 8, 4);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[3]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 12, 4);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[4]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 16, 4);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[5]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 20, 4);
}

@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
float ratio = (float) width / height;
//设置OpenGL场景的大小
gl.glViewport(0, 0, width, height);
//设置投影矩阵
gl.glMatrixMode(GL10.GL_PROJECTION);
//重置投影矩阵
gl.glLoadIdentity();
// 设置视口的大小
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
// 选择模型观察矩阵
gl.glMatrixMode(GL10.GL_MODELVIEW);
// 重置模型观察矩阵
gl.glLoadIdentity();

}

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
// 启用阴影平滑
gl.glShadeModel(GL10.GL_SMOOTH);
//
// 黑色背景
gl.glClearColor(0, 0, 0, 0);


// 设置深度缓存
gl.glClearDepthf(1.0f);
// 启用深度测试
gl.glEnable(GL10.GL_DEPTH_TEST);
// 所作深度测试的类型
gl.glDepthFunc(GL10.GL_LEQUAL);
//
// 告诉系统对透视进行修正
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);

//设置光线,,1.0f为全光线,a=50%
gl.glColor4f(1.0f,1.0f,1.0f,0.5f);
// 基于源象素alpha通道值的半透明混合函数
gl.glBlendFunc(GL10.GL_SRC_ALPHA,GL10.GL_ONE);

//允许2D贴图,纹理
gl.glEnable(GL10.GL_TEXTURE_2D);
// gl.glEnable(GL10.GL_CULL_FACE);
toTex(gl);

}
int[] texture= new int[6];

//纹理映射
private void toTex(GL10 gl){
IntBuffer intBuffer = IntBuffer.allocate(6);

gl.glGenTextures(6, intBuffer);
texture=intBuffer.array();

// 设置要使用的纹理
gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[0]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm[0], 0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[1]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm[1], 0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[2]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm[2], 0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[3]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm[3], 0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[4]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm[4], 0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[5]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm[5], 0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
}

public void OnKeyDown(){
if(key){
key=false;
}else{
key=true;
}

}
}


GLFogRender.java

package com.tracy;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.opengl.GLUtils;
import android.opengl.GLSurfaceView.Renderer;
import android.util.Log;

public class GLFogRender implements Renderer {
Bitmap[] bm = new Bitmap[6];
float rotx = 0.2f;
float roty = 0.2f;
float rotz = 0.2f;
public int xflag = 1;
public int yflag = 1;
public boolean leftOrRight = false;
public boolean upOrDown = false;
public boolean key = false;

// public float pz;
public GLFogRender(Context context) {
super();
bm[0] = BitmapFactory.decodeResource(context.getResources(),
R.drawable.a);
bm[1] = BitmapFactory.decodeResource(context.getResources(),
R.drawable.b);
bm[2] = BitmapFactory.decodeResource(context.getResources(),
R.drawable.c);
bm[3] = BitmapFactory.decodeResource(context.getResources(),
R.drawable.d);
bm[4] = BitmapFactory.decodeResource(context.getResources(),
R.drawable.e);
bm[5] = BitmapFactory.decodeResource(context.getResources(),
R.drawable.f);
}

int one = 0x10000;
private IntBuffer quaterBuffer = IntBuffer
.wrap(new int[] {
// FRONT
-one, -one, one, one, -one, one, -one,
one,
one,
one,
one,
one,
// BACK
-one, -one, -one, -one, one, -one, one, -one,
-one,
one,
one,
-one,
// LEFT
-one, -one, one, -one, one, one, -one, -one, -one,
-one,
one,
-one,
// RIGHT
one, -one, -one, one, one, -one, one, -one, one, one,
one,
one,
// TOP
-one, one, one, one, one, one, -one, one, -one, one, one,
-one,
// BOTTOM
-one, -one, one, -one, -one, -one, one, -one, one, one,
-one, -one, });

IntBuffer texCoords = IntBuffer.wrap(new int[] { 0, one, one, one, 0, 0,
one, 0, one, one, one, 0, 0, one, 0, 0, one, one, one, 0, 0, one,
0, 0, one, one, one, 0, 0, one, 0, 0, one, 0, 0, 0, one, one, 0,
one, 0, 0, 0, one, one, 0, one, one, });

// 定义环境光源数组
float[] lightAmbient = { 0.5f, 0.5f, 0.5f, 1.0f };
// 定义漫射光源数组
float[] lightDiffuse = { 1.0f, 1.0f, 0.5f, 1.0f };
// 光源位置
float[] lightPosition = { 0.0f, 0.0f, 2.0f, 1.0f };

float fogColor[] = { 0.8f, 0.2f, 0.2f, 1.0f }; // 雾的颜色设为白色
int fogMode[] = { GL10.GL_EXP, GL10.GL_EXP2, GL10.GL_LINEAR }; // 雾气的模式
int fogfilter = 0; // 使用哪一种雾气
GL10 mGl10;

public void fogMode() {
Log.i("tracy", "fogfilter="+fogfilter);
mGl10.glFogf(GL10.GL_FOG_MODE, fogMode[fogfilter++]); // 设置雾气的模式
fogfilter = fogfilter > 2 ? 0 : fogfilter;
}

@Override
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -5.0f);
// 如果不启用GL_LIGHTING光就什么都看不见
gl.glEnable(GL10.GL_LIGHTING);

// gl.glRotatef(rotz, 0, 0, 1);
gl.glRotatef(roty, 0, 1, 0);
gl.glRotatef(rotx, 1, 0, 0);

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

gl.glVertexPointer(3, GL10.GL_FIXED, 0, quaterBuffer);
gl.glTexCoordPointer(2, GL10.GL_FIXED, 0, texCoords);

this.bindTexturePic(gl);

gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

if (key) {
if (upOrDown) {
rotx += 0.5f * xflag;
}
if (leftOrRight) {
roty += 0.5f * yflag;
}

// rotz+=0.5f;
}
if (onOrOffLight) {
gl.glEnable(GL10.GL_LIGHT1);
} else {
gl.glDisable(GL10.GL_LIGHT1);
}

}

// 指定纹理图片
private void bindTexturePic(GL10 gl) {
gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[0]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[1]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 4, 4);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[2]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 8, 4);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[3]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 12, 4);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[4]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 16, 4);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[5]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 20, 4);
}

@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
float ratio = (float) width / height;
// 设置OpenGL场景的大小
gl.glViewport(0, 0, width, height);
// 设置投影矩阵
gl.glMatrixMode(GL10.GL_PROJECTION);
// 重置投影矩阵
gl.glLoadIdentity();
// 设置视口的大小
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
// 选择模型观察矩阵
gl.glMatrixMode(GL10.GL_MODELVIEW);
// 重置模型观察矩阵
gl.glLoadIdentity();

}

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
mGl10 = gl;
// 启用阴影平滑
gl.glShadeModel(GL10.GL_SMOOTH);
//
// 设置背景的颜色为雾气的颜色
gl.glClearColor(0.8f,0.2f,0.2f,1.0f);

gl.glFogx(GL10.GL_FOG_MODE, fogMode[fogfilter]); // 设置雾气的模式
gl.glFogfv(GL10.GL_FOG_COLOR, fogColor,0); // 设置雾的颜色
gl.glFogf(GL10.GL_FOG_DENSITY, 0.35f); // 设置雾的密度
gl.glHint(GL10.GL_FOG_HINT, GL10.GL_DONT_CARE); // 设置系统如何计算雾气
gl.glFogf(GL10.GL_FOG_START, 1.0f); // 雾气的开始位置
gl.glFogf(GL10.GL_FOG_END, 5.0f); // 雾气的结束位置
gl.glEnable(GL10.GL_FOG); // 使用雾气

// 设置深度缓存
gl.glClearDepthf(1.0f);
// 启用深度测试
gl.glEnable(GL10.GL_DEPTH_TEST);
// 所作深度测试的类型
gl.glDepthFunc(GL10.GL_LEQUAL);
//
// 告诉系统对透视进行修正
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);

// 允许2D贴图,纹理
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glEnable(GL10.GL_CULL_FACE);
toTex(gl);
initLight(gl);

}

// 初始化光源
private void initLight(GL10 gl) {
// 设置环境光
gl.glLightfv(GL10.GL_LIGHT1, GL10.GL_AMBIENT,
getNativeBuffer(lightAmbient));
// set diffuse light
gl.glLightfv(GL10.GL_LIGHT1, GL10.GL_DIFFUSE,
getNativeBuffer(lightDiffuse));
// set light position
gl.glLightfv(GL10.GL_LIGHT1, GL10.GL_POSITION,
getNativeBuffer(lightPosition));
}

public boolean onOrOffLight = true;
int[] texture = new int[6];

// 纹理映射
private void toTex(GL10 gl) {
IntBuffer intBuffer = IntBuffer.allocate(6);

gl.glGenTextures(6, intBuffer);
texture = intBuffer.array();

// 设置要使用的纹理
gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[0]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm[0], 0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
GL10.GL_LINEAR);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[1]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm[1], 0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
GL10.GL_LINEAR);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[2]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm[2], 0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
GL10.GL_LINEAR);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[3]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm[3], 0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
GL10.GL_LINEAR);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[4]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm[4], 0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
GL10.GL_LINEAR);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[5]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm[5], 0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
GL10.GL_LINEAR);
}

private FloatBuffer getNativeBuffer(float[] buffer) {
ByteBuffer ibb = ByteBuffer.allocateDirect(buffer.length * 8);
ibb.order(ByteOrder.nativeOrder());
FloatBuffer fb = ibb.asFloatBuffer();
fb.put(buffer);
fb.position(0);
return fb;

}

}


GLLightRender.java

package com.tracy;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.opengl.GLUtils;
import android.opengl.GLSurfaceView.Renderer;

public class GLLightRender implements Renderer {
Bitmap[] bm = new Bitmap[6];
float rotx=0.2f;
float roty=0.2f;
float rotz=0.2f;
public int xflag=1;
public int yflag=1;
public boolean leftOrRight=false;
public boolean upOrDown=false;
public boolean key=false;
// public float pz;
public GLLightRender(Context context) {
super();
bm[0] = BitmapFactory.decodeResource(context.getResources(), R.drawable.a);
bm[1] = BitmapFactory.decodeResource(context.getResources(), R.drawable.b);
bm[2] = BitmapFactory.decodeResource(context.getResources(), R.drawable.c);
bm[3] = BitmapFactory.decodeResource(context.getResources(), R.drawable.d);
bm[4] = BitmapFactory.decodeResource(context.getResources(), R.drawable.e);
bm[5] = BitmapFactory.decodeResource(context.getResources(), R.drawable.f);
}
int one = 0x10000;
private IntBuffer quaterBuffer = IntBuffer.wrap(new int[]{
// FRONT
-one, -one, one, one, -one, one,
-one, one, one, one, one, one,
// BACK
-one, -one, -one, -one, one, -one,
one, -one, -one, one, one, -one,
// LEFT
-one, -one, one, -one, one, one,
-one, -one, -one, -one, one, -one,
// RIGHT
one, -one, -one, one, one, -one,
one, -one, one, one, one, one,
// TOP
-one, one, one, one, one, one,
-one, one, -one, one, one, -one,
// BOTTOM
-one, -one, one, -one, -one, -one,
one, -one, one, one, -one, -one,
});

IntBuffer texCoords=IntBuffer.wrap(new int[]{
0,one,one,one,0,0,one,0,
one,one,one,0,0,one,0,0,
one,one,one,0,0,one,0,0,
one,one,one,0,0,one,0,0,
one,0,0,0,one,one,0,one,
0,0,0,one,one,0,one,one,
});

//定义环境光源数组
float[] lightAmbient={0.5f,0.5f,0.5f,1.0f};
//定义漫射光源数组
float[] lightDiffuse={1.0f,1.0f,0.5f,1.0f};
//光源位置
float[] lightPosition={0.0f,0.0f,2.0f,1.0f};


@Override
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -5.0f);
//如果不启用GL_LIGHTING光就什么都看不见
gl.glEnable(GL10.GL_LIGHTING);


// gl.glRotatef(rotz, 0, 0, 1);
gl.glRotatef(roty, 0, 1, 0);
gl.glRotatef(rotx, 1, 0, 0);


gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

gl.glVertexPointer(3, GL10.GL_FIXED, 0, quaterBuffer);
gl.glTexCoordPointer(2, GL10.GL_FIXED, 0, texCoords);



this.bindTexturePic(gl);

gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

if(key){
if(upOrDown){
rotx+=0.5f*xflag;
}
if(leftOrRight){
roty+=0.5f*yflag;
}


// rotz+=0.5f;
}
if(onOrOffLight){
gl.glEnable(GL10.GL_LIGHT1);
}else{
gl.glDisable(GL10.GL_LIGHT1);
}

}
//指定纹理图片
private void bindTexturePic(GL10 gl){
gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[0]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[1]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 4, 4);


gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[2]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 8, 4);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[3]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 12, 4);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[4]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 16, 4);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[5]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 20, 4);
}

@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
float ratio = (float) width / height;
//设置OpenGL场景的大小
gl.glViewport(0, 0, width, height);
//设置投影矩阵
gl.glMatrixMode(GL10.GL_PROJECTION);
//重置投影矩阵
gl.glLoadIdentity();
// 设置视口的大小
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
// 选择模型观察矩阵
gl.glMatrixMode(GL10.GL_MODELVIEW);
// 重置模型观察矩阵
gl.glLoadIdentity();

}

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
// 启用阴影平滑
gl.glShadeModel(GL10.GL_SMOOTH);
//
// 黑色背景
gl.glClearColor(0, 0, 0, 0);


// 设置深度缓存
gl.glClearDepthf(1.0f);
// 启用深度测试
gl.glEnable(GL10.GL_DEPTH_TEST);
// 所作深度测试的类型
gl.glDepthFunc(GL10.GL_LEQUAL);
//
// 告诉系统对透视进行修正
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);

//允许2D贴图,纹理
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glEnable(GL10.GL_CULL_FACE);
toTex(gl);
initLight(gl);

}
//初始化光源
private void initLight(GL10 gl){
//设置环境光
gl.glLightfv(GL10.GL_LIGHT1, GL10.GL_AMBIENT, getNativeBuffer(lightAmbient));
//set diffuse light
gl.glLightfv(GL10.GL_LIGHT1, GL10.GL_DIFFUSE, getNativeBuffer(lightDiffuse));
//set light position
gl.glLightfv(GL10.GL_LIGHT1, GL10.GL_POSITION, getNativeBuffer(lightPosition));
}
public boolean onOrOffLight=true;
int[] texture= new int[6];

//纹理映射
private void toTex(GL10 gl){
IntBuffer intBuffer = IntBuffer.allocate(6);

gl.glGenTextures(6, intBuffer);
texture=intBuffer.array();

// 设置要使用的纹理
gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[0]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm[0], 0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[1]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm[1], 0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[2]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm[2], 0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[3]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm[3], 0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[4]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm[4], 0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[5]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm[5], 0);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
}

private FloatBuffer getNativeBuffer(float[] buffer){
ByteBuffer ibb = ByteBuffer.allocateDirect(buffer.length * 8);
ibb.order(ByteOrder.nativeOrder());
FloatBuffer fb =ibb.asFloatBuffer();
fb.put(buffer);
fb.position(0);
return fb;

}

}

你可能感兴趣的:(opengl)