2012-12-24 169 views
4

我有一個點(x,y,z)點的顏色,並使用glDrawArray()在openGL窗口中渲染。現在我有一個相機姿勢,我想從這個相機姿勢呈現這個點,它基本上是在給定相機內部參數的情況下投影在這個相機參考系中的所有3D點。焦距等和[R | t]。OpenGL:渲染圖像3D點雲

我想知道如果有一個簡單的方法來使這個形象而不是編寫的代碼片段循環,雖然所有的點,並在圖像平面投影他們給我的顏色。 OpenGL是否具有這種內置功能,可以完成這項工作?我想知道的另一件事是,如果還有一個函數可以告訴幀中哪些點可見,而不是循環遍歷所有N個3D點。有沒有什麼能夠有效地做到這一點?

+0

對於你的問題的第一部分:您可以設置(在你的頂點着色器使用或矩陣)將相機匹配OpenGl的投影和模型觀察矩陣姿勢和*固有*相機參數(至少如果你有一個針孔相機型號)。 – masterxilo

回答

2

除非你指定你點東西像BSP tree你將不得不遍歷所有這些,看看他們是可見或不可見。

但是,通過使用某種空間層次結構,您可以快速確定哪些點不是可見。例如,如果將空間劃分爲10 x 10 x 10的網格單元格並將點分配給其中一個單元格,則可以檢查每個單元格的邊界框以確定該單元格是否可見。所以如果你有100,000點,你將有1,000個單元格,並且(假設你的點數是均勻分佈的),你將檢查每個單元格的6點(方塊的角落)而不是100點。

您可以快速確定哪些細胞是完全可見或完全不可見的,然後你只需要檢查那些部分可見單元格的內容。

通過擴展層級,所以您頂級的細胞中含有較多的小細胞,而不是你可以用較大的點雲處理點。

你也可以改變細胞的大小,使它們都包含相同數量的點。

+0

謝謝克里斯!這有助於瞭解。 – Ankur