2017-05-27 56 views
0

我有一個THREE.Points對象,代表3D模型的點雲。 〜10,000 vert。我希望能夠「隱藏」相機不可見的點(因此,如果對象正常渲染時不可見的頂點不應呈現爲點)。如何確定網格的哪些頂點對相機可見?

是否有一種計算上便宜的方法來找到「面對」相機的垂直軸?

回答

1

編輯:(完全誤解了這個問題,因爲它最初是問)

您可以使用點的法線或面臨確定它們是否前置式或背面。除非攝像機正對着靠近攝像機的地方遮擋攝像機,否則這將起作用。在這種情況下,需要類似z的排序。

原來的答案:(離開這裏供參考)

有趣的問題是,爲什麼你要這麼做?無論如何它們都不可見,那爲什麼要明確地隱藏它們呢?

這是以儘可能最快的方式在GPU固定功能管道中實現的(如果您好奇:這是在所有座標轉換爲規範視圖體積後頂點着色器發生的剪切)。沒有什麼可以(或者應該)在javascript中獲得更多的性能。

如果您想手動控制可視性,這將意味着在每個點上運行一些過程,隨時更新幾何圖形。完成之後,幾何圖形需要再次上傳到GPU,這是另一個性能問題。

但我不知道你的使用案例,也許你有一個合法的理由來做到這一點。在這種情況下,看到這裏:Manual frustrum culling with three.js

+0

我正在建立一個3d模型的粒子。每個粒子都位於加載的3D模型的頂點處。所有點都可見。我最好喜歡隱藏那些如果模型堅實你就不會看到的模型。這是一種文體選擇。 – defmech

+0

對不起,我完全誤解了你。你在這些點上是否有表面法線?在這種情況下,你可以做一個簡單的前/後向計算。 –

+1

我使用垂直法線進行計算。工作得很好。使用Raycasting對這些vert進行一些後期處理,以除去其他我不想要的vert。感謝指針。 – defmech

相關問題