candela
05-30-2011, 11:57 AM
hi all,
I'm trying to learn the shading language from "OpenGL Shading language orange book", but I 've difficulty with understanding the predefined/user-defined/built-in variable functionality.
Regarding the brick example in the book, as far as I can gather, vertex shader intrinsic (predefined) in/out variables have " gl_XXX " prefix in their syntax. "in" variables are provided by pipeline itself and out variables should be supplied by the vertex shader, correct?
But some user-defined variables in program e.g. MVMatrix, MVPMatrix etc.. is refered in book as predefined variables, if it's so why "gl_XXX" prefix is not maintained.
If it's something else why they are used uninitialized?
Vertex Shader
#version 140
in vec4 MCvertex;
in vec3 MCnormal;
uniform mat4 MVMatrix;
uniform mat4 MVPMatrix;
uniform mat3 NormalMatrix;
uniform vec3 LightPosition;
const float SpecularContribution = 0.3;
const float DiffuseContribution = 1.0 - SpecularContribution;
out float LightIntensity;
out vec2 MCposition;
void main()
{
vec3 ecPosition = vec3(MVMatrix * MCvertex);
vec3 tnorm = normalize(NormalMatrix * MCnormal);
vec3 lightVec = normalize(LightPosition - ecPosition);
vec3 reflectVec = reflect(-lightVec, tnorm);
vec3 viewVec = normalize(-ecPosition);
float diffuse = max(dot(lightVec, tnorm), 0.0);
float spec = 0.0;
if (diffuse > 0.0)
{
spec = max(dot(reflectVec, viewVec), 0.0);
spec = pow(spec, 16.0);
}
LightIntensity = DiffuseContribution * diffuse +
SpecularContribution * spec;
MCposition = MCvertex.xy;
gl_Position = MVPMatrix * MCvertex;
}
I'm trying to learn the shading language from "OpenGL Shading language orange book", but I 've difficulty with understanding the predefined/user-defined/built-in variable functionality.
Regarding the brick example in the book, as far as I can gather, vertex shader intrinsic (predefined) in/out variables have " gl_XXX " prefix in their syntax. "in" variables are provided by pipeline itself and out variables should be supplied by the vertex shader, correct?
But some user-defined variables in program e.g. MVMatrix, MVPMatrix etc.. is refered in book as predefined variables, if it's so why "gl_XXX" prefix is not maintained.
If it's something else why they are used uninitialized?
Vertex Shader
#version 140
in vec4 MCvertex;
in vec3 MCnormal;
uniform mat4 MVMatrix;
uniform mat4 MVPMatrix;
uniform mat3 NormalMatrix;
uniform vec3 LightPosition;
const float SpecularContribution = 0.3;
const float DiffuseContribution = 1.0 - SpecularContribution;
out float LightIntensity;
out vec2 MCposition;
void main()
{
vec3 ecPosition = vec3(MVMatrix * MCvertex);
vec3 tnorm = normalize(NormalMatrix * MCnormal);
vec3 lightVec = normalize(LightPosition - ecPosition);
vec3 reflectVec = reflect(-lightVec, tnorm);
vec3 viewVec = normalize(-ecPosition);
float diffuse = max(dot(lightVec, tnorm), 0.0);
float spec = 0.0;
if (diffuse > 0.0)
{
spec = max(dot(reflectVec, viewVec), 0.0);
spec = pow(spec, 16.0);
}
LightIntensity = DiffuseContribution * diffuse +
SpecularContribution * spec;
MCposition = MCvertex.xy;
gl_Position = MVPMatrix * MCvertex;
}