一、概述
偶然看到一个游戏的人物动画,联想到在安卓中绘制3D图形,因为基本在平时的开发中基本都是用canvas绘制自定义View,很少使用这些图形的绘制,因此借此机会练练基本操作,国际惯例看下运行效果
这个gif有BUG,开始我以为没录上,所以期动后愣了一会才反应过来,所以有一些卡顿,凑活看吧。。。。
二、OpenGL与OpenGL ES
OpenGl的全称 Open Graphics Library即开放的图形接口,它定义了一个跨编程语言、跨平台的编程接口规范,它主要用于三维图形的绘制,但在手机等手持终端上运行OpenGl有些不太合适,因此安卓系统内置的是OpenGL ES。
三、2D图形的绘制
先来点简单的部分,万一直接来复杂的部分,吓跑同学怎么办。。。
在Activity中使用:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GLSurfaceView glSurfaceView = new GLSurfaceView(this);
MyRenderer renderer = new MyRenderer();
glSurfaceView.setRenderer(renderer);
setContentView(glSurfaceView);
}
代码很简单,仔细看代码,就可以看出来里面除了创建GLSurfaceView的对象外,只有MyRenderer,一看便知道基本代码中以My开头的类,都是自己实现的子类,所以2D图形绘制也一样,最主要的就是提供一个Renderer;
public class MyRenderer implements GLSurfaceView.Renderer {
public MyRenderer() {
triangleDataBuffer = floatBufferUtil(triangleData);
rectDataBuffer = floatBufferUtil(rectData);
rectDataBuffer2 = floatBufferUtil(rectData2);
pentacleBuffer = floatBufferUtil(pentacle);
triangleColorBuffer = intBufferUtil(triangleColor);
rectColorBuffer = intBufferUtil(rectColor);
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
//关闭抖动
gl.glDisable(GL10.GL_DITHER);
//设置系统透视修正
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
//清除背景
gl