OpenGL-ES-Android坐标和画点

在上一篇的基础上,使用OpenGL ES绘制三个点。

(0,0,0)是位于屏幕中央的点。屏幕的坐标如下,都是 -1.0~1.0 的范围。

三个点的坐标:

-0.0f, -0.0f, 0.0f | -0.5f, 0.0f, 0.0f | 0.5f, 0.0f, 0.0f

private void drawPoint(GL10 gl) {
    //存放三个顶点坐标
    float[] vertexArray = new float[]{
        -0.0f, -0.0f, 0.0f,
        -0.5f, 0.0f, 0.0f,
        0.5f, 0.0f, 0.0f
    };
    //分配一个length*4的大小是因为:ByteBuffer是以byte(1字节)为单位存储,而需要获取一个FloatBuffer,是以float(4字节)为单位存储
    ByteBuffer vbb = ByteBuffer.allocateDirect(vertexArray.length * 4);
    //修改此缓冲区的字节顺序为nativeOrder(底层平台的本机字节顺序)
    vbb.order(ByteOrder.nativeOrder());
    //vertex最大容量为:vertexArray.length * 4/4,因为float(4个字节)
    FloatBuffer vertex = vbb.asFloatBuffer();
    vertex.put(vertexArray);
    vertex.position(0);
    gl.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);    //设置当前颜色为红色
    gl.glPointSize(10f);    //设置绘制点的大小
    gl.glLoadIdentity();	//在每次绘制之前,让视图矩阵回到初始状态。(一般在TRanslate和Rotate之前需要调用)
    gl.glTranslatef(0, 0, -4);
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);       //打开通道的顶点开关
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertex);    //设置顶点坐标
    gl.glDrawArrays(GL10.GL_POINTS, 0, 3);    			//绘制3个顶点
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);    	//关闭通道的顶点开关
}