shader tesselation: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(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...)
 
K (Der Ausdruck ''<glsl>(.*?)</glsl>'' wurde ersetzt mit ''<source lang="glsl">$1</source>''.)
 
(Eine dazwischenliegende Version von einem anderen Benutzer wird nicht angezeigt)
Zeile 25: Zeile 25:
  
 
=== Spezielle Linkparameter ===
 
=== Spezielle Linkparameter ===
Folgende Parameter wurden für den Geometry Shader mit [[glProgramParameteriARB]] vor dem Linken gesetzt :
+
Folgende Parameter wurden für den Geometry Shader mit [[glProgramParameterARB]] vor dem Linken gesetzt :
 
* <code>GL_GEOMETRY_INPUT_TYPE_ARB : GL_TRIANGLES</code>
 
* <code>GL_GEOMETRY_INPUT_TYPE_ARB : GL_TRIANGLES</code>
 
* <code>GL_GEOMETRY_OUTPUT_TYPE_ARB : GL_TRIANGLE_STRIP</code>
 
* <code>GL_GEOMETRY_OUTPUT_TYPE_ARB : GL_TRIANGLE_STRIP</code>
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;
}</glsl>
+
}</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] );
}</glsl>
+
}</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 );
}</glsl>
+
}</source>

Aktuelle Version vom 10. März 2009, 20:34 Uhr

Tesselation

Zurück zur Shadersammlung

Beschreibung Autor Version
Unterteilt ein Dreieck in vier kleinere Dreiecke. dj3hut1 1.0

Bilder

Dreieck ohne Tesselierung.
Dreieck mit Tesselierung.

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 );
}