从 three.js json 文件中删除点

Removing points from a three.js json file

我有一个 three.js json 使用 BufferGeometry 从 blender 导出的模型文件及其纹理文件。

对象上有一些噪音,我希望通过处理 json 文件本身 post 导出来清理(我需要删除一些顶点,但这不是平滑或抽取操作,即使用 json 数据比这项工作的其他地方更容易。

因此,从数据的角度来看,我在处理该文件时有 two/three 个问题。

  1. 除了删除点数据之外,我还需要对文件做些什么?我假设相应的 UV 和法线应该去?但是索引呢?
  2. 与其从列表中删除点,不如将它们设置为空?即使那里没有数据,也要给索引一些映射?
  3. 假设我无法摆脱 2. 并因此从 json 文件中一致地从每个数组中删除数据,有没有办法重新计算索引而无需返回到 blender 或类似工具?我需要这样做吗?我可以完全删除索引数组吗?

我应该补充一点,这个点的删除目前是在服务器端(python 目前)而不是在浏览器中完成的,但如果这是解决这个问题的更好方法,它可能会在浏览器中完成。此外,该模型相当大,大约有 250k 个顶点

我认为您当前(在服务器上)删除顶点的方法是正确的方法,尤其是在它处理重新索引时。

  1. 对于每个顶点项,您不仅必须删除其相关属性(法线、UV),而且您的索引也需要更新,而且可能会大幅更新。考虑几个三角形之间的共享顶点。你打算怎么解释?这听起来比我想在浏览器中解决的问题要难得多。
  2. 没有。顶点列表必须填充值。如果您不希望您的方法具有完全破坏性,您可以随时调整索引以忽略不需要的顶点,但同样,这不是一项小任务。
  3. 共有三种绘制模式:THREE.TrianglesDrawModeTHREE.TriangleStripDrawModeTHREE.TriangleFanDrawMode。对于 THREE.TrianglesDrawMode 中的共享顶点,您需要建立索引。要删除索引,您需要将每个三角形定义为顶点的离散三元组(可能有很多重复数据)。对于 THREE.TriangleStripDrawModeTHREE.TriangleFanDrawMode,一些顶点是共享的,但它们在缓冲区中的顺序很重要。设置你的几何结构来做到这一点与重构索引一样困难。

不过我要问:为什么不尝试调整有噪声的顶点,而不是将其移除?这是一个更简单的任务,数学更容易,你不需要担心重新索引。