【Android】OpenglES学习练习

Android上进行OpenGL es的练习,有2种方式,

1.C++native方式,参考代码

frameworks/native/opengl/tests/gl2_basic/gl2_basic.cpp

 

编译后,执行

./test-opengl-gl2_basic

 

2.JavaSDK的调用方式,利用GLSurfaceView

参考书籍

 

这本书有中文版,我们可以下载里面的代码

https://pragprog.com/titles/kbogla/source_code

 

里面的AirHockey1工程是通过画2个三角形来画一个长方形,还有画直线,画点操作。

 

 

为了熟悉下画图过程,我们增加3个点,

        float[] tableVerticesWithTriangles = {

            // Triangle 1

            -0.5f, -0.5f,

             0.5f,  0.5f,

            -0.5f,  0.5f,

            // Triangle 2

            -0.5f, -0.5f,

             0.5f, -0.5f,

             0.5f,  0.5f,

            // Line 1

            -0.5f, 0f,

             0.5f, 0f,

            // Mallets

            0f, -0.25f,

            0f,  0.25f

           //增加的点

            ,

            -0.5f, -0.5f,

            0.5f,  0.5f,

           -0.7f,  0.7f


 

增加画图动作

//test,

glUniform4f(uColorLocation, 1.0f, 0.0f, 0.0f, 1.0f); // rgba  设置为红色

    

glDrawArrays(GL_TRIANGLES, 10, 3);

 

效果如下

 

 

再来增加点色彩,这里我们用坐标值去简单的映射下颜色值

v_Color = vec4( a_Position.x +1.0, a_Position.y+1.0, a_Position.z+1.0, 1.0);


 

顶点着色器

attribute vec4 a_Position;           

varying vec4 v_Color;

//out vec4 vertexColor;

void main()                   

{                             

    gl_Position = a_Position;

   

    gl_PointSize = 10.0;

 

    v_Color = vec4( a_Position.x +1.0, a_Position.y+1.0, a_Position.z+1.0, 1.0);


 

片元着色器

precision mediump float;

//in vec4 v_Color;

varying vec4 v_Color;

                                         

uniform vec4 u_Color;                                             

 

void main()                        

{                                

    gl_FragColor = v_Color;                          

}

 

效果:

 

把图形颠倒下

 

attribute vec4 a_Position;           

varying vec4 v_Color;

//out vec4 vertexColor;

void main()                   

{                             

//    gl_Position = a_Position;

// 

    gl_Position = vec4(a_Position.x, -a_Position.y, a_Position.z, 1.0);

   

    gl_PointSize = 10.0;

   

 

    v_Color = vec4( a_Position.x +1.0, a_Position.y+1.0, a_Position.z+1.0, 1.0);

}  

 

效果:

 

 

了解这些后,我们查看资料

 https://learnopengl-cn.github.io/01%20Getting%20started/05%20Shaders/

 

就可以理解里面练习题的解法了。

 

发布了336 篇原创文章 · 获赞 13 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/aaajj/article/details/96700577