2016-01-19 256 views
0

我在三個j中有大量的網格。爲了有效地渲染它們,我通過材質合併它們。但是,我想用鼠標選擇它們。Three.js渲染紋理深度

我的方法如下:在一次渲染過程中,我將合併的網格物體烘焙成紋理,並在第二次渲染過程中僅渲染突出顯示的透明覆蓋物。到目前爲止,除了錯誤的可視性外,它幾乎都可以工作問題是,因爲我使用WebGLRenderTarget它只將FBO存儲到紋理中。我實際上需要第二個紋理來獲取DepthBuffer,理想情況下不需要第三次渲染。我沒有在Three.js文檔中找到任何相關內容。有任何想法嗎?

+0

看看HTTP渲染所選(多個)對象: //threejs.org/examples/js/postprocessing/BokehPass.js例如,他們有this.scene.overrideMaterial = this.materialDepth; renderer.render(this.scene,this.camera,this.renderTargetDepth,true); – makc

+0

謝謝。我不知道'overrideMaterial'。他們的解決方案並不適合我。顏色紋理很好,但深度紋理沒有任何內容。所以我最終通過用正常的渲染通道代替深度通道並在之後清除顏色。但是,這是一個3道解決方案。我寧願2. – Isolin

回答

1

我認爲你需要以不同的方式思考。您不能使用深度紋理寫入深度緩衝區。寫入深度緩衝區的唯一方法是渲染基元。

如何:

  • 烘烤場景到紋理渲染,但深入到屏幕上的深度緩衝。
  • 保持深度緩衝器在所述第二遍
  • 渲染你的烘焙紋理與深度測試和深度寫入禁用:gl.disable(gl.DEPTH_TEST); gl.depthMask(false);
  • 與高亮材料
+0

確切地說,這就是我在之前對這個問題的評論中所描述的。這是一個解決方案,但不是很靈活。我知道我不能從紋理寫入深度緩衝區,但我可以在片段着色器中執行深度測試。所以我的問題是 - 如何在three.js中使用rendertarget不僅存儲顏色,還要存儲深度(例如,以alpha爲單位)? – Isolin

+0

如果您很樂意在着色器中進行自己的深度測試,則可以渲染爲深度紋理。這還沒有合併到three.js正確,但看看這個拉請求(它還包括一個演示):https://github.com/mrdoob/three.js/pull/5402 – kintel

+0

我會盡量避免亂七八糟的擴展。但我希望它很快會到達回購:) – Isolin