我有一个使用 BufferGeometry 从 Blender 导出的 Three.js json 模型文件及其纹理文件。
该对象上有一些噪音,我希望通过在导出后处理 json 文件本身来清理这些噪音(我需要删除一些顶点,但这不是平滑或抽取操作,即使用json 数据比其他地方的这项工作)。
因此,从数据 Angular 处理该文件时,我有两个/三个问题。
- 除了删除点数据之外,我还需要对文件执行什么操作?我认为相应的 UV 和法线应该消失?但指数呢?
- 不是从列表中删除点,而是可以将它们设置为空吗?即使那里没有数据,也要为索引提供一些可映射的内容?
- 假设我无法摆脱 2. 因此从 json 文件中一致地删除每个数组中的数据,有没有办法重新计算索引而无需返回到 Blender 或类似的?我是否需要这样做 - 我可以完全删除索引数组吗?
我应该补充一点,这一点的删除目前是在服务器端(当前是Python)而不是在浏览器中完成的,但如果这是解决这个问题的更好方法,则可能可以在浏览器中完成。而且该模型相当大,大约有 25 万个顶点
最佳答案
我认为您当前删除顶点(在服务器上)的方法是正确的方法,特别是在它处理重新索引的情况下。
- 对于每个顶点项,您不仅必须删除其关联的属性(法线、UV),而且您的索引也需要更新,而且可能需要大幅更新。考虑几个三 Angular 形之间的共享顶点。你将如何解释这一点?这听起来比我想在浏览器中解决的问题要困难得多。
- 没有。顶点列表必须填充值。如果您不希望您的方法完全具有破坏性,您可以随时调整索引以忽略您不需要的顶点,但同样,这不是一项小任务。
- 共有三种绘制模式:
THREE.TrianglesDrawMode
、THREE.TriangleStripDrawMode
和THREE.TriangleFanDrawMode
。对于THREE.TrianglesDrawMode
中的共享顶点,您需要索引。要删除索引,您需要将每个三 Angular 形定义为离散的三元组顶点(可能有大量重复数据)。对于THREE.TriangleStripDrawMode
和THREE.TriangleFanDrawMode
,某些顶点是共享的,但它们在缓冲区中的顺序至关重要。设置几何图形来执行此操作与重构索引一样困难。
但我需要问:为什么不尝试调整嘈杂的顶点,而不是删除它们?这是一个更简单的任务,数学也更容易,而且您无需担心重新索引。
关于javascript - 从 Three.js json 文件中删除点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43190798/