【Android】OpenglES学习练习

本文介绍在Android平台上使用OpenGL ES绘图的两种方法:C++ native方式和Java层SDK方式。通过增加顶点绘制三角形、线条,并调整色彩和坐标实现图形变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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/

 

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值