Skip to content

Instantly share code, notes, and snippets.

@h4k1m0u
Created April 8, 2023 11:37
Show Gist options
  • Save h4k1m0u/91612fc65b70469b4da49728a67d811b to your computer and use it in GitHub Desktop.
Save h4k1m0u/91612fc65b70469b4da49728a67d811b to your computer and use it in GitHub Desktop.
Moving sinusoidal wave plane with GLSL

How to run

  • Build GlslViewer from source.
  • Run glslViewer giving it as input the 3D model for the plane below (created from a grid in Blender):
$ ./glslViewer plane.frag plane.vert plane.obj
  • Vertex and fragment shaders files don't exist. So they will be created automatically for you.
  • In the vertex shader, add the content of Wave.vert below in the appropriate locations.
  • For a better visibility, remove the floor, and add a sky and an axis in glslViewer with floor,off, sky,on, axis,on
# Blender 3.5.0 MTL File: 'plane.blend'
# www.blender.org
# Blender 3.5.0
# www.blender.org
mtllib plane.mtl
o Grid
v 1.000000 0.000000 0.100000
v 1.000000 0.000000 -0.100000
v 0.937500 0.000000 0.100000
v 0.937500 0.000000 -0.100000
v 0.875000 0.000000 0.100000
v 0.875000 0.000000 -0.100000
v 0.812500 0.000000 0.100000
v 0.812500 0.000000 -0.100000
v 0.750000 0.000000 0.100000
v 0.750000 0.000000 -0.100000
v 0.687500 0.000000 0.100000
v 0.687500 0.000000 -0.100000
v 0.625000 0.000000 0.100000
v 0.625000 0.000000 -0.100000
v 0.562500 0.000000 0.100000
v 0.562500 0.000000 -0.100000
v 0.500000 0.000000 0.100000
v 0.500000 0.000000 -0.100000
v 0.437500 0.000000 0.100000
v 0.437500 0.000000 -0.100000
v 0.375000 0.000000 0.100000
v 0.375000 0.000000 -0.100000
v 0.312500 0.000000 0.100000
v 0.312500 0.000000 -0.100000
v 0.250000 0.000000 0.100000
v 0.250000 0.000000 -0.100000
v 0.187500 0.000000 0.100000
v 0.187500 0.000000 -0.100000
v 0.125000 0.000000 0.100000
v 0.125000 0.000000 -0.100000
v 0.062500 0.000000 0.100000
v 0.062500 0.000000 -0.100000
v 0.000000 0.000000 0.100000
v -0.000000 0.000000 -0.100000
v -0.062500 -0.000000 0.100000
v -0.062500 -0.000000 -0.100000
v -0.125000 -0.000000 0.100000
v -0.125000 -0.000000 -0.100000
v -0.187500 -0.000000 0.100000
v -0.187500 -0.000000 -0.100000
v -0.250000 -0.000000 0.100000
v -0.250000 -0.000000 -0.100000
v -0.312500 -0.000000 0.100000
v -0.312500 -0.000000 -0.100000
v -0.375000 -0.000000 0.100000
v -0.375000 -0.000000 -0.100000
v -0.437500 -0.000000 0.100000
v -0.437500 -0.000000 -0.100000
v -0.500000 -0.000000 0.100000
v -0.500000 -0.000000 -0.100000
v -0.562500 -0.000000 0.100000
v -0.562500 -0.000000 -0.100000
v -0.625000 -0.000000 0.100000
v -0.625000 -0.000000 -0.100000
v -0.687500 -0.000000 0.100000
v -0.687500 -0.000000 -0.100000
v -0.750000 -0.000000 0.100000
v -0.750000 -0.000000 -0.100000
v -0.812500 -0.000000 0.100000
v -0.812500 -0.000000 -0.100000
v -0.875000 -0.000000 0.100000
v -0.875000 -0.000000 -0.100000
v -0.937500 -0.000000 0.100000
v -0.937500 -0.000000 -0.100000
v -1.000000 -0.000000 0.100000
v -1.000000 -0.000000 -0.100000
vn -0.0000 1.0000 -0.0000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 0.000000 0.031250
vt 1.000000 0.031250
vt 0.000000 0.062500
vt 1.000000 0.062500
vt 0.000000 0.093750
vt 1.000000 0.093750
vt 0.000000 0.125000
vt 1.000000 0.125000
vt 0.000000 0.156250
vt 1.000000 0.156250
vt 0.000000 0.187500
vt 1.000000 0.187500
vt 0.000000 0.218750
vt 1.000000 0.218750
vt 0.000000 0.250000
vt 1.000000 0.250000
vt 0.000000 0.281250
vt 1.000000 0.281250
vt 0.000000 0.312500
vt 1.000000 0.312500
vt 0.000000 0.343750
vt 1.000000 0.343750
vt 0.000000 0.375000
vt 1.000000 0.375000
vt 0.000000 0.406250
vt 1.000000 0.406250
vt 0.000000 0.437500
vt 1.000000 0.437500
vt 0.000000 0.468750
vt 1.000000 0.468750
vt 0.000000 0.500000
vt 1.000000 0.500000
vt 0.000000 0.531250
vt 1.000000 0.531250
vt 0.000000 0.562500
vt 1.000000 0.562500
vt 0.000000 0.593750
vt 1.000000 0.593750
vt 0.000000 0.625000
vt 1.000000 0.625000
vt 0.000000 0.656250
vt 1.000000 0.656250
vt 0.000000 0.687500
vt 1.000000 0.687500
vt 0.000000 0.718750
vt 1.000000 0.718750
vt 0.000000 0.750000
vt 1.000000 0.750000
vt 0.000000 0.781250
vt 1.000000 0.781250
vt 0.000000 0.812500
vt 1.000000 0.812500
vt 0.000000 0.843750
vt 1.000000 0.843750
vt 0.000000 0.875000
vt 1.000000 0.875000
vt 0.000000 0.906250
vt 1.000000 0.906250
vt 0.000000 0.937500
vt 1.000000 0.937500
vt 0.000000 0.968750
vt 1.000000 0.968750
vt 0.000000 1.000000
vt 1.000000 1.000000
s 0
f 1/1/1 2/2/1 4/4/1 3/3/1
f 3/3/1 4/4/1 6/6/1 5/5/1
f 5/5/1 6/6/1 8/8/1 7/7/1
f 7/7/1 8/8/1 10/10/1 9/9/1
f 9/9/1 10/10/1 12/12/1 11/11/1
f 11/11/1 12/12/1 14/14/1 13/13/1
f 13/13/1 14/14/1 16/16/1 15/15/1
f 15/15/1 16/16/1 18/18/1 17/17/1
f 17/17/1 18/18/1 20/20/1 19/19/1
f 19/19/1 20/20/1 22/22/1 21/21/1
f 21/21/1 22/22/1 24/24/1 23/23/1
f 23/23/1 24/24/1 26/26/1 25/25/1
f 25/25/1 26/26/1 28/28/1 27/27/1
f 27/27/1 28/28/1 30/30/1 29/29/1
f 29/29/1 30/30/1 32/32/1 31/31/1
f 31/31/1 32/32/1 34/34/1 33/33/1
f 33/33/1 34/34/1 36/36/1 35/35/1
f 35/35/1 36/36/1 38/38/1 37/37/1
f 37/37/1 38/38/1 40/40/1 39/39/1
f 39/39/1 40/40/1 42/42/1 41/41/1
f 41/41/1 42/42/1 44/44/1 43/43/1
f 43/43/1 44/44/1 46/46/1 45/45/1
f 45/45/1 46/46/1 48/48/1 47/47/1
f 47/47/1 48/48/1 50/50/1 49/49/1
f 49/49/1 50/50/1 52/52/1 51/51/1
f 51/51/1 52/52/1 54/54/1 53/53/1
f 53/53/1 54/54/1 56/56/1 55/55/1
f 55/55/1 56/56/1 58/58/1 57/57/1
f 57/57/1 58/58/1 60/60/1 59/59/1
f 59/59/1 60/60/1 62/62/1 61/61/1
f 61/61/1 62/62/1 64/64/1 63/63/1
f 63/63/1 64/64/1 66/66/1 65/65/1
uniform float u_time;
void main() {
// animated wave shape using sin function
// x supposed in [0, 1] => 2pi*x in [0, 2pi], add time to shift curve/animate (angle = 2k*pi + t)
// TODO: shading doesn't work, as normals weren't precalculated
const float PI = 3.141592;
vec4 position_wave = v_position;
float angle = (2.0*PI * v_position.x) + u_time;
position_wave.y = sin(angle);
gl_Position = u_projectionMatrix * u_viewMatrix * position_wave;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment