前言
最近的需求需要涉及到在web上实现各个矩阵的变换和逆变换,不过功能也仅限于此,没必要因为这个功能而引用three.js,所以就想着gluProject和gluUnProject两个函数在JavaScript上实现一遍,于是对照着这两个函数的源码进行改写。改写用到了矩阵向量库glMatrix。
gluProject和gluUnProject源码
GLint GLAPIENTRY
gluProject(GLdouble objx, GLdouble objy, GLdouble objz,
const GLdouble modelMatrix[16],
const GLdouble projMatrix[16],
const GLint viewport[4],
GLdouble *winx, GLdouble *winy, GLdouble *winz)
{
double in[4];
double out[4];
in[0]=objx;
in[1]=objy;
in[2]=objz;
in[3]=1.0;
__gluMultMatrixVecd(modelMatrix, in, out);
__gluMultMatrixVecd(projMatrix, out, in);
if (in[3] == 0.0) return(GL_FALSE);
in[0] /= in[3];
in[1] /= in[3];
in[2] /= in[3];
/* Map x, y and z to range 0-1 */
in[0] = in[0] * 0.5 + 0.5;
in[1] = in[1] * 0.5 + 0.5;
in[2] =