OpenGL Tessellation makes point
Posted
by
urza57
on Game Development
See other posts from Game Development
or by urza57
Published on 2012-06-19T08:19:23Z
Indexed on
2012/06/19
9:24 UTC
Read the original article
Hit count: 338
A little problem with my tessellation shader. I try to implement a simple tessellation shader but it only makes points.
Here's my vertex shader :
out vec4 ecPosition;
out vec3 ecNormal;
void main( void )
{
vec4 position = gl_Vertex;
gl_Position = gl_ModelViewProjectionMatrix * position;
ecPosition = gl_ModelViewMatrix * position;
ecNormal = normalize(gl_NormalMatrix * gl_Normal);
}
My tessellation control shader :
layout(vertices = 3) out;
out vec4 ecPosition3[];
in vec3 ecNormal[];
in vec4 ecPosition[];
out vec3 myNormal[];
void main()
{
gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
myNormal[gl_InvocationID] = ecNormal[gl_InvocationID];
ecPosition3[gl_InvocationID] = ecPosition[gl_InvocationID];
gl_TessLevelOuter[0] = float(4.0);
gl_TessLevelOuter[1] = float(4.0);
gl_TessLevelOuter[2] = float(4.0);
gl_TessLevelInner[0] = float(4.0);
}
And my Tessellation Evaluation shader:
layout(triangles, equal_spacing, ccw) in;
in vec3 myNormal[];
in vec4 ecPosition3[];
out vec3 ecNormal;
out vec4 ecPosition;
void main()
{
float u = gl_TessCoord.x;
float v = gl_TessCoord.y;
float w = gl_TessCoord.z;
vec3 position = vec4(gl_in[0].gl_Position.xyz * u +
gl_in[1].gl_Position.xyz * v +
gl_in[2].gl_Position.xyz * w );
vec3 position2 = vec4(ecPosition3[0].xyz * u +
ecPosition3[1].xyz * v +
ecPosition3[2].xyz * w );
vec3 normal = myNormal[0] * u +
myNormal[1] * v +
myNormal[2] * w );
ecNormal = normal;
gl_Position = vec4(position, 1.0);
ecPosition = vec4(position2, 1.0);
}
Thank you !
© Game Development or respective owner