渲染后将几何图形添加到 three.js 网格

Posted

技术标签:

【中文标题】渲染后将几何图形添加到 three.js 网格【英文标题】:Adding geometry to a three.js mesh after render 【发布时间】:2013-07-24 10:21:05 【问题描述】:

我正在使用 THREE.Geometry 实例创建网格,然后动态填充几何的 verticesfaces 数组。几何图形被迭代细化,在每次迭代中添加额外的顶点和面。如果我在将网格添加到场景之前优化几何,它会正确渲染。但是,如果我将网格添加到场景中并对其进行渲染,然后对其进行修改,则只会显示第一次渲染中包含的几何图形的初始 N 个面。对这些面使用的顶点位置的更改会生效,但只会渲染这 N 个面。

几何实例标记为dynamic = true,我每次修改几何后都设置verticesNeedUpdateelementsNeedUpdatebuffersNeedUpdate。我也尝试过设置所有其他“脏”标志,尽管我只希望设置这三个(即使那样,我也不确定是否需要 buffersNeedUpdate)。

据我所知,几何体的 geometryGroupgeometryGroupList 属性正在构建并从首次渲染网格时存在的面填充,但不会重新构建以包含随后添加的面。

我做错了什么?

【问题讨论】:

【参考方案1】:

我假设您使用的是WebGLRenderer

正如three.js wiki 文章How to Update Things 中所述,您只能更新缓冲区的内容,不能调整缓冲区的大小。

three.js r.59

【讨论】:

啊,我没看过那个页面,谢谢。所以基本上这是不支持的。在这种情况下,我不能真正预先分配缓冲区,因为我事先不知道它们需要多大。此时,我正在从场景中删除网格并在每个渲染上实例化一个新的网格+几何图形,这可行但可能效率不高......我将不得不考虑一种预先分配的方法块并仅在我传递预先分配的缓冲区大小或其他内容时重新创建几何图形。 嘿——我正在做类似的事情。我想知道,你有没有想过这个?谢谢@lharper71! @C.Windolf This 相关答案和this 类似答案可能会有所帮助。 感谢@WestLangley!真正有用的答案

以上是关于渲染后将几何图形添加到 three.js 网格的主要内容,如果未能解决你的问题,请参考以下文章

使用 Three.js ObjectLoader 正确渲染动画

Three.js - 变形几何和细化三角形网格

Three.js 不渲染纹理

Three.js开发指南---创建,加载高级网格和几何体(第八章)

如何使用 three.js r71 合并两个几何图形或网格?

Three.js - 仅渲染场景背景但不渲染几何图形