117 lines
4.1 KiB
GLSL
117 lines
4.1 KiB
GLSL
|
|
uniform sampler2D map;
|
|
|
|
uniform float width;
|
|
uniform float height;
|
|
uniform float nearClipping, farClipping;
|
|
|
|
uniform float pointSize;
|
|
uniform float boxSize;
|
|
uniform float cameraIndex;
|
|
|
|
uniform float numCameras;
|
|
|
|
uniform mat4 c2wm;
|
|
uniform mat4 prjm;
|
|
|
|
varying vec2 vUv;
|
|
varying vec2 vUv1pxOffset;
|
|
varying float paintfordiscard;
|
|
|
|
// mat4 swapHandedness(mat4 sM) {
|
|
// return mat4(
|
|
// sM[0][0], sM[0][1], sM[0][2], sM[3][0],
|
|
// sM[1][0], sM[1][1], sM[1][2], sM[3][1],
|
|
// sM[2][0], sM[2][1], sM[2][2], sM[3][2],
|
|
// sM[0][3], sM[1][3], sM[2][3], sM[3][3]);
|
|
// }
|
|
mat4 fuckAroundAndFindOut(mat4 sM) {
|
|
// return mat4(
|
|
// sM[0][0], sM[1][0], sM[2][0], sM[0][3],
|
|
// sM[0][1], sM[1][1], sM[2][1], sM[1][3],
|
|
// sM[0][2], sM[1][2], sM[2][2], sM[2][3],
|
|
// sM[3][0], sM[3][1], sM[3][2], sM[3][3]);
|
|
return mat4(
|
|
sM[0][0], sM[0][1], sM[0][2], sM[0][3],
|
|
sM[1][0], sM[1][1], sM[1][2], sM[1][3],
|
|
sM[2][0], sM[2][1], sM[2][2], sM[2][3],
|
|
sM[3][0], sM[3][1], sM[3][2], sM[3][3]);
|
|
// return mat4(
|
|
// sM[0][0], sM[1][0], sM[0][2], sM[0][3],
|
|
// sM[0][1], sM[1][1], sM[1][2], sM[1][3],
|
|
// sM[2][0], sM[2][1], sM[2][2], sM[2][3],
|
|
// sM[3][0], sM[3][1], sM[3][2], sM[3][3]);
|
|
// return mat4(
|
|
// sM[0][0], sM[0][1], sM[2][0], sM[0][3],
|
|
// sM[1][0], sM[1][1], sM[2][1], sM[1][3],
|
|
// sM[0][2], sM[1][2], sM[2][2], sM[2][3],
|
|
// sM[3][0], sM[3][1], sM[3][2], sM[3][3]);
|
|
// return mat4(
|
|
// sM[0][0], sM[0][1], -sM[0][2], sM[0][3],
|
|
// sM[1][0], sM[1][1], sM[1][2], sM[1][3],
|
|
// -sM[2][0], sM[2][1], sM[2][2], sM[2][3],
|
|
// sM[3][0], sM[3][1], sM[3][2], sM[3][3]);
|
|
|
|
}
|
|
|
|
void main() {
|
|
|
|
vUv = vec2( position.x / width, position.y / height );
|
|
vUv1pxOffset = vec2( 1.0 / width, 1.0 / height ) * 2.0;
|
|
|
|
int skipctr = 0;
|
|
int skipthreshold = 1;
|
|
|
|
for (float xoff = -1.0; xoff < 2.0; xoff++) {
|
|
for (float yoff = -1.0; yoff < 2.0; yoff++) {
|
|
vec2 thisUv = vUv + (vec2(xoff, yoff) * vUv1pxOffset);
|
|
vec4 color = texture2D(map, thisUv*vec2(1.0/numCameras,(1.0/3.0))+vec2(cameraIndex/numCameras,(1.0/3.0)));
|
|
float depth = ( color.r + color.g + color.b ) / 3.0;
|
|
if (depth < 0.01) {
|
|
skipctr++;
|
|
}
|
|
}
|
|
}
|
|
|
|
paintfordiscard = float(skipctr > skipthreshold);
|
|
//vec4 color = texture2D( map, vUv*vec2(0.5,(1.0/3.0))+vec2(0,(1.0/3.0)));
|
|
vec4 color = texture2D( map, vUv*vec2(1.0/numCameras,(1.0/3.0))+vec2(cameraIndex/numCameras,(1.0/3.0)));
|
|
|
|
float depth = ( color.r + color.g + color.b ) / 3.0;
|
|
|
|
// (original) Projection code by @kcmic
|
|
|
|
// instead of building a matrix and multiplying by the matrix, math is being done to
|
|
// guess the projection.
|
|
// Undoes the perspective division
|
|
//float z = depth * (farClipping-nearClipping) + nearClipping;
|
|
// float z = depth;
|
|
|
|
// vec4 pos = vec4(
|
|
// ( position.x / width - 0.5 )*boxSize,
|
|
// ( position.y / height - 0.5 )*boxSize,
|
|
// z*boxSize*0.5, // we had applied a (-1.0) multiplier to try to flip element [2,2]
|
|
// 1.0);
|
|
|
|
vec4 pos = vec4(
|
|
2.*(position.x / float(width)) - 1.,
|
|
2.*(position.y / float(height)) - 1.,
|
|
-1., //mix(1., -1., depth),
|
|
1.0
|
|
);
|
|
//vec4 pos2 = pos;
|
|
|
|
// First undo projection, then undo view, then below model is undone; flip the Y and Z vectors since WebGL is right handed
|
|
vec4 pos2 = fuckAroundAndFindOut(c2wm) * inverse(prjm) * pos; // order matters here! Parentheses do not
|
|
|
|
pos2.xyz *= boxSize;
|
|
// pos2 = pos2 * vec4(20000., 20000., 20000., 20000.); // bad idea! the last point needs to be 1 for translation to work
|
|
// pos2 = pos2 * boxSize;
|
|
//vec4 pos2 = inverse(c2wm) * pos;
|
|
// float(cameraIndex)
|
|
gl_PointSize = pointSize;
|
|
gl_Position = projectionMatrix * modelViewMatrix * pos2;
|
|
if (depth <.01 || (paintfordiscard != 0.0)) { // move this point out of the view box if the depth is nearly zero
|
|
gl_Position = vec4(-1., -1., -1., -1.);
|
|
}
|
|
} |