Source

kinect-viewer / main.vs

Full commit
/*
 * Copyright 2010 Cliff L. Biffle.  All Rights Reserved.
 * Use of this source code is governed by the Apache License 2.0,
 * which can be found in the LICENSE file.
 */
 
uniform sampler2D depthTex;
uniform sampler2D colorTex;
uniform bool useTextureFromCamera;

/*
 * Vertex Shader entry point.
 */
void main() {
  // Load our depth from the camera's depth texture.
  vec2 imageCoord = gl_Vertex.xy * vec2(1., 4./3.) * -0.5 + 0.5;
  vec4 sample = texture2D(depthTex, imageCoord);
  vec3 kinectPoint = vec3(gl_Vertex.xy, sample.g * 65536.);
  
  // Undo the Kinect's perspective projection, leaving the homogeneous term.
  vec4 vertex = vec4(kinect_unproject(kinectPoint), gl_Vertex.w);
  
  // Project the point using GL's perspective settings.
  gl_Position = gl_ModelViewProjectionMatrix * vertex;

  // The normal was computed in Kinect-space.  Unproject it too.
  vec3 normal = kinect_unproject_normal(normalize(gl_Normal), kinectPoint, vertex.xyz);
  
  if (vertex.z <= 0.) {
    gl_FrontColor = vec4(0,0,0,0);
    gl_PointSize = 0.;
    return;
  } else {
    gl_FrontColor = light_vertex(normal);
  }
  
  if (useTextureFromCamera) {
    vec2 fovScale = vec2(1.02, 1.30);
    vec2 skew = vec2(-0.0, -0.05) / vertex.z;
    vec2 colorCoord = (gl_Vertex.xy * fovScale + skew) * -0.5 + 0.5;
    gl_FrontColor = texture2D(colorTex, colorCoord);
  }
  
  vec4 vertexInEye = gl_Position;
	float dist = distance(vertexInEye.xyz, vec3(0,0,0));
	float psize = clamp(1.5 / dist * vertex.z, gl_Point.sizeMin, gl_Point.sizeMax);
	gl_PointSize = psize;
}