OpenGL ES是个跨平台的3D图形开发包规范,最常见的实现是采用C语言实现的,Android OpenGL ES 实现上是使用Java 语言对底层的C接口进行了封装,因此在android.opengl javax.microedition.khronos.egl ,javax.microedition.khronos.opengles 包中定义的OpenGL相关的类和方法带有很强的C语言色彩。
在前面Android OpenGL ES 开发中的Buffer使用 说过OpenGL ES 说过为了提高性能,通常将顶点,颜色等值存放在java.nio 包中定义的Buffer类中。下表列出了OpenGL ES指令后缀, Java类型,Java Buffer(java.nio)类型的对照表
如下面代码 将为顶点指定color 值,使用FloatBuffer 来存放顶点的Color数组
- // The colors mapped to the vertices.
- float[] colors = {
- 1f, 0f, 0f, 1f, // vertex 0 red
- 0f, 1f, 0f, 1f, // vertex 1 green
- 0f, 0f, 1f, 1f, // vertex 2 blue
- 1f, 0f, 1f, 1f, // vertex 3 magenta
- };
- ...
- // float has 4 bytes, colors (RGBA) * 4 bytes
- ByteBuffer cbb
- = ByteBuffer.allocateDirect(colors.length * 4);
- cbb.order(ByteOrder.nativeOrder());
- colorBuffer = cbb.asFloatBuffer();
- colorBuffer.put(colors);
- colorBuffer.position(0);