2010-09-01 28 views
0

使用gluUnProject()獲取3D世界座標中的屏幕2D座標。我從屏幕的每個角落取4個位置來獲取可見物體的區域。OpenGL:從當前視圖區域中選擇所有點

如何檢查哪些點位於「矩形」內部?我不知道這些術語或任何內容。下面的圖片是什麼「矩形」的模樣:

alt text

回答

0

你試圖找到其中3D點是可見的相機嗎?如果是這樣,你可能會在這個網站上找到一些有趣的信息:http://www.lighthouse3d.com/opengl/viewfrustum/

在下圖中,我們可以看到視錐體和你的選擇平截頭體(紅色)。應用截錐體可見性檢查選擇截錐應該與用於平截體剔除的算法相同。

alt text

如果你想快速和非優化的解決方案:

GLdouble model_view[16]; 
glGetDoublev(GL_MODELVIEW_MATRIX, model_view); 

GLdouble projection[16]; 
glGetDoublev(GL_PROJECTION_MATRIX, projection); 

GLint viewport[4]; 
glGetIntegerv(GL_VIEWPORT, viewport); 

for(unsigned i=0; i<points.size(); ++i){ 
    GLdouble winX, winY, winZ; 
    gluProject(points[i].x, points[i].y, points[i].z, model_view, projection, viewport, &winX, &winY, &winZ); 
    if(selectionMinX <= winX && winX <= selectionMaxX && selectionMinY <= winY && winY <= selectionMaxY && winZ>=0 && winZ<=1){ 
    /// point is selected 
    } 
} 
+0

不,我只是想選擇鼠標的對象。雖然我也可以用它來達到這個目的。但重點是我不在乎,如果一些多邊形是部分可見的,因爲我想只檢查點的位置。 – Newbie 2010-09-01 12:17:46

+0

但是你的問題:找到我的選擇矩形上的點與在我的視錐內找到所有對象相同,視錐是*選擇*視錐。 – tibur 2010-09-01 12:25:37

+0

是啊,我不能從那個例子中得到很多,因爲它使用了我不知道的任何類。是不是有一個簡單的函數,如果其內部返回1,如果不是,則返回0?我真的不在意這個問題或者使用了多麼高科技的編程方法。更簡單=更好的 – Newbie 2010-09-01 12:35:30

相關問題