【C++游戲引擎開發】第14篇:視圖空間與相機坐標系

一、視圖空間的基礎數學框架

1.1 齊次坐標與變換矩陣

三維坐標系變換采用4×4齊次坐標矩陣,其通用形式為:
M = [ A 3 × 3 b 3 × 1 0 1 × 3 1 ] \mathbf{M} = \begin{bmatrix} \mathbf{A}_{3×3} & \mathbf{b}_{3×1} \\ \mathbf{0}_{1×3} & 1 \end{bmatrix} M=[A3×3?01×3??b3×1?1?]
其中:

  • A \mathbf{A} A 包含旋轉、縮放變換
  • b \mathbf{b} b 為平移向量
  • 坐標點表示為 ( x , y , z , 1 ) T (x,y,z,1)^T (x,y,z,1)T

1.2 相機參數化表示

相機狀態由六自由度參數定義:

  • 位置坐標: C = ( X , Y , Z ) \mathbf{C} = (X,Y,Z) C=(X,Y,Z)
  • 歐拉角: ( θ x , θ y , θ z ) (θ_x,θ_y,θ_z) (θx?,θy?,θz?)(俯仰、偏航、滾動)
  • 縮放因子: s s s

二、相機坐標系變換原理

2.1 剛體變換分解

2.1.1 平移變換矩陣

將世界坐標原點平移至相機位置:
T = [ 1 0 0 ? X 0 1 0 ? Y 0 0 1 ? Z 0 0 0 1 ] \mathbf{T} = \begin{bmatrix} 1 & 0 & 0 & -X \\ 0 & 1 & 0 & -Y \\ 0 & 0 & 1 & -Z \\ 0 & 0 & 0 & 1 \end{bmatrix} T= ?1000?0100?0010??X?Y?Z1? ?

2.1.2 旋轉變換矩陣

構造基于觀察方向的正交基:

  1. 前向向量: f = g ∥ g ∥ \mathbf{f} = \frac{\mathbf{g}}{\|\mathbf{g}\|} f=gg?
  2. 右向向量: r = t × f ∥ t × f ∥ \mathbf{r} = \frac{\mathbf{t} \times \mathbf{f}}{\|\mathbf{t} \times \mathbf{f}\|} r=t×ft×f?
  3. 上向向量: u = f × r \mathbf{u} = \mathbf{f} \times \mathbf{r} u=f×r

旋轉矩陣的解析形式:
R = [ r x r y r z 0 u x u y u z 0 ? f x ? f y ? f z 0 0 0 0 1 ] \mathbf{R} = \begin{bmatrix} r_x & r_y & r_z & 0 \\ u_x & u_y & u_z & 0 \\ -f_x & -f_y & -f_z & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} R= ?rx?ux??fx?0?ry?uy??fy?0?rz?uz??fz?0?0001? ?

2.2 視圖矩陣合成

組合平移與旋轉得到視圖矩陣:
M v i e w = R ? T = [ r ? r ? C u ? u ? C ? f f ? C 0 1 ] \mathbf{M}_{view} = \mathbf{R} \cdot \mathbf{T} = \begin{bmatrix} \mathbf{r} & -\mathbf{r}\cdot\mathbf{C} \\ \mathbf{u} & -\mathbf{u}\cdot\mathbf{C} \\ -\mathbf{f} & \mathbf{f}\cdot\mathbf{C} \\ 0 & 1 \end{bmatrix} Mview?=R?T= ?ru?f0??r?C?u?Cf?C1? ?


三、投影變換原理

3.1 正交投影

3.1.1 規范視體定義

正交投影將立方體視體映射到規范立方體[-1,1]3:
M o r t h o = [ 2 r ? l 0 0 ? r + l r ? l 0 2 t ? b 0 ? t + b t ? b 0 0 2 n ? f ? n + f n ? f 0 0 0 1 ] \mathbf{M}_{ortho} = \begin{bmatrix} \frac{2}{r-l} & 0 & 0 & -\frac{r+l}{r-l} \\ 0 & \frac{2}{t-b} & 0 & -\frac{t+b}{t-b} \\ 0 & 0 & \frac{2}{n-f} & -\frac{n+f}{n-f} \\ 0 & 0 & 0 & 1 \end{bmatrix} Mortho?=

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/76701.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76701.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/76701.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【大模型理論篇】關于生成式模型中聯合分布概率學習必要性以及GPT是生成式模型的討論

1. 背景 之前我們在《生成式模型與判別式模型對比(涉及VAE、CRF的數學原理詳述)》以及《生成式模型算法原理深入淺出(涉及Stable Diffusion、生成對抗網絡、高斯混合模型、隱馬爾可夫模型、樸素貝葉斯等算法原理分析及生成式模型解釋)》中,我…

DIP支付方式改革下各種疾病醫療費用的影響以及分析方法研究綜述

DIP支付方式改革下各種疾病醫療費用的影響以及分析方法研究綜述 摘要 本文綜述了DIP支付方式改革對不同疾病醫療費用的影響及其分析方法,通過分析12篇相關文獻,探討了DIP支付方式在控制醫療費用、優化費用結構、提升醫療服務效率等方面的作用及其局限性…

嵌入式硬件篇---單片機周期

文章目錄 前言 前言 在單片機中,時序控制是其執行指令和協調外設的核心基礎。以下是單片機中常見的各種周期及其詳細說明,以層次結構展開: 時鐘周期(Clock Cycle) 定義: 時鐘周期是單片機的最小時間單位&a…

游戲引擎學習第221天:(實現多層次過場動畫)

資產: intro_art.hha 已發布 在下載頁面,你會看到一個新的藝術包。你將需要這個藝術包來進行接下來的開發工作。這個藝術包是由一位藝術家精心制作并打包成我們設計的格式,旨在將這些藝術資源直接應用到游戲中。它包含了許多我們會在接下來的直播中使用…

【3GPP核心網】【5G】精講5G系統的策略和計費控制框架

1. 歡迎大家訂閱和關注,精講3GPP通信協議(2G/3G/4G/5G/IMS)知識點,專欄會持續更新中.....敬請期待! 目錄 1. 系統架構 1.1 非漫游架構 1.2 漫游架構 1.3 支持Rx接口 2. 服務化接口及參考點 2.1 PCF 與 AF 間接口 2.2 PCF與SMF間接口 2.3 PCF與AMF間接口 2.4 V-PC…

榕壹云門店管理系統:基于Spring Boot+Mysql+UniApp的智慧解決方案

項目背景:數字化賦能服務行業,破解傳統門店管理痛點 在消費升級與數字化轉型浪潮下,傳統服務行業(如美容、美發、美甲、采耳等)面臨諸多管理挑戰:會員流失率高、預約排班混亂、員工績效統計低效、數據孤島等…

開發效率提升200%——cursor

cursor帶來的編程"革命" 高級語言編程轉為"自然語言編程"借助cursor,直接超越初級后臺開發、超越初級前端開發、超越初級測試、超越初級UI,產研一體linux命令只用學不用記,語言描述就是命令給一個表結構流程提示詞&…

UE4 踩坑記錄

1、Using git status to determine working set for adaptive non-unity build 我刪除了一個沒用的資源,結果就報這個錯,原因就是這條命令導致的, 如果這個項目是git項目, ue編譯時會優先通過 git status檢查哪些文件被修改&#…

藍橋杯 2025 C++組 省 B 題解

可分解的正整數 算法&#xff1a;思維 因為可以有負數 所以除了1以外的任何數都可以構造 當這個數為x構造方法為 -(x-1) -(x-2) -(x-3) ....-1 0 1...x-3 x-2 x-1 x 除了x&#xff0c;x以前的數都會被負數抵消 #include <bits/stdc.h> #define ll long long ll a…

docker創建容器添加啟動--restart選項

一、通過 Docker 命令直接修改已啟動的容器&#xff08;推薦-已驗證&#xff09; 操作步驟&#xff1a; 1.執行更新命令&#xff1a; docker update --restartalways <容器名或ID>此命令會將容器的重啟策略調整為 always&#xff08;無論容器以何種狀態退出&#xff0…

redission鎖釋放失敗處理

redission鎖釋放失敗處理 https://www.jianshu.com/p/055ae798547a 就是可以刪除 鎖的key 這樣鎖就釋放了&#xff0c;但是 還是要結合業務&#xff0c;這種是 非正規的處理方式&#xff0c;還是要在代碼層面進行處理。

【語音識別】vLLM 部署 Whisper 語音識別模型指南

目錄 1. 模型下載 2. 環境安裝 3. 部署腳本 4. 服務測試 語音識別技術在現代人工智能應用中扮演著重要角色&#xff0c;OpenAI開源的Whisper模型以其出色的識別準確率和多語言支持能力成為當前最先進的語音識別解決方案之一。本文將詳細介紹如何使用vLLM&#xff08;一個高…

Windows Server 2019 安裝 Docker 完整指南

博主本人使用的是離線安裝 1. 安裝前準備 系統要求 操作系統&#xff1a;Windows Server 2019&#xff08;或 2016/2022&#xff09;權限&#xff1a;管理員權限的 PowerShell網絡&#xff1a;可訪問互聯網&#xff08;或離線安裝包&#xff09; 啟用容器功能 Install-Win…

C# 混淆代碼工具--ConfuserEx功能與使用指南

目錄 1 前言1.1 可能帶來的問題 2 ConfuserEx2.1 簡介2.2 功能特點2.3 基本使用方法2.4 集成到MSBuild2.5 深入設置2.5.1 保護機制2.5.1.1 ConfuserEx Protection 2.5.2 精細的代碼保護主要特性1. decl-type(string)2.full-name(string)3. is-public()4. match(string)5. match…

c# 新建不重名的唯一文件夾

在源文件夾內創建唯一目標文件夾 string newFolder GetUniqueFolderName(sourceFolder); Directory.CreateDirectory(newFolder); /// <summary>/// 生成唯一文件夾名稱&#xff08;格式&#xff1a;新建文件夾、新建文件夾1、新建文件夾2...&#xff09;…

3D案例丨多個3D工業相機拼接檢測 開啟360°新視界

在高速生產線上&#xff0c;經常需要在極短的時間內對工件進行全方位的外觀檢測&#xff0c;如&#xff1a;線纜直徑和直線度檢測、鋰電池外觀缺陷檢測、鐵軌截面尺寸檢測等。 這需要傳感器完整還原被測物的截面面輪廓形狀&#xff0c;并獲取精準的截面輪廓數據。但單一相機的…

openapi + knife4j的使用

一、依賴作用與關系 1. springdoc-openapi-starter-webmvc-api ? 核心功能&#xff1a; 基于 OpenAPI 3 規范&#xff0c;自動生成 API 文檔元數據&#xff08;JSON 格式&#xff09;&#xff0c;并集成 Spring MVC。 提供Tag Operation、Schema 等注解&#xff0c;支持通過…

解決電腦問題——突然斷網!

電腦如果突然斷網是怎么回事 電腦突然斷網可能由多種原因造成&#xff0c;以下是常見的因素&#xff1a; 網絡連接與權限問題 路由器或調制解調器故障&#xff1a;路由器或調制解調器可能出現硬件故障、軟件故障或設置錯誤。可以嘗試重啟設備&#xff0c;如果問題依舊&#…

區塊鏈從專家到小白

文章目錄 含義應用場景典型特征 含義 以非對稱加密算法為基礎。 每個**區塊&#xff08;Block&#xff09;**包含&#xff1a; ?交易數據?&#xff08;如轉賬記錄、合約內容&#xff09;。 ?時間戳?&#xff08;記錄生成時間&#xff09;。 ?哈希值?&#xff08;當前區…

git 提交標簽

Git 提交標簽 提交消息格式&#xff1a; <type>: <description> &#xff08;示例&#xff1a;git commit -m "feat: add user login API"&#xff09; 標簽適用場景feat新增功能&#xff08;Feature&#xff09;。fix修復 Bug&#xff08;Bug fix&…