如何使用Three.js 获取场景的所有顶点
有任何方法可以得到我在场景中的总顶点,比如MAYA或3DS MAX??。
我有一些用obj加载器加载的三维模型,我想知道如何获得场景中的总顶点、边或三角形。
类似scene.get(vertices);
或scene.get(edges);
renderer.info
是一个three.js对象,用于统计绘制调用和渲染基元的数量。它还显示了正在使用的几何体、纹理和着色器程序的数量。
console.log( renderer.info );
three.js r.84
您可以使用获取场景的所有子项
scene.children
然后你循环浏览:
for (var i = 0; i < scene.children.length; i++) {
scene.children[i].geometry.vertices
}
这个问题并没有一个直接的答案。
边不存在于三个.js几何体中,有几种不同的方式来表示它们。
顶点可以属于三角形汤或索引网格,这意味着相同数量的三角形有不同的数字。
另一方面,如果使三角形与Geometry
和BufferGeometry
一起存在,则三角形是完全不同的。Geometry
有一个相当复杂的Face3
类,BufferGeometry
有一个类型化数组,其中三个数字可以表示一个三角形。
如果你想调试应用程序,看看你是否意外地创建了超出需要的几何图形(错误地克隆或其他什么),请按照WestLangley的建议使用renderer.info
。
如果你想采用别人的语义,那么在另一个答案中使用类似rstats工具的东西。
如果你需要特定于你需求的东西,你可以问一些问题,比如"大小重要吗,因为我可能也应该把uvs算作顶点"、"它太大了吗,不能作为Geometry
保存在内存中"、"我只对顶点转换性能感兴趣吗"等等。
rstats为您做到这一点
可以在此处查看来源。
或者,您可以在scene.children
数组中查找具有geometry.vertices
数组的THREE.Mesh
的实例
例如,在此页面的控制台中输入scene.children[0].geometry.vertices
将为您提供立方体的顶点数组。
编辑
或者更好的是,正如WestLangley所指出的,检查renderer.info
对象