在 3D 图形学中,yaw
、pitch
、fov
和 lookAt
都是控制摄像机(Camera)行为的关键参数,但它们的 作用层级 和 使用场景 不同。
1. yaw
、pitch
、fov
的作用
(1) yaw
(偏航角)
-
作用:控制摄像机 左右旋转(绕世界坐标系的 Y 轴)。
-
影响:
-
yaw = 0
:默认朝向 +Z 轴(OpenGL 的初始视角)。 -
yaw = -90
:朝向 -X 轴(常用于 FPS 游戏的默认视角)。
-
-
计算:
cpp
front.x = cos(yaw) * cos(pitch); front.z = sin(yaw) * cos(pitch);
(2) pitch
(俯仰角)
-
作用:控制摄像机 上下旋转(绕摄像机的 X 轴)。
-
影响:
-
pitch = 0
:水平向前。 -
pitch > 0
:向上看(如看向天空)。 -
pitch < 0
:向下看(如看向地面)。
-
-
计算:
cpp
front.y = sin(pitch);
(3) fov
(视野范围,Field of View)
-
作用:控制 透视投影的视角宽度(类似人眼的视野)。
-
影响:
-
fov
越大,视野越广(类似广角镜头,但可能变形)。 -
fov
越小,视野越窄(类似望远镜)。
-
-
典型值:
-
45.0f
(默认自然视角)。 -
90.0f
(更广的视野)。
-
2. lookAt
的作用
lookAt
是一个 矩阵计算函数(如 glm::lookAt
),用于直接定义摄像机的 位置、目标点和上方向,而不需要手动计算 yaw
和 pitch
。
函数原型(GLM)
cpp
glm::mat4 view = glm::lookAt(glm::vec3(cameraPos), // 摄像机位置 (x,y,z)glm::vec3(cameraTarget),// 看向的目标点 (x,y,z)glm::vec3(0.0f, 1.0f, 0.0f) // 上方向 (通常取世界Y轴)
);
lookAt
的特点
-
直接指定目标点,不需要计算
yaw
和pitch
。 -
适用于固定视角(如第三人称跟随摄像机)。
-
内部自动计算 摄像机的
front
、right
、up
向量。
3. yaw/pitch/fov
vs lookAt
的区别
特性 | yaw /pitch /fov | lookAt |
---|---|---|
控制方式 | 通过角度计算方向 | 直接指定目标点 |
适用场景 | 第一人称游戏(FPS)、自由摄像机 | 固定视角(如RPG、第三人称) |
计算复杂度 | 需要手动计算 front 向量 | 自动计算方向 |
灵活性 | 适合动态旋转(如鼠标控制视角) | 适合静态或跟随目标 |
典型应用 | WASD 移动 + 鼠标旋转 | 摄像机看向角色 |
第一人称与第三人称游戏的核心区别:在于视角范围和沉浸感。
第一人称以角色主观视角呈现,视野受限但代入感强,常见于射击类游戏;第三人称以旁观视角展现角色全身及环境,视野开阔且操作灵活,多用于动作冒险类游戏。
核心差异
1)视角范围
第一人称:仅显示角色视线范围内的场景,类似现实视野(水平约110度),无法观察角色自身或后方环境。
第三人称:可显示角色全身及周围更广范围(约270度视野),支持通过调整镜头观察掩体后或侧方动态。
2)沉浸感与操作
第一人称:通过限制视野强化代入感,如《使命召唤》中核爆场景直接传递角色濒死体验,但快速镜头移动易引发3D眩晕。
第三人称:允许分离操控角色移动与镜头转向,更适合复杂动作场景(如《古墓丽影》攀爬跳跃),但情感共鸣较弱。
4. 如何结合使用?
(1) 用 yaw/pitch
计算 front
,再用 lookAt
cpp
// 计算前向向量
glm::vec3 front;
front.x = cos(yaw) * cos(pitch);
front.y = sin(pitch);
front.z = sin(yaw) * cos(pitch);
front = glm::normalize(front);// 使用 lookAt
view = glm::lookAt(cameraPos, cameraPos + front, glm::vec3(0, 1, 0));
(2) 直接用 lookAt
控制
cpp
// 让摄像机始终看向某个目标(如玩家角色)
view = glm::lookAt(cameraPos, playerPos, glm::vec3(0, 1, 0));
5. 总结
-
yaw
/pitch
/fov
:-
适用于 自由摄像机(如FPS游戏),通过角度控制方向。
-
需要手动计算
front
向量。
-
-
lookAt
:-
适用于 固定目标摄像机(如RPG、第三人称),直接指定看向的位置。
-
自动计算方向,无需处理
yaw
/pitch
。
-