Skip to content

Instantly share code, notes, and snippets.

@gyng
Last active April 13, 2020 09:21
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gyng/8921328 to your computer and use it in GitHub Desktop.
Save gyng/8921328 to your computer and use it in GitHub Desktop.
OpenGL inverse projection matrix
/*
Based off http://bookofhook.com/mousepick.pdf
OpenGL matrix order
m0 m4 m8 m12
m1 m5 m9 m13
m2 m6 m10 m14
m3 m7 m11 m15
Projection matrix
a 0 0 0
0 b 0 0
0 0 c d
0 0 e 0
Inverse projection
1/a, 0, 0, 0,
0, 1/b, 0, 0,
0, 0, 0, 1/e,
0, 0, 1/d, -c/(d*e)
*/
double op[16]; // original projection matrix
glGetDoublev(GL_PROJECTION_MATRIX, op);
double a = op[0];
double b = op[5];
double c = op[10];
double d = op[14];
double e = op[11];
double inverseProject[16] = { 0.0 };
inverseProject[0] = 1.0 / a;
inverseProject[5] = 1.0 / b;
inverseProject[11] = 1.0 / d;
inverseProject[14] = 1.0 / e;
inverseProject[15] = -c / (d * e);
//glLoadMatrixd(inverseProject);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment