Skip to content

Instantly share code, notes, and snippets.

@jcayzac
Created November 3, 2012 06:32
Show Gist options
  • Save jcayzac/4006290 to your computer and use it in GitHub Desktop.
Save jcayzac/4006290 to your computer and use it in GitHub Desktop.
AR vertex shader (projects ECEF POI coordinates)
// double clat = cos(viewer_lat * DEGREES_TO_RADIANS);
// double slat = sin(viewer_lat * DEGREES_TO_RADIANS);
// double clon = cos(viewer_lon * DEGREES_TO_RADIANS);
// double slon = sin(viewer_lon * DEGREES_TO_RADIANS);
// double N = WGS84_A / sqrt(1.0 - WGS84_E2 * slat * slat);
// double viewer_x = (N + alt) * clat * clon;
// double viewer_y = (N + alt) * clat * slon;
// double viewer_z = (N * (1.0 - WGS84_E2) + alt) * slat;
// for each poi i:
// double cplat[i] = cos(plat[i] * DEGREES_TO_RADIANS);
// double splat[i] = sin(plat[i] * DEGREES_TO_RADIANS);
// double cplon[i] = cos(plon[i] * DEGREES_TO_RADIANS);
// double splon[i] = sin(plon[i] * DEGREES_TO_RADIANS);
// double pN[i] = WGS84_A / sqrt(1.0 - WGS84_E2 * splat[i] * splat[i]);
// double px[i] = (pN[i] + palt[i]) * cplat[i] * cplon[i];
// double py[i] = (pN[i] + palt[i]) * cplat[i] * splon[i];
// double pz[i] = (pN[i] * (1.0 - WGS84_E2) + palt[i]) * splat[i];
uniform vec4 ev; // = vec4(-slon, clon, 0, 0);
uniform vec4 nv; // = vec4(-slat*clon, -slat*slon, clat, 0);
uniform vec4 uv; // = vec4( clat*clon, clat*slon, slat, 1);
uniform vec3 cameraCoordinatesECEF; // = vec3(viewer_x, viewer_y, viewer_z)
uniform float cameraAltitude; // = float(viewer_alt);
attribute vec3 poiCoordinatesECEF; // = vec3(px[i], py[i], pz[i])
void main(void) {
vec4 d(cameraCoordinatesECEF - poiCoordinatesECEF, cameraAltitude);
gl_Position = vec4(dot(d, nv), -dot(d, ev), dot(d, uv), 1.f);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment