OpenGL ES 3.0

android平台下OpenGL ES 3.0绘制彩色三角形

2018-11-08  本文已影响10人  Andy周

OpenGL ES 3.0学习实践

本例基于android平台下OpenGLES3.0绘制圆点、直线和三角形

目录

顶点着色器

#version 300 es
layout (location = 0) in vec4 vPosition;
layout (location = 1) in vec4 aColor;
out vec4 vColor;
void main() {
     gl_Position  = vPosition;
     gl_PointSize = 10.0;
     vColor = aColor;
}

上述顶点着色器的描述:

片段着色器

#version 300 es
precision mediump float;
in vec4 vColor;
out vec4 fragColor;
void main() {
     fragColor = vColor;
}

上述片段着色器的描述:

基于sdk绘制彩色三角形

private float color[] = {
            0.0f, 1.0f, 0.0f, 1.0f,
            1.0f, 0.0f, 0.0f, 1.0f,
            0.0f, 0.0f, 1.0f, 1.0f
};

由于虚拟机OpenGL运行环境不同,需要将虚拟机数据传输到native层供其使用

构造函数中: 将颜色数据传输到native

colorBuffer = ByteBuffer.allocateDirect(color.length * 4)
                .order(ByteOrder.nativeOrder())
                .asFloatBuffer();
//传入指定的数据
colorBuffer.put(color);
colorBuffer.position(0);

开始绘制:

@Override
public void onDrawFrame(GL10 gl) {
    GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT);

    //准备坐标数据
    GLES30.glVertexAttribPointer(0, POSITION_COMPONENT_COUNT, GLES30.GL_FLOAT, false, 0, vertexBuffer);
    //启用顶点的句柄
    GLES30.glEnableVertexAttribArray(0);

    //绘制三角形颜色
    GLES30.glEnableVertexAttribArray(1);
    GLES30.glVertexAttribPointer(1, 4, GLES30.GL_FLOAT, false, 0, colorBuffer);

    GLES30.glDrawArrays(GLES30.GL_TRIANGLES, 0, 3);

    //禁止顶点数组的句柄
    GLES30.glDisableVertexAttribArray(0);
    GLES30.glDisableVertexAttribArray(1);
}

基于ndk绘制彩色三角形

基于ndk的绘制示例在下面的地址中,需要定义好jni的接口,原理跟上述方式类型,不再赘述

image

项目地址:
https://github.com/byhook/opengles4android

原文地址:
http://blog.csdn.net/byhook/article/details/83747146

参考:
《OpenGL ES 3.0 编程指南第2版》
《OpenGL ES应用开发实践指南Android卷》

上一篇 下一篇

猜你喜欢

热点阅读