This page looks best with JavaScript enabled

OpenGL-ES-Line

 ·  ☕ 2 min read
  • 绘制了x,y坐标轴
  • 绘制了4条直线

一些函数说明:

  1. gl.glLoadIdentity():
    将当前画布矩阵的状态回归初始状态。

    因为Translate``Rotate等操作都是基于当前画布矩阵的状态,如果在每次调用Translate之前不使用glLoadIdentity(),画布则会一直移动。

  2. gl.glTranslatef(0, 0, -4):
    将画布后移4个单位。

  3. gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertex):设置顶点

    参数说明:

    • 每个顶点的坐标个数(只能是2,3,4中的一个,默认值是4)
    • 每个顶点的数据类型(可取常量:GL_BYTE, GL_SHORT,GL_FIXED,GL_FLOAT)
    • 连续顶点之间的排列方式(如果为0,数组中的顶点就会被认为是按照紧凑方式排列的,默认值为0)
    • 数组的首地址(Android中就是数组名)
  4. gl.glDrawArrays(GL10.GL_LINE_STRIP, 0, 4):绘制函数

    参数说明:

    • 绘制方式:
      • GL_POINTS:点
      • GL_LINES:线,2点构成的独立的线
      • GL_LINE_LOOP:线,所有点连接的线,首尾相接
      • GL_LINE_STRIP:线,所有点连接的线,首尾不相接
      • GL_TRIANGLES:三角形,3点构成的独立的三角形
      • GL_TRIANGLE_STRIP:三角形,详见
      • GL_TRIANGLE_FAN:三角形,详见
    • 从数组缓存中的哪一位开始绘制,一般为0
    • 数组中顶点的数量
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
private void drawLine(GL10 gl) {
    //画坐标轴
    float[] vertexArr1 = {
            -1.0f, 0.0f, 0.0f,
            1.0f, 0.0f, 0.0f,
            0.0f, 1.0f, 0.0f,
            0.0f, -1.0f, 0.0f
    };

    ByteBuffer byteBuffer = ByteBuffer.allocateDirect(vertexArr1.length * 4);
    byteBuffer.order(ByteOrder.nativeOrder());
    FloatBuffer floatBuffer1 = byteBuffer.asFloatBuffer();
    floatBuffer1.put(vertexArr1);
    floatBuffer1.position(0);
    gl.glColor4f(0.0f, 1.0f, 0.0f, 0.0f);
    gl.glLineWidth(5.0f);
    gl.glLoadIdentity();
    gl.glTranslatef(0, 0, -4);
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, floatBuffer1);
    gl.glDrawArrays(GL10.GL_LINES, 0, 4);
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

    //4条线
    float[] vertexArr2 = {
            -0.5f, -0.5f, 0f,
            0.0f, .5f, 0f,
            0.5f, -0.5f, 0f,
            0.9f, -0.0f, 0f,
    };
    byteBuffer = ByteBuffer.allocateDirect(vertexArr2.length * 4);
    byteBuffer.order(ByteOrder.nativeOrder());
    FloatBuffer floatBuffer2 = byteBuffer.asFloatBuffer();
    floatBuffer2.put(vertexArr2);
    floatBuffer2.position(0);
    gl.glColor4f(1.0f, 0.0f, 0.0f, 0.0f);
    gl.glLineWidth(20.0f);
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, floatBuffer2);
    gl.glDrawArrays(GL10.GL_LINE_STRIP, 0, 4);
}
Support the author with
alipay QR Code
wechat QR Code

Yang
WRITTEN BY
Yang
Developer