我目前正在處理數千個盒子,我想投影到屏幕上以確定它們的大小和相機距離。屏幕投影和剔除統一
我目前的做法是獲得一個球體代表使用視圖和投影矩陣以及視口值的方框和項目。
// 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座標對應於相機的距離是多少?
概括起來講,我想計算:
- 箱子是在視錐?
- 屏幕上的Box大小是多少?
- 箱子到相機的距離是多少?
爲了簡化計算,我想使用球體表示,但我不知道如何投射球體。
男人......我不明白這一點;) – fho 2010-09-14 15:30:41