working intersection - rotating simplex

This commit is contained in:
2018-12-20 11:26:18 -05:00
parent 78195ef8ec
commit 1ee97c5154
6 changed files with 161 additions and 57 deletions

56
simplex/shaders/sect.geom Normal file
View File

@@ -0,0 +1,56 @@
#version 440 core
layout(points) in;
layout(triangle_strip, max_vertices=48) out;
layout(std430, binding=1) buffer Positions {
vec4 verts[];
};
layout(std140, binding=1) uniform Matrices {
mat4 model;
mat4 view;
mat4 proj;
};
in ivec4 inds[];
out vec4 pos;
void emit(vec4 v) {
pos = v;
gl_Position = proj * view * vec4(v.xyz, -v.w + 2);
EmitVertex();
}
void main() {
vec4 pos4[4];
for(int i = 0; i < 4; ++i) pos4[i] = model * verts[inds[0][i]];
int lo[4], L = 0;
int hi[4], H = 0;
for(int i = 0; i < 4; ++i) {
if (pos4[i].w < 0) {
lo[L++] = i;
} else {
hi[H++] = i;
}
}
vec4 sect[4]; int S = 0;
for (int l = 0; l < L; ++l) {
for (int h = 0; h < H; ++h) {
vec4 a = pos4[lo[l]];
vec4 b = pos4[hi[h]];
sect[S++] = (0 - a.w) / (b.w - a.w) * (b-a) + a;
}
}
for(int s = 0; s < S; ++s) {
emit(sect[s]);
}
EndPrimitive();
}