1

私のシェーダープログラムに頂点シェーダーとフラグメントシェーダーが含まれているとしましょう。

フラグメントシェーダーに情報を直接渡すにはどうすればよいですか?

gl_uniform... を使用し、fragmet シェーダー内でアドレス指定する変数を指定すると、次のようなエラーがスローされます。

Using ShaderProgram: The fragment shader uses varying myVarHere, but previous 
shader doesnot write to it.

最初に頂点シェーダーをアタッチするので、in と out を使用して頂点シェーダーを「情報を渡す」必要があることがわかりました。

これが進むべき道かどうかわからないので、私の質問:特定のシェーダーで変数をアドレス指定するようにopenglに指示する方法はありますか、それともひどく間違ったことをやっていますか/理解していますか?

頂点シェーダー:

#version 130

precision highp float;

uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;

in vec3 vertexData;
in vec3 normalData;

out vec3 normal;

void main(void)
{
    normal = (model * view * vec4(normalData, 0)).xyz;
    gl_Position = projection * model * view * vec4(vertexData, 1);
}

断片:

#version 130

precision highp float;

in vec3 light0;  // <- this is what i want to fill with data


const vec3 ambient = vec3(0.0, 0.0, 0.0);

const vec3 lightColor = vec3(0.6, 0.0, 0.0);

in vec3 normal;
out vec4 out_frag_color;

void main(void)
{
     float diffuse = clamp(dot(normalize(light0), normalize(normal)), 0.5, 1.0);
     out_frag_color = vec4(ambient + diffuse * lightColor, 1.0);
}
4

1 に答える 1

1

制服に なりたいそうです。light0

ユニフォームにするだけです:

#version 130

precision highp float;

uniform vec3 light0;  

...
于 2012-12-28T15:56:16.050 に答える