我在这里使用boundingShere的半径作为大小的代理,但这只是为了简洁起见。您可以使用boundingBox的 * x 、 y * 和 * z * 维度,并使用更高级的逻辑来满足您的需要。我的console.log()调用只是进行健全性检查,可以删除。
原始答案**(不适用于React Three Fiber,但适用于vanilla Three.js)
如果geomUpper的位置位于其网格内部,则此操作应该有效。
// create a Box3 to hold the dimensions
// initialize it to a zero-size box at geomUpper's position
const bbox = new THREE.Box3(geomUpper.position, geomUpper.position);
// expand the box to include geomUpper's children
// expandByObject mutates bbox
bbox.expandByObject(geomUpper);
// get the size of bbox
let size = new THREE.Vector3();
bbox.getSize(size);
// Compute the bounding box
const bbox = new THREE.Box3().setFromObject(objectRef.current)
// Init your size variable
const bboxSize = new THREE.Vector3(bbox)
// Get the size
bbox.getSize(bboxSize)
// Now use bboxSize (x,y,z)
2条答案
按热度按时间nvbavucw1#
在一个效果钩子中,你可以得到
geomUpper
的大小,并使用它来缩放geomLower
。我在这里使用
boundingShere
的半径作为大小的代理,但这只是为了简洁起见。您可以使用boundingBox
的 * x 、 y * 和 * z * 维度,并使用更高级的逻辑来满足您的需要。我的console.log()
调用只是进行健全性检查,可以删除。如果geomUpper的位置位于其网格内部,则此操作应该有效。
9udxz4iz2#
另一种可能更简单的方法是计算对象的边界框并获得其大小。