class DemoCubeRenderer implements Renderer {
Cube c;
@Override
public void onDrawFrame(GL10 gl) {
c.draw(gl);
}
@Override
public void onSurfaceChanged(GL10 gl, int w, int h) {
//设置视区大小
gl.glViewport(0, 0, w, h);
//设置投影矩阵
gl.glMatrixMode(GL10.GL_PROJECTION);
//加载特效投影矩阵
gl.glLoadIdentity();
float ratio = (float) w / h;
//设置投影锥形参数
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
//设置投影矩阵
gl.glMatrixMode(GL10.GL_MODELVIEW);
//加载特效投影矩阵
gl.glLoadIdentity();
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
//使能深度测试
gl.glEnable(GL10.GL_DEPTH_TEST);
//使能顶点
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
//使能颜色
gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
c = new Cube();
}
}
class Cube {
private FloatBuffer mVertexBuffer;
private FloatBuffer mColorBuffer;
private ByteBuffer mIndexBuffer;
public Cube() {
float[] vertices = {
-1f, -1f, -1f,
1f, -1f, -1f,
1f, 1f, -1f,
-1f, 1f, -1f,
-1f, -1f, 1f,
1f, -1f, 1f,
1f, 1f, 1f,
-1f, 1f, 1f,
};
float[] colors = {
0, 0, 0, 1f,
1f, 0, 0, 1f,
1f, 1f, 0, 1f,
0, 1f, 0, 1f,
0, 0, 1f, 1f,
1f, 0, 1f, 1f,
1f, 1f, 1f, 1f,
0, 1f, 1f, 1f,
};
//立方体每个面都有两个三角组成,整个立方体有六个面,就有12个三角面
byte indices[] = {
0, 4, 5, 0, 5, 1,
1, 5, 6, 1, 6, 2,
2, 6, 7, 2, 7, 3,
3, 7, 4, 3, 4, 0,
4, 7, 6, 4, 6, 5,
3, 0, 1, 3, 1, 2
};
ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length*4);
vbb.order(ByteOrder.nativeOrder());
mVertexBuffer = vbb.asFloatBuffer();
mVertexBuffer.put(vertices);
mVertexBuffer.position(0);
ByteBuffer cbb = ByteBuffer.allocateDirect(colors.length*4);
cbb.order(ByteOrder.nativeOrder());
mColorBuffer = cbb.asFloatBuffer();
mColorBuffer.put(colors);
mColorBuffer.position(0);
mIndexBuffer = ByteBuffer.allocateDirect(indices.length);
mIndexBuffer.put(indices);
mIndexBuffer.position(0);
}
public void draw(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
gl.glTranslatef(1.8f, -1.8f, -6.0f);
gl.glFrontFace(GL10.GL_CW);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer);
gl.glColorPointer(4, GL10.GL_FLOAT, 0, mColorBuffer);
gl.glDrawElements(GL10.GL_TRIANGLES, 36, GL10.GL_UNSIGNED_BYTE, mIndexBuffer);
gl.glFinish();
}
}
Android只GLSurfaceView画立方体测试代码
最新推荐文章于 2021-05-25 23:37:25 发布