我希望同一个对象被渲染两次,一次在屏幕上,一次在屏幕外。屏幕上的网格有一个几何体和一个 MeshLambertMaterial。该 Material 具有 vertexColors: THREE.VertexColors
。屏幕外网格具有相同的几何形状和带有 vertexColors: THREE.FaceColors
的 MeshBasicMeterial。在初始设置期间,每个 faceColor 都设置为唯一的颜色。每个 vertexColor 都设置为单一颜色(稍后这些 vertexcolors 可以通过在对象上“绘制”来更改)。
然后我想渲染这两个对象。在 this fiddle 你会看到并排渲染两个场景的效果。带有 MeshLambertMeterial 的对象现在是半红色以使事情更清楚。如您所见,这两个场景似乎使用了相同的 Material 。此外,当我切换顺序时,出现以下错误:
[.WebGLRenderingContext]GL ERROR :GL_INVALID_OPERATION : glDrawElements: attempt to access out of range vertices in attribute 1.
更奇怪的是,当运行 fiddle 时,我看到用 MeshBasicMaterial 渲染的对象两次。但是,当我在本地运行完全相同的代码时,我看到两次使用 MeshLambertMaterial 渲染的对象。
最终我希望将带有 MeshBasicMeterial 的对象渲染到渲染目标,但我遇到了同样的问题。我希望能够在屏幕上显示带有 LambertMetarial 的对象,当我用鼠标悬停在对象上时,在 renderTarget 中的那个位置获取颜色,BasicMaterial 被渲染到该位置。
我希望清楚问题是什么,如果没有,请告诉我。
最佳答案
编辑:问题已解决。
当使用 WebGLRenderer
时,具有不同 Material 的两个网格现在可以共享一个几何体。
three.js r.88
关于javascript - Three.js 为 faceColors 和 vertexColors 重用几何体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20550021/