up向量让OpenGL知道你的相机是朝哪个方向的。
想象现实世界中,如果有两个空间点,你可以从一个点画一条线到另一个点。然后你可以对准一个物体(比如相机),使其指向另一个点。但你不知道围绕这个线形成的轴心应该旋转多少度。up向量决定了相机应该朝哪个方向站立。
大多数时候,你的up向量将是(0,1,0),这意味着相机会像正常拿相机一样旋转,或者你抬起头直视前方。如果你设置up向量为(1,0,0),那么就像把头侧着,从头底部到头顶朝右。你仍然从同一个点(或多或少)观察到同一个点,但你的'up'发生了变化。 看向量 (0,-1,0) 会使相机倒置,就像你在做手倒立一样。
你可以这样思考:你的手臂是从相机位置(肩膀)到相机观看点(食指)的向量,如果伸出拇指,这就是你的up向量。
这张图片可能会对你有所帮助http://images.gamedev.net/features/programming/oglch3excerpt/03fig11.jpg
EIDT
是否垂直无所谓。
我现在明白你的问题了。例如,你在 (10,10,10) 处看向 (0,0,0),你观察方向的结果向量为 (-10,-10,-10),对于你up向量的glLookAt目的来说,垂直于这个向量的向量并不重要,如果你想让视图朝着一个正常人稍微向下看的方向,只需将你的up向量设置为(0,1,0)。事实上,除非你想旋转相机,否则不需要将其设置为其他任何值。