【发布时间】:2016-02-12 21:56:41
【问题描述】:
我正在尝试在我的应用程序中升级 ThreeJS 的发布版本。我在 3D 场景中展示了一些网格,并允许用户设置他们的颜色映射。网格可以通过两种方式着色,按顶点或按面。
在创建网格的材质时,我将 vertexColors 属性设置为 THREE.VertexColors 或 THREE.FaceColors,具体取决于我想要的行为。
在rev71上,我实现了这样的颜色变化:
var geometry = mesh.geometry;
/* For each face, change it's face colour or vertex colour */
for(var i = 0; i < geometry.faces.length; i++) {
if (colourFace) {
geometry.faces[i].color = myColorFace;
} else {
geometry.faces[i].vertexColors =
[myColorVert1, myColorVert2, myColorVert3];
}
}
每次我更改网格的当前映射时,它都会在场景中更新。
在 rev73 上,ThreeJS 似乎只更新了第一个映射更改(就在 Mesh 和它的 Geometry 被推送到 GPU 之前)。我得到的唯一线索是 WebGLGeometries 上的这些行:
/* ... */
} else if ( geometry instanceof THREE.Geometry ) {
if ( geometry._bufferGeometry === undefined ) {
geometry._bufferGeometry =
new THREE.BufferGeometry().setFromObject( object );
}
buffergeometry = geometry._bufferGeometry;
}
/* ... */
然后,WebGLRenderer 使用 buffergeometry 属性来更新 WebGL 数组缓冲区(在我的例子中是颜色缓冲区)。似乎从网格更新几何时,它永远不会为 WebGLGeometry 更新。
有人有解决方案吗?或者我应该发布问题或拉取请求来解决问题吗?
【问题讨论】:
-
试试 r.74。也不要使用
=重新分配颜色,而是使用copy()或set()。 -
在应用更改后仍然无法在 rev73/74 上工作,我快速查看了 ThreeJS 代码,似乎在 WebGLGeometry 上创建了 BufferGeometry 以便将其发送到 GPU 之后,这个 BufferGeometry 是修改关联的几何图形时从不更新。
-
您是否设置了必要的
needsUpdate标志?否则,请通过编辑 this fiddle 提供一个简单的问题示例。代码片段是不够的。
标签: three.js