我发现glulookat(eye_x,eye_y,eye_z,obj_x,obj_y,obj_z,dir_x,dir_y,dir_z)有一点多余和矛盾。
(0)实际上一个相机系统只要一个观察点、两个观察向量就可以了,这两个观察向量一个代表观察的正方向,一个代表相机顶的朝向。
(1)在glulookat中,前三个参数表示观察点。中间三个参数表示目标点。然而,相机需要的是观察方向,所以它会用目标点减去观察点来得到这个向量。该向量只代表方向,因此,它本身有多大是无所谓的。至于你能不能看到目标点不取决于这个向量的大小,而取决于在投影阶段你的视景体的设置(znear,zfar)。因此,这个目标点的设计有点问题,比如,如果观察点是(0,0,0),那么目标点设成(0,0,1)和(0,0,100),其效果是一样的。
(2)最后三个变量代表了相机顶的朝向,这是一个空间向量。然而,一旦设置了观察方向(就是中三减去前三得出的向量),那么这个机头只能在垂直于这个向量的平面内设定,因此实际上只有两个变量(dir_x,dir_y)在决定其朝向。dir_z是不起作用的,这个参数是个没用的参数。如果不好理解,试想这样的画面:一个相机的观察方向,和它的机头方向之间的角度,成了钝角,这个相机是一个怎么样的相机?....显然它们之间的角度永远都是直角的。