可以轻松创建一个
THREE.BoxGeometry
,在创建宽度、高度和深度的三个独立参数时必须传递参数。
我想创建任何和所有不带参数的
THREE[types]()
,然后设置值。
有没有办法在创建后设置盒子几何形状的尺寸/大小(可能也已经埋在网格中)?其他还有缩放等
如果是的话,我在文档中找不到这个,否则如果不是错误的话,可能是一个主要的功能请求。关于如何分类有什么想法吗?也许只是文档更改。
如果你想缩放网格,你有两种选择:缩放网格
mesh.scale.set( x, y, z );
或缩放网格的几何形状
mesh.geometry.scale( x, y, z );
第一种方法修改网格的矩阵变换。
第二种方法修改几何体的顶点。
查看源代码,以便了解每种缩放方法的作用。
三.js r.73
当您实例化
BoxGeometry
对象或任何其他几何体时,将使用提供的参数当场创建顶点和此类缓冲区。因此,不可能简单地改变几何体的属性并更新顶点;整个对象必须重新实例化。
您将需要创建几何图形,因为您拥有可用的参数。但是,您可以创建没有几何图形的网格,将它们添加到场景中,并在有足够的信息来实例化对象后更新网格的
geometry
属性。如果不是这样,您也可以先设置一个默认值,然后缩放以达到您的目标。
从技术上讲,缩放只会产生更新几何图形的错觉,并且问题确实说(除缩放之外)。所以,我想说更好的方法是将网格的几何属性重新分配给新的几何。
mesh.geometry = new THREE.BoxGeometry(newSize, newSize, newSize)
通过这种方法,您可以更新几何图形的任何方面(例如段数)。这在处理圆柱体或球体等非盒子几何形状时特别有用。
这是使用此方法的完整工作示例:
let size = 10
let newSize = 20
// Create a simple mesh.
let geometry = new THREE.BoxGeometry(size, size, size)
let material = new THREE.MeshNormalMaterial()
let mesh = new THREE.Mesh(geometry, material)
// Add the mesh to the scene.
scene.add(mesh)
// Unless you intend to reuse your old geometry dispose of it,
// this will significantly reduce memory footprint.
mesh.geometry.dispose()
// Update the mesh geometry to a new geometry with whatever parameters you desire.
mesh.geometry = new THREE.BoxGeometry(newSize, newSize, newSize)
// You will now see these changes reflected in the scene.
您可以根据需要多次重复此过程,但不要忘记处理不再需要的旧几何图形!