Ok, spontan hat wohl keiner eine Idee. Hier mal der Shadercode, vielleicht fällt ja jemandem irgend ein rudimentärer Fehler auf, ich arbeite an einem KSKB, da hängt aber ein bisschen was dran, also ich reich es nach!
#version 330
in vec4 positionvec[];
layout(triangles) in;
layout(triangle_strip, max_vertices = 18) out;
struct EdgeCase {
int nr;
ivec3[5] polygons;
};
const EdgeCase[256] TRIANGLE_TABLE = EdgeCase[](
EdgeCase(0, ivec3[5](ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(1, ivec3[5](ivec3(0,8,3),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(1, ivec3[5](ivec3(0,1,9),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(1,8,3),ivec3(9,8,1),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(1, ivec3[5](ivec3(1,2,10),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(0,8,3),ivec3(1,2,10),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(9,2,10),ivec3(0,2,9),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(2,8,3),ivec3(2,10,8),ivec3(10,9,8),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(1, ivec3[5](ivec3(3,11,2),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(0,11,2),ivec3(8,11,0),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(1,9,0),ivec3(2,3,11),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(1,11,2),ivec3(1,9,11),ivec3(9,8,11),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(3,10,1),ivec3(11,10,3),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(0,10,1),ivec3(0,8,10),ivec3(8,11,10),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(3,9,0),ivec3(3,11,9),ivec3(11,10,9),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(9,8,10),ivec3(10,8,11),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(1, ivec3[5](ivec3(4,7,8),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(4,3,0),ivec3(7,3,4),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(0,1,9),ivec3(8,4,7),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(4,1,9),ivec3(4,7,1),ivec3(7,3,1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(1,2,10),ivec3(8,4,7),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(3,4,7),ivec3(3,0,4),ivec3(1,2,10),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(9,2,10),ivec3(9,0,2),ivec3(8,4,7),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(2,10,9),ivec3(2,9,7),ivec3(2,7,3),ivec3(7,9,4),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(8,4,7),ivec3(3,11,2),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(11,4,7),ivec3(11,2,4),ivec3(2,0,4),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(9,0,1),ivec3(8,4,7),ivec3(2,3,11),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(4,7,11),ivec3(9,4,11),ivec3(9,11,2),ivec3(9,2,1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(3,10,1),ivec3(3,11,10),ivec3(7,8,4),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(1,11,10),ivec3(1,4,11),ivec3(1,0,4),ivec3(7,11,4),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(4,7,8),ivec3(9,0,11),ivec3(9,11,10),ivec3(11,0,3),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(4,7,11),ivec3(4,11,9),ivec3(9,11,10),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(1, ivec3[5](ivec3(9,5,4),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(9,5,4),ivec3(0,8,3),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(0,5,4),ivec3(1,5,0),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(8,5,4),ivec3(8,3,5),ivec3(3,1,5),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(1,2,10),ivec3(9,5,4),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(3,0,8),ivec3(1,2,10),ivec3(4,9,5),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(5,2,10),ivec3(5,4,2),ivec3(4,0,2),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(2,10,5),ivec3(3,2,5),ivec3(3,5,4),ivec3(3,4,8),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(9,5,4),ivec3(2,3,11),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(0,11,2),ivec3(0,8,11),ivec3(4,9,5),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(0,5,4),ivec3(0,1,5),ivec3(2,3,11),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(2,1,5),ivec3(2,5,8),ivec3(2,8,11),ivec3(4,8,5),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(10,3,11),ivec3(10,1,3),ivec3(9,5,4),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(4,9,5),ivec3(0,8,1),ivec3(8,10,1),ivec3(8,11,10),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(5,4,0),ivec3(5,0,11),ivec3(5,11,10),ivec3(11,0,3),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(5,4,8),ivec3(5,8,10),ivec3(10,8,11),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(9,7,8),ivec3(5,7,9),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(9,3,0),ivec3(9,5,3),ivec3(5,7,3),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(0,7,8),ivec3(0,1,7),ivec3(1,5,7),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(1,5,3),ivec3(3,5,7),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(9,7,8),ivec3(9,5,7),ivec3(10,1,2),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(10,1,2),ivec3(9,5,0),ivec3(5,3,0),ivec3(5,7,3),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(8,0,2),ivec3(8,2,5),ivec3(8,5,7),ivec3(10,5,2),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(2,10,5),ivec3(2,5,3),ivec3(3,5,7),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(7,9,5),ivec3(7,8,9),ivec3(3,11,2),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(9,5,7),ivec3(9,7,2),ivec3(9,2,0),ivec3(2,7,11),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(2,3,11),ivec3(0,1,8),ivec3(1,7,8),ivec3(1,5,7),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(11,2,1),ivec3(11,1,7),ivec3(7,1,5),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(9,5,8),ivec3(8,5,7),ivec3(10,1,3),ivec3(10,3,11),ivec3(-1,-1,-1))),
EdgeCase(5, ivec3[5](ivec3(5,7,0),ivec3(5,0,9),ivec3(7,11,0),ivec3(1,0,10),ivec3(11,10,0))),
EdgeCase(5, ivec3[5](ivec3(11,10,0),ivec3(11,0,3),ivec3(10,5,0),ivec3(8,0,7),ivec3(5,7,0))),
EdgeCase(2, ivec3[5](ivec3(11,10,5),ivec3(7,11,5),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(1, ivec3[5](ivec3(10,6,5),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(0,8,3),ivec3(5,10,6),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(9,0,1),ivec3(5,10,6),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(1,8,3),ivec3(1,9,8),ivec3(5,10,6),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(1,6,5),ivec3(2,6,1),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(1,6,5),ivec3(1,2,6),ivec3(3,0,8),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(9,6,5),ivec3(9,0,6),ivec3(0,2,6),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(5,9,8),ivec3(5,8,2),ivec3(5,2,6),ivec3(3,2,8),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(2,3,11),ivec3(10,6,5),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(11,0,8),ivec3(11,2,0),ivec3(10,6,5),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(0,1,9),ivec3(2,3,11),ivec3(5,10,6),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(5,10,6),ivec3(1,9,2),ivec3(9,11,2),ivec3(9,8,11),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(6,3,11),ivec3(6,5,3),ivec3(5,1,3),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(0,8,11),ivec3(0,11,5),ivec3(0,5,1),ivec3(5,11,6),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(3,11,6),ivec3(0,3,6),ivec3(0,6,5),ivec3(0,5,9),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(6,5,9),ivec3(6,9,11),ivec3(11,9,8),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(5,10,6),ivec3(4,7,8),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(4,3,0),ivec3(4,7,3),ivec3(6,5,10),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(1,9,0),ivec3(5,10,6),ivec3(8,4,7),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(10,6,5),ivec3(1,9,7),ivec3(1,7,3),ivec3(7,9,4),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(6,1,2),ivec3(6,5,1),ivec3(4,7,8),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(1,2,5),ivec3(5,2,6),ivec3(3,0,4),ivec3(3,4,7),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(8,4,7),ivec3(9,0,5),ivec3(0,6,5),ivec3(0,2,6),ivec3(-1,-1,-1))),
EdgeCase(5, ivec3[5](ivec3(7,3,9),ivec3(7,9,4),ivec3(3,2,9),ivec3(5,9,6),ivec3(2,6,9))),
EdgeCase(3, ivec3[5](ivec3(3,11,2),ivec3(7,8,4),ivec3(10,6,5),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(5,10,6),ivec3(4,7,2),ivec3(4,2,0),ivec3(2,7,11),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(0,1,9),ivec3(4,7,8),ivec3(2,3,11),ivec3(5,10,6),ivec3(-1,-1,-1))),
EdgeCase(5, ivec3[5](ivec3(9,2,1),ivec3(9,11,2),ivec3(9,4,11),ivec3(7,11,4),ivec3(5,10,6))),
EdgeCase(4, ivec3[5](ivec3(8,4,7),ivec3(3,11,5),ivec3(3,5,1),ivec3(5,11,6),ivec3(-1,-1,-1))),
EdgeCase(5, ivec3[5](ivec3(5,1,11),ivec3(5,11,6),ivec3(1,0,11),ivec3(7,11,4),ivec3(0,4,11))),
EdgeCase(5, ivec3[5](ivec3(0,5,9),ivec3(0,6,5),ivec3(0,3,6),ivec3(11,6,3),ivec3(8,4,7))),
EdgeCase(4, ivec3[5](ivec3(6,5,9),ivec3(6,9,11),ivec3(4,7,9),ivec3(7,11,9),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(10,4,9),ivec3(6,4,10),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(4,10,6),ivec3(4,9,10),ivec3(0,8,3),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(10,0,1),ivec3(10,6,0),ivec3(6,4,0),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(8,3,1),ivec3(8,1,6),ivec3(8,6,4),ivec3(6,1,10),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(1,4,9),ivec3(1,2,4),ivec3(2,6,4),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(3,0,8),ivec3(1,2,9),ivec3(2,4,9),ivec3(2,6,4),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(0,2,4),ivec3(4,2,6),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(8,3,2),ivec3(8,2,4),ivec3(4,2,6),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(10,4,9),ivec3(10,6,4),ivec3(11,2,3),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(0,8,2),ivec3(2,8,11),ivec3(4,9,10),ivec3(4,10,6),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(3,11,2),ivec3(0,1,6),ivec3(0,6,4),ivec3(6,1,10),ivec3(-1,-1,-1))),
EdgeCase(5, ivec3[5](ivec3(6,4,1),ivec3(6,1,10),ivec3(4,8,1),ivec3(2,1,11),ivec3(8,11,1))),
EdgeCase(4, ivec3[5](ivec3(9,6,4),ivec3(9,3,6),ivec3(9,1,3),ivec3(11,6,3),ivec3(-1,-1,-1))),
EdgeCase(5, ivec3[5](ivec3(8,11,1),ivec3(8,1,0),ivec3(11,6,1),ivec3(9,1,4),ivec3(6,4,1))),
EdgeCase(3, ivec3[5](ivec3(3,11,6),ivec3(3,6,0),ivec3(0,6,4),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(6,4,8),ivec3(11,6,8),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(7,10,6),ivec3(7,8,10),ivec3(8,9,10),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(0,7,3),ivec3(0,10,7),ivec3(0,9,10),ivec3(6,7,10),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(10,6,7),ivec3(1,10,7),ivec3(1,7,8),ivec3(1,8,0),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(10,6,7),ivec3(10,7,1),ivec3(1,7,3),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(1,2,6),ivec3(1,6,8),ivec3(1,8,9),ivec3(8,6,7),ivec3(-1,-1,-1))),
EdgeCase(5, ivec3[5](ivec3(2,6,9),ivec3(2,9,1),ivec3(6,7,9),ivec3(0,9,3),ivec3(7,3,9))),
EdgeCase(3, ivec3[5](ivec3(7,8,0),ivec3(7,0,6),ivec3(6,0,2),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(7,3,2),ivec3(6,7,2),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(2,3,11),ivec3(10,6,8),ivec3(10,8,9),ivec3(8,6,7),ivec3(-1,-1,-1))),
EdgeCase(5, ivec3[5](ivec3(2,0,7),ivec3(2,7,11),ivec3(0,9,7),ivec3(6,7,10),ivec3(9,10,7))),
EdgeCase(5, ivec3[5](ivec3(1,8,0),ivec3(1,7,8),ivec3(1,10,7),ivec3(6,7,10),ivec3(2,3,11))),
EdgeCase(4, ivec3[5](ivec3(11,2,1),ivec3(11,1,7),ivec3(10,6,1),ivec3(6,7,1),ivec3(-1,-1,-1))),
EdgeCase(5, ivec3[5](ivec3(8,9,6),ivec3(8,6,7),ivec3(9,1,6),ivec3(11,6,3),ivec3(1,3,6))),
EdgeCase(2, ivec3[5](ivec3(0,9,1),ivec3(11,6,7),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(7,8,0),ivec3(7,0,6),ivec3(3,11,0),ivec3(11,6,0),ivec3(-1,-1,-1))),
EdgeCase(1, ivec3[5](ivec3(7,11,6),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(1, ivec3[5](ivec3(7,6,11),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(3,0,8),ivec3(11,7,6),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(0,1,9),ivec3(11,7,6),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(8,1,9),ivec3(8,3,1),ivec3(11,7,6),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(10,1,2),ivec3(6,11,7),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(1,2,10),ivec3(3,0,8),ivec3(6,11,7),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(2,9,0),ivec3(2,10,9),ivec3(6,11,7),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(6,11,7),ivec3(2,10,3),ivec3(10,8,3),ivec3(10,9,8),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(7,2,3),ivec3(6,2,7),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(7,0,8),ivec3(7,6,0),ivec3(6,2,0),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(2,7,6),ivec3(2,3,7),ivec3(0,1,9),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(1,6,2),ivec3(1,8,6),ivec3(1,9,8),ivec3(8,7,6),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(10,7,6),ivec3(10,1,7),ivec3(1,3,7),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(10,7,6),ivec3(1,7,10),ivec3(1,8,7),ivec3(1,0,8),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(0,3,7),ivec3(0,7,10),ivec3(0,10,9),ivec3(6,10,7),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(7,6,10),ivec3(7,10,8),ivec3(8,10,9),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(6,8,4),ivec3(11,8,6),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(3,6,11),ivec3(3,0,6),ivec3(0,4,6),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(8,6,11),ivec3(8,4,6),ivec3(9,0,1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(9,4,6),ivec3(9,6,3),ivec3(9,3,1),ivec3(11,3,6),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(6,8,4),ivec3(6,11,8),ivec3(2,10,1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(1,2,10),ivec3(3,0,11),ivec3(0,6,11),ivec3(0,4,6),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(4,11,8),ivec3(4,6,11),ivec3(0,2,9),ivec3(2,10,9),ivec3(-1,-1,-1))),
EdgeCase(5, ivec3[5](ivec3(10,9,3),ivec3(10,3,2),ivec3(9,4,3),ivec3(11,3,6),ivec3(4,6,3))),
EdgeCase(3, ivec3[5](ivec3(8,2,3),ivec3(8,4,2),ivec3(4,6,2),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(0,4,2),ivec3(4,6,2),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(1,9,0),ivec3(2,3,4),ivec3(2,4,6),ivec3(4,3,8),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(1,9,4),ivec3(1,4,2),ivec3(2,4,6),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(8,1,3),ivec3(8,6,1),ivec3(8,4,6),ivec3(6,10,1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(10,1,0),ivec3(10,0,6),ivec3(6,0,4),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(5, ivec3[5](ivec3(4,6,3),ivec3(4,3,8),ivec3(6,10,3),ivec3(0,3,9),ivec3(10,9,3))),
EdgeCase(2, ivec3[5](ivec3(10,9,4),ivec3(6,10,4),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(4,9,5),ivec3(7,6,11),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(0,8,3),ivec3(4,9,5),ivec3(11,7,6),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(5,0,1),ivec3(5,4,0),ivec3(7,6,11),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(11,7,6),ivec3(8,3,4),ivec3(3,5,4),ivec3(3,1,5),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(9,5,4),ivec3(10,1,2),ivec3(7,6,11),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(6,11,7),ivec3(1,2,10),ivec3(0,8,3),ivec3(4,9,5),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(7,6,11),ivec3(5,4,10),ivec3(4,2,10),ivec3(4,0,2),ivec3(-1,-1,-1))),
EdgeCase(5, ivec3[5](ivec3(3,4,8),ivec3(3,5,4),ivec3(3,2,5),ivec3(10,5,2),ivec3(11,7,6))),
EdgeCase(3, ivec3[5](ivec3(7,2,3),ivec3(7,6,2),ivec3(5,4,9),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(9,5,4),ivec3(0,8,6),ivec3(0,6,2),ivec3(6,8,7),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(3,6,2),ivec3(3,7,6),ivec3(1,5,0),ivec3(5,4,0),ivec3(-1,-1,-1))),
EdgeCase(5, ivec3[5](ivec3(6,2,8),ivec3(6,8,7),ivec3(2,1,8),ivec3(4,8,5),ivec3(1,5,8))),
EdgeCase(4, ivec3[5](ivec3(9,5,4),ivec3(10,1,6),ivec3(1,7,6),ivec3(1,3,7),ivec3(-1,-1,-1))),
EdgeCase(5, ivec3[5](ivec3(1,6,10),ivec3(1,7,6),ivec3(1,0,7),ivec3(8,7,0),ivec3(9,5,4))),
EdgeCase(5, ivec3[5](ivec3(4,0,10),ivec3(4,10,5),ivec3(0,3,10),ivec3(6,10,7),ivec3(3,7,10))),
EdgeCase(4, ivec3[5](ivec3(7,6,10),ivec3(7,10,8),ivec3(5,4,10),ivec3(4,8,10),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(6,9,5),ivec3(6,11,9),ivec3(11,8,9),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(3,6,11),ivec3(0,6,3),ivec3(0,5,6),ivec3(0,9,5),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(0,11,8),ivec3(0,5,11),ivec3(0,1,5),ivec3(5,6,11),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(6,11,3),ivec3(6,3,5),ivec3(5,3,1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(1,2,10),ivec3(9,5,11),ivec3(9,11,8),ivec3(11,5,6),ivec3(-1,-1,-1))),
EdgeCase(5, ivec3[5](ivec3(0,11,3),ivec3(0,6,11),ivec3(0,9,6),ivec3(5,6,9),ivec3(1,2,10))),
EdgeCase(5, ivec3[5](ivec3(11,8,5),ivec3(11,5,6),ivec3(8,0,5),ivec3(10,5,2),ivec3(0,2,5))),
EdgeCase(4, ivec3[5](ivec3(6,11,3),ivec3(6,3,5),ivec3(2,10,3),ivec3(10,5,3),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(5,8,9),ivec3(5,2,8),ivec3(5,6,2),ivec3(3,8,2),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(9,5,6),ivec3(9,6,0),ivec3(0,6,2),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(5, ivec3[5](ivec3(1,5,8),ivec3(1,8,0),ivec3(5,6,8),ivec3(3,8,2),ivec3(6,2,8))),
EdgeCase(2, ivec3[5](ivec3(1,5,6),ivec3(2,1,6),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(5, ivec3[5](ivec3(1,3,6),ivec3(1,6,10),ivec3(3,8,6),ivec3(5,6,9),ivec3(8,9,6))),
EdgeCase(4, ivec3[5](ivec3(10,1,0),ivec3(10,0,6),ivec3(9,5,0),ivec3(5,6,0),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(0,3,8),ivec3(5,6,10),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(1, ivec3[5](ivec3(10,5,6),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(11,5,10),ivec3(7,5,11),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(11,5,10),ivec3(11,7,5),ivec3(8,3,0),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(5,11,7),ivec3(5,10,11),ivec3(1,9,0),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(10,7,5),ivec3(10,11,7),ivec3(9,8,1),ivec3(8,3,1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(11,1,2),ivec3(11,7,1),ivec3(7,5,1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(0,8,3),ivec3(1,2,7),ivec3(1,7,5),ivec3(7,2,11),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(9,7,5),ivec3(9,2,7),ivec3(9,0,2),ivec3(2,11,7),ivec3(-1,-1,-1))),
EdgeCase(5, ivec3[5](ivec3(7,5,2),ivec3(7,2,11),ivec3(5,9,2),ivec3(3,2,8),ivec3(9,8,2))),
EdgeCase(3, ivec3[5](ivec3(2,5,10),ivec3(2,3,5),ivec3(3,7,5),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(8,2,0),ivec3(8,5,2),ivec3(8,7,5),ivec3(10,2,5),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(9,0,1),ivec3(5,10,3),ivec3(5,3,7),ivec3(3,10,2),ivec3(-1,-1,-1))),
EdgeCase(5, ivec3[5](ivec3(9,8,2),ivec3(9,2,1),ivec3(8,7,2),ivec3(10,2,5),ivec3(7,5,2))),
EdgeCase(2, ivec3[5](ivec3(1,3,5),ivec3(3,7,5),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(0,8,7),ivec3(0,7,1),ivec3(1,7,5),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(9,0,3),ivec3(9,3,5),ivec3(5,3,7),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(9,8,7),ivec3(5,9,7),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(5,8,4),ivec3(5,10,8),ivec3(10,11,8),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(5,0,4),ivec3(5,11,0),ivec3(5,10,11),ivec3(11,3,0),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(0,1,9),ivec3(8,4,10),ivec3(8,10,11),ivec3(10,4,5),ivec3(-1,-1,-1))),
EdgeCase(5, ivec3[5](ivec3(10,11,4),ivec3(10,4,5),ivec3(11,3,4),ivec3(9,4,1),ivec3(3,1,4))),
EdgeCase(4, ivec3[5](ivec3(2,5,1),ivec3(2,8,5),ivec3(2,11,8),ivec3(4,5,8),ivec3(-1,-1,-1))),
EdgeCase(5, ivec3[5](ivec3(0,4,11),ivec3(0,11,3),ivec3(4,5,11),ivec3(2,11,1),ivec3(5,1,11))),
EdgeCase(5, ivec3[5](ivec3(0,2,5),ivec3(0,5,9),ivec3(2,11,5),ivec3(4,5,8),ivec3(11,8,5))),
EdgeCase(2, ivec3[5](ivec3(9,4,5),ivec3(2,11,3),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(2,5,10),ivec3(3,5,2),ivec3(3,4,5),ivec3(3,8,4),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(5,10,2),ivec3(5,2,4),ivec3(4,2,0),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(5, ivec3[5](ivec3(3,10,2),ivec3(3,5,10),ivec3(3,8,5),ivec3(4,5,8),ivec3(0,1,9))),
EdgeCase(4, ivec3[5](ivec3(5,10,2),ivec3(5,2,4),ivec3(1,9,2),ivec3(9,4,2),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(8,4,5),ivec3(8,5,3),ivec3(3,5,1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(0,4,5),ivec3(1,0,5),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(8,4,5),ivec3(8,5,3),ivec3(9,0,5),ivec3(0,3,5),ivec3(-1,-1,-1))),
EdgeCase(1, ivec3[5](ivec3(9,4,5),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(4,11,7),ivec3(4,9,11),ivec3(9,10,11),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(0,8,3),ivec3(4,9,7),ivec3(9,11,7),ivec3(9,10,11),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(1,10,11),ivec3(1,11,4),ivec3(1,4,0),ivec3(7,4,11),ivec3(-1,-1,-1))),
EdgeCase(5, ivec3[5](ivec3(3,1,4),ivec3(3,4,8),ivec3(1,10,4),ivec3(7,4,11),ivec3(10,11,4))),
EdgeCase(4, ivec3[5](ivec3(4,11,7),ivec3(9,11,4),ivec3(9,2,11),ivec3(9,1,2),ivec3(-1,-1,-1))),
EdgeCase(5, ivec3[5](ivec3(9,7,4),ivec3(9,11,7),ivec3(9,1,11),ivec3(2,11,1),ivec3(0,8,3))),
EdgeCase(3, ivec3[5](ivec3(11,7,4),ivec3(11,4,2),ivec3(2,4,0),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(11,7,4),ivec3(11,4,2),ivec3(8,3,4),ivec3(3,2,4),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(2,9,10),ivec3(2,7,9),ivec3(2,3,7),ivec3(7,4,9),ivec3(-1,-1,-1))),
EdgeCase(5, ivec3[5](ivec3(9,10,7),ivec3(9,7,4),ivec3(10,2,7),ivec3(8,7,0),ivec3(2,0,7))),
EdgeCase(5, ivec3[5](ivec3(3,7,10),ivec3(3,10,2),ivec3(7,4,10),ivec3(1,10,0),ivec3(4,0,10))),
EdgeCase(2, ivec3[5](ivec3(1,10,2),ivec3(8,7,4),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(4,9,1),ivec3(4,1,7),ivec3(7,1,3),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(4,9,1),ivec3(4,1,7),ivec3(0,8,1),ivec3(8,7,1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(4,0,3),ivec3(7,4,3),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(1, ivec3[5](ivec3(4,8,7),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(9,10,8),ivec3(10,11,8),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(3,0,9),ivec3(3,9,11),ivec3(11,9,10),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(0,1,10),ivec3(0,10,8),ivec3(8,10,11),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(3,1,10),ivec3(11,3,10),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(1,2,11),ivec3(1,11,9),ivec3(9,11,8),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(3,0,9),ivec3(3,9,11),ivec3(1,2,9),ivec3(2,11,9),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(0,2,11),ivec3(8,0,11),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(1, ivec3[5](ivec3(3,2,11),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(3, ivec3[5](ivec3(2,3,8),ivec3(2,8,10),ivec3(10,8,9),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(9,10,2),ivec3(0,9,2),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(4, ivec3[5](ivec3(2,3,8),ivec3(2,8,10),ivec3(0,1,8),ivec3(1,10,8),ivec3(-1,-1,-1))),
EdgeCase(1, ivec3[5](ivec3(1,10,2),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(2, ivec3[5](ivec3(1,3,8),ivec3(9,1,8),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(1, ivec3[5](ivec3(0,9,1),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(1, ivec3[5](ivec3(0,3,8),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1))),
EdgeCase(0, ivec3[5](ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1),ivec3(-1,-1,-1)))
);
void buildVertex(int edge, float[8] densityValues, vec3 cubePos, int caseNumber){
float x, y, z;
switch (edge) {
case 0:
float d01 = -densityValues[0] / (densityValues[1] - densityValues[0]);
x = 0;
y = d01;
z = 0;
break;
case 1:
float d12 = -densityValues[1] / (densityValues[2] - densityValues[1]);
x = d12;
y = 1;
z = 0;
break;
case 2:
float d23 = -densityValues[2] / (densityValues[3] - densityValues[2]);
x = 1;
y = 1 - d23;
z = 0;
break;
case 3:
float d03 = -densityValues[0] / (densityValues[3] - densityValues[0]);
x = d03;
y = 0;
z = 0;
break;
case 4:
float d45 = -densityValues[4] / (densityValues[5] - densityValues[4]);
x = 0;
y = d45;
z = 1;
break;
case 5:
float d56 = -densityValues[5] / (densityValues[6] - densityValues[5]);
x = d56;
y = 1;
z = 1;
break;
case 6:
float d67 = -densityValues[6] / (densityValues[7] - densityValues[6]);
x = 1;
y = 1 - d67;
z = 1;
break;
case 7:
float d47 = -densityValues[4] / (densityValues[7] - densityValues[4]);
x = d47;
y = 0;
z = 1;
break;
case 8:
float d04 = -densityValues[0] / (densityValues[4] - densityValues[0]);
x = 0;
y = 0;
z = d04;
break;
case 9:
float d15 = -densityValues[1] / (densityValues[5] - densityValues[1]);
x = 0;
y = 1;
z = d15;
break;
case 10:
float d26 = -densityValues[2] / (densityValues[6] - densityValues[2]);
x = 1;
y = 1;
z = d26;
break;
case 11:
float d37 = -densityValues[3] / (densityValues[7] - densityValues[3]);
x = 1;
y = 0;
z = d37;
break;
default:
x = 0;
y = 0;
z = 0;
break;
}
gl_Position = vec4(x+cubePos.x, y+cubePos.y, z+cubePos.z, 0);
EmitVertex();
}
float dichteFunktion(float x, float y, float z){
float wert = y*-1.0f;
return wert;
}
void buildTriangle(float[8] densityValues, ivec3 edges, vec3 cubePos, int caseNumber){
buildVertex(edges.x, densityValues, cubePos, caseNumber);
buildVertex(edges.y, densityValues, cubePos, caseNumber);
buildVertex(edges.z, densityValues, cubePos, caseNumber);
EndPrimitive();
}
int tabellenIndex(float[8] densityValues) {
int result = 0;
int[8] bits;
gl_Position = vec4(densityValues[0], 0, 0, 0);
EmitVertex();
for(int i = 0; i < 8; i++){
float value = densityValues**;
if(i==0){
gl_Position = vec4(value, 0, 0, 0);
EmitVertex();
}
if(value > 0.0f){
if(i==0){
gl_Position = vec4(densityValues[0], 0, 0, 0);
EmitVertex();
}
bits** = 1;
}else{
bits** = 0;
}
}
EndPrimitive();
for (int i = 0; i < 8; i++)
result |= bits** << i;
return result;
}
void buildTriangles(float[8] werte, vec3 cubePos){
int caseNumber = tabellenIndex(werte);
EdgeCase triangles = TRIANGLE_TABLE[caseNumber];
for (int i = 0; i < triangles.nr; i++)
buildTriangle(werte, triangles.polygons**, cubePos, caseNumber);
}
void generateCube(vec4 pos){
float werte[] = float[8](
dichteFunktion(pos.x, pos.y, pos.z),
dichteFunktion(pos.x+1, pos.y+1, pos.z),
dichteFunktion(pos.x, pos.y+1, pos.z),
dichteFunktion(pos.x+1, pos.y, pos.z),
dichteFunktion(pos.x, pos.y, pos.z+1),
dichteFunktion(pos.x, pos.y+1, pos.z+1),
dichteFunktion(pos.x+1, pos.y+1, pos.z+1),
dichteFunktion(pos.x+1, pos.y, pos.z+1)
);
buildTriangles(werte, vec3(pos));
}
void generate(){
generateCube(positionvec[0]);
}
void main() {
generate();
}