javascript - Three.js 为 faceColors 和 vertexColors 重用几何体

标签 javascript three.js webgl

我希望同一个对象被渲染两次,一次在屏幕上,一次在屏幕外。屏幕上的网格有一个几何体和一个 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 被渲染到该位置。

我希望清楚问题是什么,如果没有,请告诉我。

fiddle

最佳答案

编辑:问题已解决。

当使用 WebGLRenderer 时,具有不同 Material 的两个网格现在可以共享一个几何体。

three.js r.88

关于javascript - Three.js 为 faceColors 和 vertexColors 重用几何体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20550021/

相关文章:

javascript - 使用 pre3d 的嵌套长方体

javascript - 具有多个属性的绘制元素

javascript - 有没有一种方法可以单击滚动到下一部分的 1 全屏部分,等等基于使用一个类

javascript - 是否可以在 Mongoose 中相互引用两个模式?

javascript - 在另一个按钮单击中添加一个 React 组件

3d - 将模型从3dStudioMax导入THREE.js

three.js - ar.js - 加载 GLTF 模型时闪烁

javascript - 如何在three.js中确定相机视野的3D边界

javascript - jsp onclick不调用javascript函数

opengl-es - 使用 2D 纹理解决方法的 WebGL/three.js 中的 3D 纹理?