Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android OpenGL ES 2.0:为具有相同片段着色器的对象设置唯一颜色_Java_Android_Opengl Es - Fatal编程技术网

Java Android OpenGL ES 2.0:为具有相同片段着色器的对象设置唯一颜色

Java Android OpenGL ES 2.0:为具有相同片段着色器的对象设置唯一颜色,java,android,opengl-es,Java,Android,Opengl Es,我在Android OpenGL ES视图中有6列。当用户触摸屏幕时,一个列会发出特定的颜色。最初,所有列都使用相同的辉光颜色,但我正在尝试编写代码,以便在触摸时为每个列提供唯一的辉光颜色 我注意到的错误是,每个列发光仍然是相同的颜色,好像我设置glUniform的调用在第一次设置后就停留在一种颜色上。setUniforms()中我的switch语句中指定的最后一种颜色是触摸所有6列时使用的颜色,而每列的颜色应该不同 我的片段着色器中是否存在导致所有列错误使用案例5的mGlowColorHand

我在Android OpenGL ES视图中有6列。当用户触摸屏幕时,一个列会发出特定的颜色。最初,所有列都使用相同的辉光颜色,但我正在尝试编写代码,以便在触摸时为每个列提供唯一的辉光颜色

我注意到的错误是,每个列发光仍然是相同的颜色,好像我设置glUniform的调用在第一次设置后就停留在一种颜色上。setUniforms()中我的switch语句中指定的最后一种颜色是触摸所有6列时使用的颜色,而每列的颜色应该不同

我的片段着色器中是否存在导致所有列错误使用案例5的mGlowColorHandle值的错误?在我的方法中是否有错误

OpenGL\u GLRenderer.java

public class OpenGL_GLRenderer implements GLSurfaceView.Renderer {

    @Override
    public void onDrawFrame(GL10 glUnused) {
        GLES20.glUseProgram(neckProgramHandle);
        setUniforms(neckProgramHandle);
        ...
    }

    private void setUniforms(int programHandle)
    {
        mGlowColorHandle = GLES20.glGetUniformLocation(programHandle, "stringGlowColor");           //column glow color

        //************************String Glow code*******************************
        //if user's touching the screen, make nearest string glow
        for (int i = 0; i< 6; i++) {
            if (stringGlowEffects[i] != null) {
                float top = orthoTop + (orthoBottom-orthoTop)*stringGlowEffects[i].y + scroller.getCurrentValue();
                GLES20.glUniform2f(mGlowPosHandles[i], stringGlowEffects[i].x, top);
                float aRandomFloat = (float) (Math.random() * 100);        //generate random number from 0-99
                float glowEffectScale = 1.0f + (aRandomFloat - 50.0f) / 300.0f;
                GLES20.glUniform1f(mGlowScaleHandles[i], glowEffectScale);      //ERROR HERE: case 5's color is displayed for every column
                switch (i){
                    case 0:
                        GLES20.glUniform4f(mGlowColorHandle,.0f, .0f, 1.0f, 1.0f);
                    case 1:
                        GLES20.glUniform4f(mGlowColorHandle,.0f, 1.0f, .0f, 1.0f);
                    case 2:
                        GLES20.glUniform4f(mGlowColorHandle,1.0f, .0f, .0f, 1.0f);
                    case 3:
                        GLES20.glUniform4f(mGlowColorHandle,.0f, 1.0f, 1.0f, 1.0f);
                    case 4:
                        GLES20.glUniform4f(mGlowColorHandle,1.0f, 1.0f, .0f, 1.0f);
                    case 5:
                        GLES20.glUniform4f(mGlowColorHandle,1.0f, .0f, 1.0f, 1.0f);
                }
            }
            else{
                GLES20.glUniform1f(mGlowScaleHandles[i], 0.0f);
            }
        }
    }
}

switch
语句中每次调用
GLES20.glUniform4f
后,都需要一个
break
语句。当您的程序输入一个
开关
语句时,它会跳到相应的
大小写
标签,并继续运行,直到它碰到一个
中断
语句或
开关
的末尾,即使它经过了另一个
大小写
标签。这有时是有用的,但大多只是让人困惑。

啊,是的,简单的错误。谢谢
uniform sampler2D u_Texture;              // The input texture.
varying vec2 v_TexCoordinate;  // Interpolated texture coordinate per fragment.
uniform vec4 stringGlowColor;          // color of the string (column)

// The entry point for our fragment shader.
void main(){
    ...
    lowp vec4 fromTexture = texture2D(u_Texture, v_TexCoordinate);
    gl_FragColor = fromTexture + stringGlowColor*effectScale; 
}