android-opengles3.0开发-3-添加颜色
【android-opengles3.0开发-3-添加颜色】项目地址
opengles 的给图形添加颜色很简单,在上篇文章的基础上改动几处即可。
1. 修改着色器
顶点着色器需要声明一个接收颜色数据的输入变量 aColor ,以及一个输出变量 vColor ,并在 main() 方法中,将 aColor 赋值给 vColor,用以后续将颜色输出到片段着色器。
private static final String vertextShaderSource =
"#version 300 es\n"
+ "layout (location = 0) in vec4 vPosition;
\n"
//接收颜色数据的输入变量
+ "layout (location = 1) in vec4 aColor;
\n"
//输出变量
+ "out vec4 vColor;
\n"
+ "void main()\n"
+ "{\n"
+ "gl_Position = vPosition;
\n"
//给输出变量赋值
+ "vColor = aColor;
\n"
+ "}\n";
片段着色器需要声明一个接收颜色数据的输入变量 vColor,并赋值给 fragColor。
private static final String fragmentShaderSource =
"#version 300 es\n"
+ "precision mediump float;
\n"
//接收颜色数据的输入变量
+ "in vec4 vColor;
\n"
+ "out vec4 fragColor;
\n"
+ "void main()\n"
+ "{\n"
//将颜色数据输出
+ "fragColor = vColor;
\n"
+ "}\n";
2. 准备颜色数据
颜色数据的准备操作和顶点数据的操作一样。
//顶点颜色
private static final float[] verticeColors = {
0.0f, 1.0f, 0.0f, 1.0f,
1.0f, 0.0f, 0.0f, 1.0f,
0.0f, 0.0f, 1.0f, 1.0f
};
//将顶点颜色数据拷贝映射到 native 内存中,以便opengl能够访问
verticeColorsBuffer = ByteBuffer
.allocateDirect(verticeColors.length * BYTES_PER_FLOAT)
.order(ByteOrder.nativeOrder())
.asFloatBuffer();
verticeColorsBuffer
.put(verticeColors)
.position(0);
3. 绘制
绘制的时候将颜色数据绑定到相应的属性位置,具体操作和顶点数据一样。
//获取 vColor 属性位置
int aColor = GLES30.glGetAttribLocation(program, "aColor");
//加载顶点颜色数据到 vColor 属性位置
GLES30.glEnableVertexAttribArray(aColor);
GLES30.glVertexAttribPointer(aColor, 4, GLES30.GL_FLOAT, false, 0, verticeColorsBuffer);
总结
本文梳理了颜色添加的基本流程,给绘制的三角形添加了简单的颜色。
推荐阅读
- 深入理解Go之generate
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 2018-3-24
- 2020-3-17
- 2019-3-3晨间日记
- 我的软件测试开发工程师书单
- echart|echart 双轴图开发
- NPDP拆书(三)(新产品开发战略(经营与创新战略))
- 2018-3-9.星期五|2018-3-9.星期五 晴 亲子日记第8篇
- 芯灵思SinlinxA33开发板Linux内核定时器编程