shader tesselation: Unterschied zwischen den Versionen
Aus DGL Wiki
DGLBot (Diskussion | Beiträge) K (Der Ausdruck ''<glsl>(.*?)</glsl>'' wurde ersetzt mit ''<source lang="glsl">$1</source>''.) |
|||
Zeile 35: | Zeile 35: | ||
==Code== | ==Code== | ||
Vertexshader | Vertexshader | ||
− | <glsl>void main() | + | <source lang="glsl">void main() |
{ | { | ||
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; | gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; | ||
− | }</ | + | }</source> |
Geometryshader | Geometryshader | ||
− | <glsl>#version 120 | + | <source lang="glsl">#version 120 |
#extension GL_EXT_geometry_shader4 : enable | #extension GL_EXT_geometry_shader4 : enable | ||
Zeile 84: | Zeile 84: | ||
subdivide( v[0], v[1], v[2] ); | subdivide( v[0], v[1], v[2] ); | ||
− | }</ | + | }</source> |
Fragmentshader | Fragmentshader | ||
− | <glsl>void main() | + | <source lang="glsl">void main() |
{ | { | ||
gl_FragColor = vec4( 1.0, 0.5, 0.0, 1.0 ); | gl_FragColor = vec4( 1.0, 0.5, 0.0, 1.0 ); | ||
− | }</ | + | }</source> |
Aktuelle Version vom 10. März 2009, 19:34 Uhr
Inhaltsverzeichnis
Tesselation
Zurück zur Shadersammlung
Beschreibung | Autor | Version |
---|---|---|
Unterteilt ein Dreieck in vier kleinere Dreiecke. | dj3hut1 | 1.0 |
Bilder
Beschreibung
Dieser Shader nutzt einen Geometry Shader um ein Dreieck zu tesselieren.
Besondere Vorraussetzungen
OpenGL 2.0 und die Erweiterung GL_ARB_geometry_shader4.
Spezielle Linkparameter
Folgende Parameter wurden für den Geometry Shader mit glProgramParameterARB vor dem Linken gesetzt :
-
GL_GEOMETRY_INPUT_TYPE_ARB : GL_TRIANGLES
-
GL_GEOMETRY_OUTPUT_TYPE_ARB : GL_TRIANGLE_STRIP
-
GL_GEOMETRY_VERTICES_OUT_ARB : 12
Sonstiges : ein einfaches Dreieck, glPolygonMode( GL_FRONT_AND_BACK, GL_LINE
)
Code
Vertexshader
void main()
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
Geometryshader
#version 120
#extension GL_EXT_geometry_shader4 : enable
//input GL_TRIANGLES
//output GL_TRIANGLE_STRIP
void triangle( vec4 v0, vec4 v1, vec4 v2 )
{
gl_Position = v0;
EmitVertex();
gl_Position = v1;
EmitVertex();
gl_Position = v2;
EmitVertex();
EndPrimitive();
}
void subdivide( vec4 v0, vec4 v1, vec4 v2 )
{
vec4 h[3];
h[0] = ( v1 + v2 ) * 0.5;
h[1] = ( v0 + v2 ) * 0.5;
h[2] = ( v0 + v1 ) * 0.5;
triangle( v0, h[2], h[1] );
triangle( h[2], v1, h[0] );
triangle( h[2], h[0], h[1] );
triangle( h[1], h[0], v2 );
}
void main()
{
vec4 v[3];
v[0] = gl_PositionIn[0];
v[1] = gl_PositionIn[1];
v[2] = gl_PositionIn[2];
subdivide( v[0], v[1], v[2] );
}
Fragmentshader
void main()
{
gl_FragColor = vec4( 1.0, 0.5, 0.0, 1.0 );
}