Part I 空气曲棍球 Chapter8(8.5 Updating Shaders)

8.5 更新着色器(Updating Shaders)

    我还需要更新相应的着色器,我们之前使用atrribute类型属性定义了球棍或者冰球的顶点坐标,这里我们将会使用uniform类型定义相应的颜色,现在在ShaderProgram中加入一个新的常量,如下代码:

//AirHockeyWithImprovedMallets/src/com/airhockey/android/programs/ShaderProgram.java
protected static final String U_COLOR = "u_Color";

    下一步是更新ColorShaderProgram类,把所有引用变量aColorLocation的代码删除,包括方法getColorAttributeLocation(),然后添加如下代码:

//AirHockeyWithImprovedMallets/src/com/airhockey/android/programs/ColorShaderProgram.java
private final int uColorLocation;

    同时在构建函数中使用以下代码获取着色器中uniform类型变量的引用:

//AirHockeyWithImprovedMallets/src/com/airhockey/android/programs/ColorShaderProgram.java
uColorLocation = glGetUniformLocation(program, U_COLOR);

    最后更新方法setUniforms(),代码如下:

//AirHockeyWithImprovedMallets/src/com/airhockey/android/programs/ColorShaderProgram.java
public void setUniforms(float[] matrix, float r, float g, float b) {
    glUniformMatrix4fv(uMatrixLocation, 1, false, matrix, 0);
    glUniform4f(uColorLocation, r, g, b, 1f);
}

    当然我们还需要更新着色器,按照如下代码更新 simple_vertex_shader.glsl :

//AirHockeyWithImprovedMallets/res/raw/simple_vertex_shader.glsl
uniform mat4 u_Matrix;
attribute vec4 a_Position;
void main() {
    gl_Position = u_Matrix * a_Position;
}

    同时按照如下代码更新着色器 simple_fragment_shader.glsl:

//AirHockeyWithImprovedMallets/res/raw/simple_fragment_shader.glsl
precision mediump float;
uniform vec4 u_Color;
void main() {
    gl_FragColor = u_Color;
}

    现在相应的着色器都已经更新好了,下一节我们将会把前面所有的工作集成起来以绘制相应的形体(点击进入下一节)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值