簡體   English   中英

3d相機位置給出一些點

[英]3d Camera Position given some points

Heyo,

我目前正在開發一個項目,我需要放置相機,以便在不移動相機的情況下可以查看角色的完整動作。 我有角色開始的位置,以及角色在所有三個方向(X,Y和Z)上行進的最大距離。 我也有視野(90度)。

是否有一個方程式可以找出我需要放置相機的位置,以便不必移動以查看完整的運動?

注意:這是使用OpenGL。

澄清:相機應該在運動中的角色“前方”,而不是在上方。

它也將沿地平面移動。

如果你制作點的邊界球,你需要做的就是讓相機保持一個大於或等於邊界球/半徑(FOV / 2)半徑的距離。

例如,如果您有一個半徑為Radius的邊界球體和一個指定的視野FOV,則您的相機只需要位於“Dist”點,指向邊界球體的中心。

計算距離的公式為:Dist = Radius / sin(FOV / 2);

對於任何方向的相機,這將在3D中工作。

從起點到終點獲取線段。 通過線段的中點構造與該線段正交的平面。 然后將攝像機定位在此平面中的某個位置,距離平面和線的交叉點處的距離大於以下距離,以查看交叉點。 攝像機的向上矢量必須在平面內,水平視場必須為90度。

distance = sqrt(dx^2 + dy^2 + dz^2) / 2

此攝像機位置將在視口的左側或右側邊界上具有起點和終點,並且垂直居中。

另一個解決方案可能是編寫一個函數,該函數獲取屏幕上兩個點的起點,終點和所需位置。 然后只需求解相機變換的投影方程。

簡單地具有(X,Y,Z)的最大范圍本身並不充分,因為觀察口基本上是金字塔形的,金字塔的頂點位於眼睛位置。

為了論證,我們假設所有運動都在(X,Z)平面(即地面),並且眼睛沿着Y軸直接位於原點10m的上方。

假設一個方形視口,在90°視野范圍內,您可以沿X軸和Z軸看到±10m,但僅適用於地面上的物體(Y = 0)。 一旦他們離開地面,你的視野就會減少。 如果距離地面1米,那么你的(X,Z)范圍只有±9米。

很明顯,無論如何都可以在場景中放置真正的相機,面向任何方向。 即使相機的“滾動”角度也可以改變可見的程度。 實際上有無數的這樣的攝像機點,所以你需要稍微限制你的標准。

例如,它取決於物體是否會在一個平面內移動,你可以將相機放置在一個球的外面,並限定其運動區域(這取決於FOV為90,這是一個幸運的角度)。

如果物體要以3D移動,那就更困難了。 如果您指定對象移動的區域(立方體與球...)以及您想要從中看到它的方向,這將有所幫助。

暫無
暫無

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

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