在Android上进行OpenGL es的练习,有2种方式,
1.C++的native方式,参考代码
frameworks/native/opengl/tests/gl2_basic/gl2_basic.cpp
编译后,执行
./test-opengl-gl2_basic
2.Java层SDK的调用方式,利用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/
就可以理解里面练习题的解法了。