在給定位置使用給定的網格,是否有一種快速且簡單的方法(使用vertexShader,fragmentShader或其他方法)從網格中識別/刪除所有面/未在相機屏幕上呈現的頂點(隱藏在其他臉部之後,視野之外等)?WebGL和/或Three.js:刪除非渲染的面
0
A
回答
2
如果你的意思刪除在方面不使它們這是實現具有啓用backface culling
(因爲它是默認情況下)。
的CPU
在檢測Backfaces如果你想從幾何本身刪除它們,你將需要遍歷臉和計算面法線和您的LOOKAT /攝像機的方向向量之間的dot product,然後組成新的幾何緩衝區,只包含點積爲正的面。
檢測閉塞面臨的CPU
檢測隱藏/閉塞面可以通過遍歷面和建築物使用的三角形的三個平面進行邊緣沿由遠裁剪距離LOOKAT矢量擠出,並使用上臉部翻轉的法線本身就是'前平面'。由此你會得到一個開放式棱鏡類型的形狀。然後使用體積(其技術上不是體積,因爲它未關閉)剔除其餘面的頂點,當所有面的頂點都位於所有平面中時(假設您的平面法線指向內部),所關注的面被遮擋並可以刪除。
即使在使用像Bounding Volume Hierarchy這樣的加速結構時,此也不是實時兼容。
檢測閉塞面臨的GPU/CPU
上的另一種更容易和可能更快的方法是指定表示ID到每個面的獨特的顏色,使該幾何結構的幀緩衝器,迭代的像素數據,將色彩偏移回各自的ID並以這種方式構建可見面的列表。
更多信息
雖然其通常不包含在幾何級做了進一步的信息,請閱讀the wikipedia article on occlusion culling。
相關問題
- 1. three.js - webgl和canvas渲染性能問題
- 2. 爲什麼與canvas和webgl渲染器不一樣? (three.js所)
- 3. ShaderMaterial渲染three.js
- 4. Three.js組渲染
- 5. THREE.js渲染器
- 6. three.js用於webgl渲染器的canvas元素的id id
- 7. 如何在沒有three.js的情況下渲染OBJ模型 - WebGL
- 8. Three.js,WebGL,渲染六幅圖像的全景圖
- 9. 在three.js中使用WebGL渲染器進行單擊的圓圈
- 10. 在webGL中渲染NURBS曲面
- 11. three.js所和WebGL
- 12. 使用WebGL和three.js渲染正確的反射和陰影(真實感)
- 13. 的WebGL - 二傳渲染
- 14. 沒有WebGL的渲染
- 15. three.js所在渲染
- 16. Three.js渲染紋理
- 17. Three.js渲染完成
- 18. ActiveAdmin刪除關聯時無非是想渲染顯示頁面
- 19. THREE.js靜態場景,檢測webgl渲染完成時
- 20. WebGL紋理渲染部分
- 21. OSG.JS延期渲染WebGL
- 22. WebGL用相機渲染
- 23. 在Xfvb中渲染WebGL
- 24. WebGL圖形渲染引擎
- 25. three.js EffectComposer的渲染目標
- 26. 如何導入JSON和渲染three.js所
- 27. Three.js渲染和自舉網格
- 28. Three.js畫布渲染和透明度
- 29. 刪除HighChart渲染按鈕
- 30. 刪除標籤渲染
我更期待第二種選擇。我關心的是隱藏的面孔。在同一個網格上,如果一個臉部位於另一個臉部的「後面」,但是朝向相機,我認爲點積是正的,但臉不應該被渲染。是對的嗎? – Minichua
是的你是對的,即使臉部不可見,點積也是正的。你想要什麼叫'閉塞剔除'。 我編輯了我的答案,並添加了兩種方法來檢測被遮擋的面孔以及有關該主題的更多信息的鏈接。但是,如果不知道你的用例,很難建議一個好的方法。 –
我的情況是3D繪畫編輯器。在這個編輯器中,我需要能夠在網格上投影圖像。在Three.js中已經有投影的例子,但他們ü – Minichua