观察变换
观察变换作用是决定摄像机从哪看,看向哪里,以及怎么看,也就是模拟一个眼睛在三维坐标里的位置和朝向。
实现:使用 观察矩阵 ,把世界中的所有物体的坐标,从世界坐标系变换到局部坐标系。
代码实现
实践中无需手动求出观察矩阵,只需指定3个重要的参数:
-
摄像机位置
cameraPos:摄像机在世界坐标系里的位置 -
观察目标点
cameraTarget:摄像机看向哪个点 -
上方向
upVector:摄像机头顶的方向
将3个参数传入 glm::lookAt() 函数,即求解出观察矩阵。
示例:
|
|
OpenGL 的历史和设计遵循 Y 轴向上的约定。
自由视角
之前生成观察矩阵使用的三个参数中,决定看向哪的参数是一个点。这就导致移动摄像机的位置后,要保持“朝前看”的效果,就要同时更新目标点。
因此可以将第二个参数 cameraTarget 改成 cameraFront ,原生成矩阵的参数更改为:
|
|
这样改变摄像机位置后,视角仍然朝前。