在 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
。
-