|
本帖最后由 CR苏杭 于 2011-7-20 15:05 编辑
- void GLAPIENTRY
- gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx,
- GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy,
- GLdouble upz)
- {
- float forward[3], side[3], up[3];
- GLfloat m[4][4];
- forward[0] = centerx - eyex;
- forward[1] = centery - eyey;
- forward[2] = centerz - eyez;
- up[0] = upx;
- up[1] = upy;
- up[2] = upz;
- normalize(forward);
- /* Side = forward x up */
- cross(forward, up, side);
- normalize(side);
- /* Recompute up as: up = side x forward */ // ????
- cross(side, forward, up);
- __gluMakeIdentityf(&m[0][0]);
- m[0][0] = side[0];
- m[1][0] = side[1];
- m[2][0] = side[2];
- m[0][1] = up[0];
- m[1][1] = up[1];
- m[2][1] = up[2];
- m[0][2] = -forward[0];
- m[1][2] = -forward[1];
- m[2][2] = -forward[2];
- glMultMatrixf(&m[0][0]);
- glTranslated(-eyex, -eyey, -eyez);
- }
复制代码 为什么这里的up要重新side叉乘forward一次? 而不直接normalize(up)? |
|