import android.opengl.GLSurfaceView.Renderer;然后创建一个类实现Renderer接口
public class GameView implements Renderer { }在类中必须实现 3个抽象方法:
public void onDrawFrame(GL10 gl) public void onSurfaceChanged(GL10 gl, int width, int height) public void onSurfaceCreated(GL10 gl, EGLConfig config)当窗口被创建时需要调用onSurfaceCreated,所以可以在这里进行一些初始化工作,例如:
// 告诉系统对透视进行修正 gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST); // 黑色背景 gl.glClearColor(0, 0, 0, 0); // 启用阴影平滑 gl.glShadeModel(GL10.GL_SMOOTH);其中glHint用于告诉OpenGL进行最好的透视修正,这会轻微的影响性能,但会是得透视图看起来好一点。
gl.glClearDepthf(1.0f);// 设置深度缓存 gl.glEnable(GL10.GL_DEPTH_TEST);// 启用深度测试 gl.glDepthFunc(GL10.GL_LEQUAL);// 所做深度测试类型
gl.glViewport(0, 0, width, height);// 设置OpenGL场景大小将屏幕设置为透视视图,这意味着越远的东西看起来越小。这么做创建了一个现实外观的场景。gl.glMatrixMode(GL10.GL_PROJECTION);指明接下来的代码将影响projection matrix(投影矩阵),投影矩阵负责为场景增加透视。gl.glLoadIdentity();近似于重置,它将所选的矩阵状态恢复成原始状态,调用gl.glLoadIdentity();之后场景设置透视图。gl.glMatrixMode(GL10.GL_MODELVIEW);指明任何新的变换将会影响modelview matrix(模型观察矩阵)模型观察矩阵中存放了物体的信息。重置模型观察矩阵:
gl.glMatrixMode(GL10.GL_PROJECTION);// 设置投影矩阵 gl.glLoadIdentity();// 重置投影矩阵 gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);// 设置窗口大小 gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glLoadIdentity();glFrustumf前面4个参数用于确定窗口大小,后面两个参数分别是在场景中所能绘制的深度和终点。
//清除屏幕和深度缓存 gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); gl.glLoadIdentity();最后通过调用GLSurfaceView类的setRenderer方法将自己构建的类设置为默认的Renderer,通过setContentView方法时Activity显示GLSurfaceView即可:
Renderer render = new GameView(); GLSurfaceView glView = new GLSurfaceView(this); glView.setRenderer(render); setContentView(glView);
版权声明:本文为博主原创文章,未经博主允许不得转载。