gluLookAt的实现的疑问[已解:2f]
本帖最后由 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, side, up;
GLfloat m;
forward = centerx - eyex;
forward = centery - eyey;
forward = centerz - eyez;
up = upx;
up = upy;
up = 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);
m = side;
m = side;
m = side;
m = up;
m = up;
m = up;
m = -forward;
m = -forward;
m = -forward;
glMultMatrixf(&m);
glTranslated(-eyex, -eyey, -eyez);
}为什么这里的up要重新side叉乘forward一次? 而不直接normalize(up)? 因为用户传进来的up可能是一个并非垂直于forward和side的值,需要重新换算成标准。据我所知至少在国内有不少人都愿意始终指定up为(0,0,1)……
页:
[1]