OpenGL ES3画矩形的方法

用JNI做OpenGL的开发,采用ES3进行开发,注意在app的build.gradle中,需要配置minSdkVersion的版本,因为低版本的android sdk是不支持ES3的,我这里配置的是

minSdkVersion 21
targetSdkVersion 28

按照OpenGL的画三角形的经典教程,配好JNI调用,可以画出经典的红色三角形,其中红色的配置,在glsl中配置,glsl需要放到android的assets中,类似于图片需要放到res一样。我的glsl的配置如下:

#version 300 es

precision mediump float;
out vec4 fragColor;

void main()
{
	//RGB all 0 is black and all 1 is white
	fragColor = vec4(0.0, 0.0, 1.0, 0.0);
}

其中vec4的前三个元素分别对应于R、G、B,这里表示的是蓝色。

画矩形的代码,我放到render里面,代码如下:

JNIEXPORT void JNICALL
Java_com_example_hello_RendererJNI_glesRender(JNIEnv *env, jobject instance) {

    GLfloat vVertices[] = {  //x , y ,z, 0 is middle. 1 is high,right, -1 is low left
            -0.5f,-0.5f,0.0f,
            0.5f,-0.5f,0.0f,
            0.5f,0.5f,0.0f,

           // -0.5f,-0.5f,0.0f,
            //0.5f,0.5f,0.0f,
            -0.5f,0.5f,0.0f,
           };

    // Set the viewport
    glViewport ( 0, 0, g_width, g_height );
    // Clear the color buffer
    glClear ( GL_COLOR_BUFFER_BIT );
    // Use the program object
    glUseProgram ( g_programObject );
    // Load the vertex data
    glVertexAttribPointer ( 0, 3, GL_FLOAT, GL_FALSE, 0, vVertices );
    glEnableVertexAttribArray ( 0 );
    glDrawArrays ( GL_LINE_LOOP, 0, 4);

}

其中

(1)glVertexAttribPointer的第二个参数,3是固定值,表示坐标系是x,y,z三个方向,不用动。

(2)glDrawArrays中的第一个参数,表示绘制的方式,可供选择如下:

#define GL_LINES                          0x0001
#define GL_LINE_LOOP                      0x0002
#define GL_LINE_STRIP                     0x0003
#define GL_TRIANGLES                      0x0004
#define GL_TRIANGLE_STRIP                 0x0005
#define GL_TRIANGLE_FAN                   0x0006

GL_LINES表示v1v2连线,v3v4连线,画出的是2根线;

GL_LINE_LOOP 表示v1v2连线,v2v3连线,v3v4连线,v4v1连线,画出的是一个正方形框;

GL_LINE_STRIP 表示v1v2连线,v2v3连线,v3v4连线,画出的是3根线,不闭合的正方形框;

GL_TRIANGLES表示v1v2v3三角形,v4v5v6三角形,如果只配置4个点,只能画出一个三角形;

GL_TRIANGLE_STRIP表示v1v2v3三角形,v2v3v4三角形,画出的是2个有交叉重叠的实心三角形;

GL_TRIANGLE_FAN 表示v1v2v3三角形,v1v3v4三角形,画出是一个实心的正方形,注意是没有v1v2v4和v2v3v4三角形的。

(3)glDrawArrays的最后一个参数,我设置为4表示4个点。

你可能感兴趣的:(c++)