0

XCodeOpenGLESテンプレートの上にプロジェクトを作成しました。

各オブジェクトのシェーダーカラーをカスタマイズする方法はありますか?

Shader.vsh:

attribute vec4 position;
attribute vec3 normal;

varying lowp vec4 colorVarying;

uniform mat4 modelViewProjectionMatrix;
uniform mat3 normalMatrix;

void main()
{
    vec3 eyeNormal = normalize(normalMatrix * normal);
    vec3 lightPosition = vec3(1.0, 1.0, 1.0);
    vec4 diffuseColor = vec4(1, 0.4, 1.0, 1.0);

    float nDotVP = max(0.0, dot(eyeNormal, normalize(lightPosition)));

    colorVarying = diffuseColor * nDotVP;

    gl_Position = modelViewProjectionMatrix * position;
}

Shader.fsh:

varying lowp vec4 colorVarying;

void main()
{
    gl_FragColor = colorVarying;
}

変数Shader.vshを置き換えるために色を解析する追加の属性を作成する必要がありますか、またはこれはどのように行われますか?diffuse

4

1 に答える 1

2

色に均一な変数を使用することをお勧めします

// put this in Shader.vsh, before the main()
uniform vec4 diffuseColor;

コードで値を設定するだけです。

glUseProgram(progID);

// object 1 (R, G, B, A is a color)
glUniform4f(glGetUniformLocation(progID, "diffuseColor"), R, G, B, A);
draw_object_1();

// object 2 (R, G, B, A is a color)
glUniform4f(glGetUniformLocation(progID, "diffuseColor"), R, G, B, A);
draw_object_2();

軽い位置でも同じことができます。

于 2012-06-02T13:54:35.720 に答える