shader tesselation
Aus DGL Wiki
Version vom 7. März 2009, 12:32 Uhr von Dj3hut1 (Diskussion | Beiträge) (Die Seite wurde neu angelegt: =Tesselation= Zurück zur Shadersammlung {|{{Prettytable_B1}} width=100% !width=60%|Beschreibung !width=20%|Autor !width=20%|Version |- |Unterteilt ein Dreieck in v...)
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 glProgramParameteriARB 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 ); }