我希望將同一個對象渲染兩次,一次在屏幕上,一次在屏幕外。屏幕上的網格具有幾何圖形和MeshLambertMaterial。這種材料有vertexColors: THREE.VertexColors
。屏幕外的網格具有相同的幾何圖形和一個帶有vertexColors: THREE.FaceColors
的MeshBasicMeterial。在初始設置期間,每個faceColor被設置爲獨特的顏色。每個vertexColor被設置爲單一顏色(後來,這些vertexcolors可以通過對象上的「繪畫」來改變)。Three.js爲faceColors和vertexColors重用幾何體
然後我想渲染這兩個對象。在this fiddle你會看到兩個並排呈現的場景。 MeshLambertMeterial的對象現在變成半紅色,以使事情更清晰。如您所見,這兩個場景似乎都使用相同的材質。此外,當我切換順序我得到以下錯誤:
[.WebGLRenderingContext]GL ERROR :GL_INVALID_OPERATION : glDrawElements: attempt to access out of range vertices in attribute 1.
爲了使事情變得更加古怪,當運行撥弄我看到了MeshBasicMaterial渲染兩次的對象。但是,當我在本地運行確切相同的代碼時,我看到用MeshLambertMaterial呈現的對象兩次。
最終我希望帶有MeshBasicMeterial的對象呈現給rendertarget,但是我遇到了同樣的問題。我希望能夠在屏幕上顯示LambertMetarial對象,並且當我用鼠標將鼠標懸停在對象上時,可以在呈現BasicMaterial的renderTarget中獲取該位置的顏色。
我希望問題是清楚的,如果不是,請讓我知道。
是的,這確實有效,但它不是最有效的方法。特別是當你有大的幾何形狀時,你可以注意到性能下降。無論如何,也要感謝關於重構小提琴的評論。 – SeeDoubleYou
不要與具有不同材質的網格共享幾何圖形。 – WestLangley
我相信[這個需求在three.js的最新版本中已經消失了](https://github.com/mrdoob/three.js/pull/12718#issuecomment-351333955),現在可以使用具有不同網格的幾何體進行共享材料。 –