In Matlab werden Oberflächen-Objekte aus einem Meshgrid erstellt. Am Beispiel eines Torus (und zwar kein symmetrischer Kreistorus) sieht dies folgendermassen aus:
Die Idee dieses Vertex-Shaders ist es, ein Grid, bestehend aus einer vordefinierten Anzahl von Quads durch einen Vertex-Shader laufen zu lassen, um ein Oberflächenobjekt zu erzeugen.
Das Grid wird dabei in einem glBegin()…glEnd() Block definiert. Für bestmögliche Performance kann man das Grid auch als Vertex-Buffer-Objekt definieren.
uniform float time; uniform float k; varying vec4 color; void main(void) { vec4 V; float u = gl_Vertex.x; float v = gl_Vertex.y; V.x = -(3.0 + 1.0 * cos(u) * (2.0+sin(v+time))) * sin(v); V.y = (3.0 + 1.0 * cos(u) * (2.0+sin(v+time))) * cos(v); V.z = 1.0 * sin(u) * (2.0+sin(v+time)); V.w = 1.0; color = vec4(0.0,0.0,0.0,1.0); gl_Position = gl_ModelViewProjectionMatrix * V; } |