Add Marching Cubes geometry to full-demo
This commit is contained in:
parent
332d1952e0
commit
a1f8df808b
12
Shader/MarchingCubes/mc.fs
Normal file
12
Shader/MarchingCubes/mc.fs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#version 430
|
||||||
|
|
||||||
|
layout (binding = 0) uniform sampler3D densities;
|
||||||
|
|
||||||
|
in vec3 varTextureG;
|
||||||
|
|
||||||
|
out vec4 color;
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
float f = texture(densities, varTextureG).r;
|
||||||
|
color = vec4(f, f, f, 1.0);
|
||||||
|
}
|
196
Shader/MarchingCubes/mc.gs
Normal file
196
Shader/MarchingCubes/mc.gs
Normal file
@ -0,0 +1,196 @@
|
|||||||
|
#version 430
|
||||||
|
|
||||||
|
layout (points) in;
|
||||||
|
layout (triangle_strip, max_vertices = 12) out;
|
||||||
|
|
||||||
|
uniform mat4 proj;
|
||||||
|
uniform mat4 view;
|
||||||
|
|
||||||
|
in vec3 varTexture[];
|
||||||
|
in int varIndex[];
|
||||||
|
out vec3 varTextureG;
|
||||||
|
|
||||||
|
vec3 vectors[13] = {
|
||||||
|
vec3(0.0, 0.0, 0.0), vec3(0.5, 1.0, 1.0), vec3(0.0, 0.5, 1.0),
|
||||||
|
vec3(0.0, 1.0, 0.5), vec3(1.0, 0.5, 1.0), vec3(1.0, 1.0, 0.5),
|
||||||
|
vec3(0.5, 1.0, 0.0), vec3(1.0, 0.5, 0.0), vec3(0.0, 0.5, 0.0),
|
||||||
|
vec3(0.0, 0.0, 0.5), vec3(0.5, 0.0, 1.0), vec3(1.0, 0.0, 0.5),
|
||||||
|
vec3(0.5, 0.0, 0.0)};
|
||||||
|
|
||||||
|
int table[3072] = {
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 4, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5,
|
||||||
|
2, 5, 2, 4, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 5, 6, 7, 3, 1, 2, 0, 0, 0, 0, 0, 0, 7, 4, 6, 4,
|
||||||
|
6, 1, 0, 0, 0, 0, 0, 0, 3, 6, 2, 7, 6, 2, 7, 2, 4, 0, 0,
|
||||||
|
0, 3, 8, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 1, 8, 1, 8, 2,
|
||||||
|
0, 0, 0, 0, 0, 0, 6, 3, 8, 1, 5, 4, 0, 0, 0, 0, 0, 0, 6,
|
||||||
|
5, 8, 4, 5, 8, 4, 8, 2, 0, 0, 0, 5, 3, 7, 3, 7, 8, 0, 0,
|
||||||
|
0, 0, 0, 0, 5, 1, 7, 2, 1, 7, 2, 7, 8, 0, 0, 0, 1, 3, 4,
|
||||||
|
8, 3, 4, 8, 4, 7, 0, 0, 0, 8, 7, 2, 4, 7, 2, 0, 0, 0, 0,
|
||||||
|
0, 0, 9, 2, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 3, 10, 3, 10,
|
||||||
|
1, 0, 0, 0, 0, 0, 0, 4, 1, 5, 2, 10, 9, 0, 0, 0, 0, 0, 0,
|
||||||
|
4, 10, 5, 9, 10, 5, 9, 5, 3, 0, 0, 0, 9, 2, 10, 5, 7, 6, 0,
|
||||||
|
0, 0, 0, 0, 0, 9, 3, 10, 3, 10, 1, 7, 6, 5, 0, 0, 0, 7, 4,
|
||||||
|
6, 4, 6, 1, 9, 10, 2, 0, 0, 0, 4, 10, 7, 3, 10, 7, 3, 10, 9,
|
||||||
|
3, 6, 7, 9, 2, 10, 3, 8, 6, 0, 0, 0, 0, 0, 0, 9, 8, 10, 6,
|
||||||
|
8, 10, 6, 10, 1, 0, 0, 0, 6, 8, 3, 10, 2, 9, 1, 4, 5, 0, 0,
|
||||||
|
0, 4, 5, 6, 4, 10, 6, 8, 10, 6, 8, 10, 9, 5, 3, 7, 3, 7, 8,
|
||||||
|
10, 2, 9, 0, 0, 0, 9, 7, 1, 9, 10, 1, 5, 7, 1, 9, 7, 8, 9,
|
||||||
|
10, 8, 4, 10, 8, 4, 10, 7, 3, 2, 1, 9, 10, 8, 4, 10, 8, 4, 8,
|
||||||
|
7, 0, 0, 0, 10, 4, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 11,
|
||||||
|
1, 2, 3, 0, 0, 0, 0, 0, 0, 5, 11, 1, 11, 1, 10, 0, 0, 0, 0,
|
||||||
|
0, 0, 10, 2, 11, 3, 2, 11, 3, 11, 5, 0, 0, 0, 7, 5, 6, 4, 11,
|
||||||
|
10, 0, 0, 0, 0, 0, 0, 3, 2, 1, 11, 4, 10, 5, 7, 6, 0, 0, 0,
|
||||||
|
7, 11, 6, 10, 11, 6, 10, 6, 1, 0, 0, 0, 7, 6, 3, 7, 11, 3, 2,
|
||||||
|
11, 3, 2, 11, 10, 10, 4, 11, 6, 8, 3, 0, 0, 0, 0, 0, 0, 6, 1,
|
||||||
|
8, 1, 8, 2, 11, 4, 10, 0, 0, 0, 10, 1, 11, 1, 11, 5, 8, 3, 6,
|
||||||
|
0, 0, 0, 10, 8, 5, 10, 11, 5, 6, 8, 5, 10, 8, 2, 8, 7, 3, 7,
|
||||||
|
3, 5, 10, 11, 4, 0, 0, 0, 10, 11, 2, 7, 11, 2, 7, 11, 8, 1, 4,
|
||||||
|
5, 7, 11, 8, 1, 11, 8, 1, 11, 10, 1, 3, 8, 10, 11, 2, 7, 11, 2,
|
||||||
|
7, 2, 8, 0, 0, 0, 11, 9, 4, 9, 4, 2, 0, 0, 0, 0, 0, 0, 1,
|
||||||
|
4, 3, 11, 4, 3, 11, 3, 9, 0, 0, 0, 2, 1, 9, 5, 1, 9, 5, 9,
|
||||||
|
11, 0, 0, 0, 3, 5, 9, 11, 5, 9, 0, 0, 0, 0, 0, 0, 2, 4, 9,
|
||||||
|
4, 9, 11, 6, 5, 7, 0, 0, 0, 7, 6, 11, 3, 6, 11, 3, 6, 9, 4,
|
||||||
|
5, 1, 7, 1, 9, 7, 11, 9, 2, 1, 9, 7, 1, 6, 7, 6, 11, 3, 6,
|
||||||
|
11, 3, 11, 9, 0, 0, 0, 11, 9, 4, 9, 4, 2, 6, 8, 3, 0, 0, 0,
|
||||||
|
1, 4, 6, 9, 4, 6, 9, 4, 11, 9, 8, 6, 6, 8, 5, 9, 8, 5, 9,
|
||||||
|
8, 11, 1, 3, 2, 6, 8, 5, 9, 8, 5, 9, 5, 11, 0, 0, 0, 7, 11,
|
||||||
|
9, 7, 9, 9, 5, 4, 2, 5, 2, 2, 9, 11, 8, 11, 8, 7, 1, 4, 5,
|
||||||
|
0, 0, 0, 7, 8, 11, 8, 11, 9, 1, 3, 2, 0, 0, 0, 9, 11, 8, 11,
|
||||||
|
8, 7, 0, 0, 0, 0, 0, 0, 11, 7, 12, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 11, 7, 12, 3, 2, 1, 0, 0, 0, 0, 0, 0, 11, 7, 12, 5, 4, 1,
|
||||||
|
0, 0, 0, 0, 0, 0, 3, 5, 2, 5, 2, 4, 12, 7, 11, 0, 0, 0, 11,
|
||||||
|
5, 12, 5, 12, 6, 0, 0, 0, 0, 0, 0, 11, 5, 12, 5, 12, 6, 2, 1,
|
||||||
|
3, 0, 0, 0, 11, 4, 12, 1, 4, 12, 1, 12, 6, 0, 0, 0, 11, 2, 6,
|
||||||
|
11, 12, 6, 3, 2, 6, 11, 2, 4, 7, 12, 11, 8, 6, 3, 0, 0, 0, 0,
|
||||||
|
0, 0, 2, 8, 1, 8, 1, 6, 11, 12, 7, 0, 0, 0, 1, 4, 5, 12, 7,
|
||||||
|
11, 6, 8, 3, 0, 0, 0, 11, 12, 4, 8, 12, 4, 8, 12, 2, 5, 7, 6,
|
||||||
|
8, 12, 3, 11, 12, 3, 11, 3, 5, 0, 0, 0, 8, 12, 2, 5, 12, 2, 5,
|
||||||
|
12, 11, 5, 1, 2, 8, 3, 1, 8, 12, 1, 4, 12, 1, 4, 12, 11, 11, 12,
|
||||||
|
4, 8, 12, 4, 8, 4, 2, 0, 0, 0, 12, 11, 7, 10, 9, 2, 0, 0, 0,
|
||||||
|
0, 0, 0, 1, 10, 3, 10, 3, 9, 7, 11, 12, 0, 0, 0, 12, 7, 11, 1,
|
||||||
|
4, 5, 10, 2, 9, 0, 0, 0, 12, 7, 9, 5, 7, 9, 5, 7, 3, 10, 11,
|
||||||
|
4, 6, 12, 5, 12, 5, 11, 2, 9, 10, 0, 0, 0, 12, 9, 3, 12, 3, 3,
|
||||||
|
11, 10, 1, 11, 1, 1, 11, 4, 12, 1, 4, 12, 1, 4, 6, 9, 10, 2, 3,
|
||||||
|
9, 6, 9, 6, 12, 4, 10, 11, 0, 0, 0, 3, 6, 8, 11, 12, 7, 9, 10,
|
||||||
|
2, 0, 0, 0, 7, 11, 6, 10, 11, 6, 10, 11, 1, 8, 12, 9, 12, 8, 9,
|
||||||
|
6, 7, 5, 1, 2, 3, 6, 7, 5, 9, 8, 12, 5, 7, 6, 11, 4, 10, 0,
|
||||||
|
0, 0, 8, 12, 3, 11, 12, 3, 11, 12, 5, 2, 9, 10, 5, 11, 1, 11, 1,
|
||||||
|
10, 8, 12, 9, 0, 0, 0, 8, 12, 9, 4, 10, 11, 2, 1, 3, 0, 0, 0,
|
||||||
|
11, 10, 4, 9, 12, 8, 0, 0, 0, 0, 0, 0, 12, 10, 7, 10, 7, 4, 0,
|
||||||
|
0, 0, 0, 0, 0, 12, 10, 7, 10, 7, 4, 3, 2, 1, 0, 0, 0, 5, 7,
|
||||||
|
1, 12, 7, 1, 12, 1, 10, 0, 0, 0, 12, 7, 10, 3, 7, 10, 3, 7, 5,
|
||||||
|
3, 2, 10, 4, 5, 10, 6, 5, 10, 6, 10, 12, 0, 0, 0, 4, 5, 10, 6,
|
||||||
|
5, 10, 6, 5, 12, 2, 1, 3, 12, 6, 10, 1, 6, 10, 0, 0, 0, 0, 0,
|
||||||
|
0, 3, 2, 6, 10, 2, 6, 10, 6, 12, 0, 0, 0, 4, 7, 10, 7, 10, 12,
|
||||||
|
3, 6, 8, 0, 0, 0, 6, 8, 2, 6, 2, 2, 7, 12, 10, 7, 10, 10, 5,
|
||||||
|
7, 1, 12, 7, 1, 12, 7, 10, 3, 6, 8, 10, 12, 2, 12, 2, 8, 5, 7,
|
||||||
|
6, 0, 0, 0, 4, 12, 3, 4, 5, 3, 8, 12, 3, 4, 12, 10, 8, 2, 12,
|
||||||
|
2, 12, 10, 5, 1, 4, 0, 0, 0, 8, 3, 12, 1, 3, 12, 1, 12, 10, 0,
|
||||||
|
0, 0, 10, 12, 2, 12, 2, 8, 0, 0, 0, 0, 0, 0, 12, 9, 7, 2, 9,
|
||||||
|
7, 2, 7, 4, 0, 0, 0, 12, 4, 3, 12, 9, 3, 1, 4, 3, 12, 4, 7,
|
||||||
|
2, 1, 5, 2, 9, 5, 7, 9, 5, 7, 9, 12, 12, 7, 9, 5, 7, 9, 5,
|
||||||
|
9, 3, 0, 0, 0, 2, 9, 4, 6, 9, 4, 6, 9, 12, 6, 5, 4, 12, 6,
|
||||||
|
9, 6, 9, 3, 4, 5, 1, 0, 0, 0, 2, 9, 1, 12, 9, 1, 12, 1, 6,
|
||||||
|
0, 0, 0, 3, 9, 6, 9, 6, 12, 0, 0, 0, 0, 0, 0, 12, 9, 7, 2,
|
||||||
|
9, 7, 2, 9, 4, 6, 8, 3, 1, 6, 4, 6, 4, 7, 9, 8, 12, 0, 0,
|
||||||
|
0, 5, 7, 6, 9, 8, 12, 3, 2, 1, 0, 0, 0, 12, 8, 9, 6, 7, 5,
|
||||||
|
0, 0, 0, 0, 0, 0, 4, 2, 5, 2, 5, 3, 12, 9, 8, 0, 0, 0, 12,
|
||||||
|
8, 9, 1, 4, 5, 0, 0, 0, 0, 0, 0, 8, 9, 12, 2, 3, 1, 0, 0,
|
||||||
|
0, 0, 0, 0, 12, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 8, 9,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 9, 12, 2, 3, 1, 0, 0, 0, 0,
|
||||||
|
0, 0, 12, 8, 9, 1, 4, 5, 0, 0, 0, 0, 0, 0, 4, 2, 5, 2, 5,
|
||||||
|
3, 12, 9, 8, 0, 0, 0, 12, 8, 9, 6, 7, 5, 0, 0, 0, 0, 0, 0,
|
||||||
|
5, 7, 6, 9, 8, 12, 3, 2, 1, 0, 0, 0, 1, 6, 4, 6, 4, 7, 9,
|
||||||
|
8, 12, 0, 0, 0, 12, 9, 7, 2, 9, 7, 2, 9, 4, 6, 8, 3, 3, 9,
|
||||||
|
6, 9, 6, 12, 0, 0, 0, 0, 0, 0, 2, 9, 1, 12, 9, 1, 12, 1, 6,
|
||||||
|
0, 0, 0, 12, 6, 9, 6, 9, 3, 4, 5, 1, 0, 0, 0, 2, 9, 4, 6,
|
||||||
|
9, 4, 6, 9, 12, 6, 5, 4, 12, 7, 9, 5, 7, 9, 5, 9, 3, 0, 0,
|
||||||
|
0, 2, 1, 5, 2, 9, 5, 7, 9, 5, 7, 9, 12, 12, 4, 3, 12, 9, 3,
|
||||||
|
1, 4, 3, 12, 4, 7, 12, 9, 7, 2, 9, 7, 2, 7, 4, 0, 0, 0, 10,
|
||||||
|
12, 2, 12, 2, 8, 0, 0, 0, 0, 0, 0, 8, 3, 12, 1, 3, 12, 1, 12,
|
||||||
|
10, 0, 0, 0, 8, 2, 12, 2, 12, 10, 5, 1, 4, 0, 0, 0, 4, 12, 3,
|
||||||
|
4, 5, 3, 8, 12, 3, 4, 12, 10, 10, 12, 2, 12, 2, 8, 5, 7, 6, 0,
|
||||||
|
0, 0, 5, 7, 1, 12, 7, 1, 12, 7, 10, 3, 6, 8, 6, 8, 2, 6, 2,
|
||||||
|
2, 7, 12, 10, 7, 10, 10, 4, 7, 10, 7, 10, 12, 3, 6, 8, 0, 0, 0,
|
||||||
|
3, 2, 6, 10, 2, 6, 10, 6, 12, 0, 0, 0, 12, 6, 10, 1, 6, 10, 0,
|
||||||
|
0, 0, 0, 0, 0, 4, 5, 10, 6, 5, 10, 6, 5, 12, 2, 1, 3, 4, 5,
|
||||||
|
10, 6, 5, 10, 6, 10, 12, 0, 0, 0, 12, 7, 10, 3, 7, 10, 3, 7, 5,
|
||||||
|
3, 2, 10, 5, 7, 1, 12, 7, 1, 12, 1, 10, 0, 0, 0, 12, 10, 7, 10,
|
||||||
|
7, 4, 3, 2, 1, 0, 0, 0, 12, 10, 7, 10, 7, 4, 0, 0, 0, 0, 0,
|
||||||
|
0, 11, 10, 4, 9, 12, 8, 0, 0, 0, 0, 0, 0, 8, 12, 9, 4, 10, 11,
|
||||||
|
2, 1, 3, 0, 0, 0, 5, 11, 1, 11, 1, 10, 8, 12, 9, 0, 0, 0, 8,
|
||||||
|
12, 3, 11, 12, 3, 11, 12, 5, 2, 9, 10, 9, 8, 12, 5, 7, 6, 11, 4,
|
||||||
|
10, 0, 0, 0, 12, 8, 9, 6, 7, 5, 1, 2, 3, 6, 7, 5, 7, 11, 6,
|
||||||
|
10, 11, 6, 10, 11, 1, 8, 12, 9, 3, 6, 8, 11, 12, 7, 9, 10, 2, 0,
|
||||||
|
0, 0, 3, 9, 6, 9, 6, 12, 4, 10, 11, 0, 0, 0, 11, 4, 12, 1, 4,
|
||||||
|
12, 1, 4, 6, 9, 10, 2, 12, 9, 3, 12, 3, 3, 11, 10, 1, 11, 1, 1,
|
||||||
|
6, 12, 5, 12, 5, 11, 2, 9, 10, 0, 0, 0, 12, 7, 9, 5, 7, 9, 5,
|
||||||
|
7, 3, 10, 11, 4, 12, 7, 11, 1, 4, 5, 10, 2, 9, 0, 0, 0, 1, 10,
|
||||||
|
3, 10, 3, 9, 7, 11, 12, 0, 0, 0, 12, 11, 7, 10, 9, 2, 0, 0, 0,
|
||||||
|
0, 0, 0, 11, 12, 4, 8, 12, 4, 8, 4, 2, 0, 0, 0, 8, 3, 1, 8,
|
||||||
|
12, 1, 4, 12, 1, 4, 12, 11, 8, 12, 2, 5, 12, 2, 5, 12, 11, 5, 1,
|
||||||
|
2, 8, 12, 3, 11, 12, 3, 11, 3, 5, 0, 0, 0, 11, 12, 4, 8, 12, 4,
|
||||||
|
8, 12, 2, 5, 7, 6, 1, 4, 5, 12, 7, 11, 6, 8, 3, 0, 0, 0, 2,
|
||||||
|
8, 1, 8, 1, 6, 11, 12, 7, 0, 0, 0, 7, 12, 11, 8, 6, 3, 0, 0,
|
||||||
|
0, 0, 0, 0, 11, 2, 6, 11, 12, 6, 3, 2, 6, 11, 2, 4, 11, 4, 12,
|
||||||
|
1, 4, 12, 1, 12, 6, 0, 0, 0, 11, 5, 12, 5, 12, 6, 2, 1, 3, 0,
|
||||||
|
0, 0, 11, 5, 12, 5, 12, 6, 0, 0, 0, 0, 0, 0, 3, 5, 2, 5, 2,
|
||||||
|
4, 12, 7, 11, 0, 0, 0, 11, 7, 12, 5, 4, 1, 0, 0, 0, 0, 0, 0,
|
||||||
|
11, 7, 12, 3, 2, 1, 0, 0, 0, 0, 0, 0, 11, 7, 12, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 9, 11, 8, 11, 8, 7, 0, 0, 0, 0, 0, 0, 7, 8,
|
||||||
|
11, 8, 11, 9, 1, 3, 2, 0, 0, 0, 9, 11, 8, 11, 8, 7, 1, 4, 5,
|
||||||
|
0, 0, 0, 7, 11, 9, 7, 9, 9, 5, 4, 2, 5, 2, 2, 6, 8, 5, 9,
|
||||||
|
8, 5, 9, 5, 11, 0, 0, 0, 6, 8, 5, 9, 8, 5, 9, 8, 11, 1, 3,
|
||||||
|
2, 1, 4, 6, 9, 4, 6, 9, 4, 11, 9, 8, 6, 11, 9, 4, 9, 4, 2,
|
||||||
|
6, 8, 3, 0, 0, 0, 7, 6, 11, 3, 6, 11, 3, 11, 9, 0, 0, 0, 7,
|
||||||
|
1, 9, 7, 11, 9, 2, 1, 9, 7, 1, 6, 7, 6, 11, 3, 6, 11, 3, 6,
|
||||||
|
9, 4, 5, 1, 2, 4, 9, 4, 9, 11, 6, 5, 7, 0, 0, 0, 3, 5, 9,
|
||||||
|
11, 5, 9, 0, 0, 0, 0, 0, 0, 2, 1, 9, 5, 1, 9, 5, 9, 11, 0,
|
||||||
|
0, 0, 1, 4, 3, 11, 4, 3, 11, 3, 9, 0, 0, 0, 11, 9, 4, 9, 4,
|
||||||
|
2, 0, 0, 0, 0, 0, 0, 10, 11, 2, 7, 11, 2, 7, 2, 8, 0, 0, 0,
|
||||||
|
7, 11, 8, 1, 11, 8, 1, 11, 10, 1, 3, 8, 10, 11, 2, 7, 11, 2, 7,
|
||||||
|
11, 8, 1, 4, 5, 8, 7, 3, 7, 3, 5, 10, 11, 4, 0, 0, 0, 10, 8,
|
||||||
|
5, 10, 11, 5, 6, 8, 5, 10, 8, 2, 10, 1, 11, 1, 11, 5, 8, 3, 6,
|
||||||
|
0, 0, 0, 6, 1, 8, 1, 8, 2, 11, 4, 10, 0, 0, 0, 10, 4, 11, 6,
|
||||||
|
8, 3, 0, 0, 0, 0, 0, 0, 7, 6, 3, 7, 11, 3, 2, 11, 3, 2, 11,
|
||||||
|
10, 7, 11, 6, 10, 11, 6, 10, 6, 1, 0, 0, 0, 3, 2, 1, 11, 4, 10,
|
||||||
|
5, 7, 6, 0, 0, 0, 7, 5, 6, 4, 11, 10, 0, 0, 0, 0, 0, 0, 10,
|
||||||
|
2, 11, 3, 2, 11, 3, 11, 5, 0, 0, 0, 5, 11, 1, 11, 1, 10, 0, 0,
|
||||||
|
0, 0, 0, 0, 10, 4, 11, 1, 2, 3, 0, 0, 0, 0, 0, 0, 10, 4, 11,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 8, 4, 10, 8, 4, 8, 7, 0,
|
||||||
|
0, 0, 9, 10, 8, 4, 10, 8, 4, 10, 7, 3, 2, 1, 9, 7, 1, 9, 10,
|
||||||
|
1, 5, 7, 1, 9, 7, 8, 5, 3, 7, 3, 7, 8, 10, 2, 9, 0, 0, 0,
|
||||||
|
4, 5, 6, 4, 10, 6, 8, 10, 6, 8, 10, 9, 6, 8, 3, 10, 2, 9, 1,
|
||||||
|
4, 5, 0, 0, 0, 9, 8, 10, 6, 8, 10, 6, 10, 1, 0, 0, 0, 9, 2,
|
||||||
|
10, 3, 8, 6, 0, 0, 0, 0, 0, 0, 4, 10, 7, 3, 10, 7, 3, 10, 9,
|
||||||
|
3, 6, 7, 7, 4, 6, 4, 6, 1, 9, 10, 2, 0, 0, 0, 9, 3, 10, 3,
|
||||||
|
10, 1, 7, 6, 5, 0, 0, 0, 9, 2, 10, 5, 7, 6, 0, 0, 0, 0, 0,
|
||||||
|
0, 4, 10, 5, 9, 10, 5, 9, 5, 3, 0, 0, 0, 4, 1, 5, 2, 10, 9,
|
||||||
|
0, 0, 0, 0, 0, 0, 9, 3, 10, 3, 10, 1, 0, 0, 0, 0, 0, 0, 9,
|
||||||
|
2, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 7, 2, 4, 7, 2, 0, 0,
|
||||||
|
0, 0, 0, 0, 1, 3, 4, 8, 3, 4, 8, 4, 7, 0, 0, 0, 5, 1, 7,
|
||||||
|
2, 1, 7, 2, 7, 8, 0, 0, 0, 5, 3, 7, 3, 7, 8, 0, 0, 0, 0,
|
||||||
|
0, 0, 6, 5, 8, 4, 5, 8, 4, 8, 2, 0, 0, 0, 6, 3, 8, 1, 5,
|
||||||
|
4, 0, 0, 0, 0, 0, 0, 6, 1, 8, 1, 8, 2, 0, 0, 0, 0, 0, 0,
|
||||||
|
3, 8, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 2, 7, 6, 2, 7,
|
||||||
|
2, 4, 0, 0, 0, 7, 4, 6, 4, 6, 1, 0, 0, 0, 0, 0, 0, 5, 6,
|
||||||
|
7, 3, 1, 2, 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 3, 5, 2, 5, 2, 4, 0, 0, 0, 0, 0, 0, 4, 1, 5, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
vec4 base = gl_in[0].gl_Position;
|
||||||
|
int index = varIndex[0] * 12;
|
||||||
|
for(int i = 0; i < 12; i += 3) {
|
||||||
|
for(int k = 0; k < 3; k++) {
|
||||||
|
gl_Position = proj * view * (base + vec4(vectors[table[index + i + k]], 0.0));
|
||||||
|
varTextureG = varTexture[0];
|
||||||
|
EmitVertex();
|
||||||
|
}
|
||||||
|
EndPrimitive();
|
||||||
|
}
|
||||||
|
}
|
38
Shader/MarchingCubes/mc.vs
Normal file
38
Shader/MarchingCubes/mc.vs
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#version 430
|
||||||
|
|
||||||
|
layout (binding = 0) uniform sampler3D densities;
|
||||||
|
|
||||||
|
uniform float step;
|
||||||
|
uniform float threshold;
|
||||||
|
|
||||||
|
uniform int size_x;
|
||||||
|
uniform int size_y;
|
||||||
|
uniform int size_z;
|
||||||
|
|
||||||
|
out vec3 varTexture;
|
||||||
|
out int varIndex;
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
int id = gl_VertexID;
|
||||||
|
|
||||||
|
// Could be optimized by using bit-wise '>>' and '&', but this is more generic
|
||||||
|
int x = id % size_x;
|
||||||
|
int y = (id / size_x) % size_y;
|
||||||
|
int z = (id / size_x / size_y) % size_z;
|
||||||
|
|
||||||
|
vec3 xyz = vec3(x, y, z);
|
||||||
|
gl_Position = vec4(xyz, 1.0);
|
||||||
|
varTexture = xyz * step;
|
||||||
|
|
||||||
|
int b1 = int(texture(densities, varTexture).r < threshold);
|
||||||
|
int b2 = int(texture(densities, varTexture + vec3(step, 0.0, 0.0)).r < threshold);
|
||||||
|
int b3 = int(texture(densities, varTexture + vec3(step, 0.0, step)).r < threshold);
|
||||||
|
int b4 = int(texture(densities, varTexture + vec3(0.0, 0.0, step)).r < threshold);
|
||||||
|
int b5 = int(texture(densities, varTexture + vec3(0.0, step, 0.0)).r < threshold);
|
||||||
|
int b6 = int(texture(densities, varTexture + vec3(step, step, 0.0)).r < threshold);
|
||||||
|
int b7 = int(texture(densities, varTexture + vec3(step, step, step)).r < threshold);
|
||||||
|
int b8 = int(texture(densities, varTexture + vec3(0.0, step, step)).r < threshold);
|
||||||
|
|
||||||
|
varIndex = (b1 << 7) | (b2 << 6) | (b3 << 5) | (b4 << 4) |
|
||||||
|
(b5 << 3) | (b6 << 2) | (b7 << 1) | b8;
|
||||||
|
}
|
20
Shader/MarchingCubes/noise.fs
Normal file
20
Shader/MarchingCubes/noise.fs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#version 430
|
||||||
|
|
||||||
|
in vec3 varPosition;
|
||||||
|
|
||||||
|
out float noise;
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
// Base: Distance to a helix
|
||||||
|
vec3 helix_pos = vec3(sin(varPosition.y * 5.0) * 0.2 + 0.5, varPosition.y, cos(varPosition.y * 5.0) * 0.2 + 0.5);
|
||||||
|
float dist = distance(helix_pos, varPosition);
|
||||||
|
|
||||||
|
noise = 0.6 - dist;
|
||||||
|
|
||||||
|
// Create some blobby shapes on the helix
|
||||||
|
float f1 = sin((varPosition.x + varPosition.z) * 7.0);
|
||||||
|
float f2 = cos((varPosition.y + varPosition.x) * 3.0);
|
||||||
|
float f3 = cos((varPosition.z + varPosition.y) * 8.0);
|
||||||
|
|
||||||
|
noise += abs(f1 + f2 + f3) * 0.1;
|
||||||
|
}
|
13
Shader/MarchingCubes/noise.vs
Normal file
13
Shader/MarchingCubes/noise.vs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#version 430
|
||||||
|
|
||||||
|
layout (location = 0) in vec2 position;
|
||||||
|
|
||||||
|
uniform float layer;
|
||||||
|
uniform float height;
|
||||||
|
|
||||||
|
out vec3 varPosition;
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
gl_Position = vec4(position, 0.0, 1.0);
|
||||||
|
varPosition = vec3(position.x, position.y + height, layer);
|
||||||
|
}
|
@ -30,7 +30,11 @@ class FullDemo : public Gedeng::Application {
|
|||||||
light(glm::vec3(0.57735, -0.57735, 0.57735)),
|
light(glm::vec3(0.57735, -0.57735, 0.57735)),
|
||||||
mesh1("Resources/Meshes/Monkey.obj", Gedeng::ObjMesh::Settings()),
|
mesh1("Resources/Meshes/Monkey.obj", Gedeng::ObjMesh::Settings()),
|
||||||
mesh2("Resources/Meshes/bench.obj", Gedeng::ObjMesh::Settings()),
|
mesh2("Resources/Meshes/bench.obj", Gedeng::ObjMesh::Settings()),
|
||||||
mesh3("Resources/Meshes/ring.obj", Gedeng::ObjMesh::Settings()) {
|
mesh3("Resources/Meshes/ring.obj", Gedeng::ObjMesh::Settings()), size_x(128), size_y(128), size_z(128),
|
||||||
|
mc_render_shader(
|
||||||
|
Gedeng::Shader("Shader/MarchingCubes/mc.vs", "Shader/MarchingCubes/mc.fs", "Shader/MarchingCubes/mc.gs")),
|
||||||
|
mc_noise_shader(Gedeng::Shader("Shader/MarchingCubes/noise.vs", "Shader/MarchingCubes/noise.fs")),
|
||||||
|
noise(Gedeng::Framebuffer3D(size_x, size_y, size_z)) {
|
||||||
particles.set_position(glm::vec3(0.0f, 0.0f, -10.0f));
|
particles.set_position(glm::vec3(0.0f, 0.0f, -10.0f));
|
||||||
particles.set_velocity(glm::vec3(-2, 4, -2), glm::vec3(2, 6, 2));
|
particles.set_velocity(glm::vec3(-2, 4, -2), glm::vec3(2, 6, 2));
|
||||||
particles.set_gravity(glm::vec3(0, -4, 0));
|
particles.set_gravity(glm::vec3(0, -4, 0));
|
||||||
@ -56,6 +60,10 @@ class FullDemo : public Gedeng::Application {
|
|||||||
terrain_shader.add_tessellation_control_shader("Shader/terrain.tcs");
|
terrain_shader.add_tessellation_control_shader("Shader/terrain.tcs");
|
||||||
terrain_shader.add_tessellation_evaluation_shader("Shader/terrain.tes");
|
terrain_shader.add_tessellation_evaluation_shader("Shader/terrain.tes");
|
||||||
terrain_shader.link();
|
terrain_shader.link();
|
||||||
|
|
||||||
|
// Each MC noise layer needs vertices, so we define two triangles which span a rectangle
|
||||||
|
float data[6][2] = {{-1.0f, -1.0f}, {-1.0, 1.0}, {1.0, -1.0}, {1.0f, 1.0f}, {-1.0, 1.0}, {1.0, -1.0}};
|
||||||
|
vertex_rectangle.set_data(sizeof(data), 2, data, GL_STATIC_DRAW);
|
||||||
}
|
}
|
||||||
|
|
||||||
~FullDemo() = default;
|
~FullDemo() = default;
|
||||||
@ -83,6 +91,25 @@ class FullDemo : public Gedeng::Application {
|
|||||||
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Marching cubes
|
||||||
|
|
||||||
|
// Create the noise
|
||||||
|
glViewport(0, 0, size_x, size_y);
|
||||||
|
|
||||||
|
mc_noise_shader.use();
|
||||||
|
noise.bind_and_clear();
|
||||||
|
|
||||||
|
mc_noise_shader.setFloat("height", camera.get_translation().y / size_z);
|
||||||
|
|
||||||
|
for (int i = 0; i < size_z; i++) {
|
||||||
|
// Create one layer
|
||||||
|
mc_noise_shader.setFloat("layer", i * (1.0f / (static_cast<float>(size_z - 1))));
|
||||||
|
noise.bind_layer(i);
|
||||||
|
|
||||||
|
// Each layer is made up of a rectangle of vertices
|
||||||
|
vertex_rectangle.draw();
|
||||||
|
}
|
||||||
|
|
||||||
// Shadows
|
// Shadows
|
||||||
light.clear_shadows();
|
light.clear_shadows();
|
||||||
light.render_shadow(quad_mesh);
|
light.render_shadow(quad_mesh);
|
||||||
@ -90,10 +117,42 @@ class FullDemo : public Gedeng::Application {
|
|||||||
light.render_shadow(mesh2);
|
light.render_shadow(mesh2);
|
||||||
light.render_shadow(mesh3);
|
light.render_shadow(mesh3);
|
||||||
|
|
||||||
|
// Actual Rendering
|
||||||
|
|
||||||
glViewport(0, 0, 1920, 1080);
|
glViewport(0, 0, 1920, 1080);
|
||||||
|
|
||||||
|
// Marching Cubes
|
||||||
|
|
||||||
|
mc_render_shader.use();
|
||||||
|
|
||||||
|
// Bind the screen framebuffer
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
|
|
||||||
|
glClearColor(0.6f, 0.9f, 0.9f, 1.0f);
|
||||||
glClearColor(0.1, 0.1f, 0.1, 1.0f);
|
glClearColor(0.1, 0.1f, 0.1, 1.0f);
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
|
// Bind the camera to the rendering shader
|
||||||
|
mc_render_shader.setMat4("proj", camera.get_projection());
|
||||||
|
mc_render_shader.setMat4("view", camera.get_view());
|
||||||
|
|
||||||
|
// Set other variables
|
||||||
|
mc_render_shader.setFloat("step", 1.0 / static_cast<float>(size_z - 1));
|
||||||
|
mc_render_shader.setFloat("threshold", 0.4);
|
||||||
|
|
||||||
|
mc_render_shader.setInt("size_x", size_x);
|
||||||
|
mc_render_shader.setInt("size_y", size_y);
|
||||||
|
mc_render_shader.setInt("size_z", size_z);
|
||||||
|
|
||||||
|
// Bind the noise texture to the rendering shader
|
||||||
|
noise.bind_to(0);
|
||||||
|
|
||||||
|
// Draw all layers as polygons
|
||||||
|
glPolygonMode(GL_FRONT_AND_BACK, Gedeng::Input::is_key_down(GLFW_KEY_X) ? GL_LINE : GL_FILL);
|
||||||
|
glDrawArrays(GL_POINTS, 0, size_x * size_y * size_z);
|
||||||
|
|
||||||
|
// Normal
|
||||||
|
|
||||||
render_shader.use();
|
render_shader.use();
|
||||||
|
|
||||||
// Camera
|
// Camera
|
||||||
@ -177,6 +236,19 @@ class FullDemo : public Gedeng::Application {
|
|||||||
Gedeng::ObjMesh mesh1;
|
Gedeng::ObjMesh mesh1;
|
||||||
Gedeng::ObjMesh mesh2;
|
Gedeng::ObjMesh mesh2;
|
||||||
Gedeng::ObjMesh mesh3;
|
Gedeng::ObjMesh mesh3;
|
||||||
|
|
||||||
|
// Marching cubes
|
||||||
|
int size_x;
|
||||||
|
int size_y;
|
||||||
|
int size_z;
|
||||||
|
|
||||||
|
float height = 0.0;
|
||||||
|
|
||||||
|
Gedeng::Shader mc_render_shader;
|
||||||
|
Gedeng::Shader mc_noise_shader;
|
||||||
|
|
||||||
|
Gedeng::Framebuffer3D noise;
|
||||||
|
Gedeng::VertexBuffer mc_vertex_rectangle;
|
||||||
};
|
};
|
||||||
|
|
||||||
Gedeng::Application *Gedeng::create_application() {
|
Gedeng::Application *Gedeng::create_application() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user