2010-09-14 66 views
0

我目前正在處理數千個盒子,我想投影到屏幕上以確定它們的大小和相機距離。屏幕投影和剔除統一

我目前的做法是獲得一個球體代表使用視圖和投影矩陣以及視口值的方框和項目。

// PSEUDOCODE 

// project box center from world into viewspace 
boxCenterInViewSpace = viewMatrix * boxCenter; 

// get two points left and right of center 
leftPoint = boxCenter - radius; 
right = boxCenter + radius; 

// project points from view into eye space 
leftPoint = projectionMatrix * leftPoint; 
rightPoint = projectionMatrix * rightPoint; 

// normalize points 
leftPoint /= leftPoint.w; 
rightPoint /= rightPoint.w; 

// move to 0..1 range 
leftPoint = leftPoint * 0.5 + 0.5; 
rightPoint = rightPoint * 0.5 + 0.5; 

// scale to viewport 
leftPoint.x = leftPoint.x * viewPort.right + viewPort.left; 
leftPoint.y = leftPoint.y * viewPort.bottom + viewPort.top; 

rightPoint.x = rightPoint.x * viewPort.right + viewPort.left; 
rightPoint.y = rightPoint.y * viewPort.bottom + viewPort.top; 

// at this point i check if the node is visible on screen by comparing the points to the viewport 

// calculate size 
length(rightPoint - leftPoint) 

在另一點上,我計算箱子到相機的距離。

第一個問題是,我不知道盒子是否正好在視口下方,因爲我只是計算水平。有沒有辦法以某種方式將真實的球體投射到屏幕上?看起來像一些方法:

float getSizeOfSphereProjectedOnScreen(vec3 midpoint, float radius) 

另一個問題是簡單的:在與座標空間的z座標對應於相機的距離是多少?

概括起來講,我想計算:

  1. 箱子是在視錐?
  2. 屏幕上的Box大小是多少?
  3. 箱子到相機的距離是多少?

爲了簡化計算,我想使用球體表示,但我不知道如何投射球體。

+0

男人......我不明白這一點;) – fho 2010-09-14 15:30:41

回答

0

[更新]

什麼是從盒到照相機的距離?

在 [哪個]座標空間是z 座標對應到 到攝像頭的距離?

答案不是通常的空格。最接近的一個將在視圖空間中(即在應用視圖矩陣但不應用投影矩陣之後)。在視野範圍內,與相機的距離應爲sqrt(x*x + y*y + z*z),因爲相機位於原點。 (只有當| x |和| y |相對於| z |真的很小時,z纔是合理的近似值。)這是假設知道從相機到盒子的中心的距離足夠好。

我認爲如果您真的想要一個空間,其中z座標對應於相機的距離,您需要將點sqrt(x*x + y*y + z*z) = d的球形軌跡映射到平面z = d。我不知道你可以用矩陣做到這一點。

  • 是在視錐體框?
  • 屏幕上的Box大小是多少?

我認爲你是在正確的軌道與此有關,但根據該攝像機面對的方向,左,右手點可能無法確定箱子有多寬外觀或包裝盒是否相交的看法視錐。看到我對your other question的回答有很長的路要做。