Open GL ES 三角形绘制
画三角形是open GL ES中最简单的入门项目,下面讲解具体的流程,方便自己总结工具类,没有别的意思。
在Android项目中引进open GL
为了使用OpenGL ES 2.0 API,需要添加如下声明:
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
创建GLSurfaceView
GLSurfaceView是用来放置图形view的容器。所有的东西都是绘制在GLSurfaceView上面的,就相当于画布的概念,
这里先实现一个GLSurfaceView。扩展自GLSurfaceView,实现自己的MyGLSurfaceView
public class MyGLSurfaceView extends GLSurfaceView {
private Context mContext;
public MyGLSurfaceView(Context context) {
super(context);
}
public MyGLSurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
创建Render
Renderer类(渲染器类),即 GLSurfaceView.Renderer的实现类,它控制了与它相关联的 GLSurfaceView 上绘制什么。
需要实现一下接口:
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
}
@Override
public void onDrawFrame(GL10 gl) {
}
- onSurfaceCreated()函数在surface创建的时候调用,所以初始化的工作在里面完成。
- onSurfaceChanged()函数在surface发生改变的时候调用;
- onDrawFrame()函数是完成surfaceview上面显示内容的绘制,每一帧的绘制都会去调用。
基础参数设置
//给shader中的变量传参数时候用到的
private final int mStrideBytes = 7 * 4; //3 + 4 3表示坐标, 4表示颜色 一共7个float变量,每个变量4字节//一次性读取 7 x 4个字节
private final int mPositionOffset = 0; //顶点坐标的偏移量
private final int mPositionDataSize = 3; //3个为一组,表示一个顶点坐标
private final int mColorOffset = 3; //颜色数据的变异量为3, 也就是每次读取数据,从第三个开始是表示颜色的
private final int mColorDataSize = 4; //4个数据都是表示颜色的
- mStrideBytes是指定buffer在读取数据的时候一次读取多少,7表示个数,7个数据, 4表示字节,7*4表示一次读取多少字节的数据。
比如:
-0.5f, -0.25f, 0.0f, //point
1.0f, 0.0f, 0.0f, 1.0f, //color
- mPositionOffset表示顶点坐标的偏移量
- mPositionDataSize表示顶底每个顶点坐标用多少个数据表示,三个:
-0.5f, -0.25f, 0.0f, //point
- mColorOffset读取颜色数据时的偏移量,因为顶点坐标用3个数据表示,所以偏移量为3
- mColorDataSize表示多少个数据表示一个颜色,4个参数分别为ARGB
顶点坐标和颜色坐标
//数据
private final float vertexData[] = {
// X, Y, Z,
// R, G, B, A
-0.5f, -0.25f, 0.0f, //point
1.0f, 0.0f, 0.0f, 1.0f, //color
0.5f, -0.25f, 0.0f, //point
0.0f, 0.0f, 1.0f, 1.0f, //color
0.0f, 0.559016994f, 0.0f,//point
0.0f, 1.0f, 0.0f, 1.0f //color
};
可以看到,每组数据有7个,前面3个表示位置坐标,后面4个表示颜色值,可以结合前面的参数设置来理解。
这个数据是程序传入openGL的数据。
创建Buffer存放数据