簡體   English   中英

帶相機旋轉的3D透視投影

[英]3d perspective projection with camera rotation

我現在正在開發3d游戲引擎(非常簡單,只有多維數據集,也許還有其他一些簡單的3d對象)。 我正在使用C ++,對於圖形SFML,它是C ++的2d圖形庫。

我已經有了透視投影的公式:

S將是該點在屏幕上的位置。 P將是該點在3d空間中的位置。 E是眼睛(相機)的位置。

Sx =((Ez *(Px-Ex))/(Ez + Pz))+ Ex

Sy =((Ez *(Py-Ey))/(Ez + Pz))+ Ey

現在,效果很好! 我現在想做的就是旋轉相機本身。 我已經考慮過圍繞相機旋轉其他所有內容,因為我可以使用當前代碼快速完成此操作,其中包括3d點的“ rotateAroundPoint”功能。

但是,有什么更快,更簡單的方法嗎? 我的公式/是否有新功能允許我旋轉相機本身?

感謝您的幫助,希望有人能提供解決方案; D Arad Arble。

使我的評論成為答案。

我建議您研究一下主要圖形庫用於渲染的管道。 (例如OpenGL 。)SFML在后台使用OpenGL,因此您無需重新發明輪子。 是OpenGL的另一個示例。

還要研究現有的矩陣庫(例如GLM) ,它們可提供所需的轉換。 如果可以將必要的轉換壓縮為OpenGL可以使用的幾個矩陣,則渲染管線將更快。 例如,您問題中的方程式通常會拆分為模型矩陣 (以從模型/局部空間->世界空間轉換每個頂點的位置), 視圖矩陣 (以轉換世界空間->相機空間,創建頂點)從相機的角度看起來像),以及透視 投影矩陣 (從相機空間->屏幕空間進行轉換,並定義諸如視野之類的東西)。 當所有這些矩陣相乘時,最終得到最終矩陣,該矩陣與位置矢量相乘后,將在屏幕空間中為您提供位置。 因此,此最終矩陣將應用於場景中的每個頂點,其中包括模型變換,相機變換,透視圖划分,剪切等,以將最終頂點繪制到屏幕上。

為了回答您的原始問題,傳統上,“相機”由視圖矩陣投影矩陣的組合表示。 要旋轉相機,您要做的就是將旋轉變換(或者可能是“ lookAt ”變換;很難從您的問題中分辨出來)應用於視圖矩陣 ,然后數學將繼續執行以下操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM