我试图检索和绘制某些对象的中心点,但是我对所有对象始终获得相同的值,即x = 0,y = 0和z = 0。因此,我的中心点始终是场景的中心点。我目前正在阅读3D计算机矩阵,所以我在这个领域有点新手。我是否需要以某种方式更新场景或在每个添加的对象或其他东西之后更新一些矩阵?
function initBoxes(){
var box = new THREE.Mesh(geometry, material);
box.position.set(0, 2, 2);
getCenterPoint(box);
var box2 = new THREE.Mesh(geometry, material);
box2.position.set(0, 6, 6);
getCenterPoint(box2);
}
function getCenterPoint(mesh) {
var middle = new THREE.Vector3();
var geometry = mesh.geometry;
geometry.computeBoundingBox();
middle.x = (geometry.boundingBox.max.x + geometry.boundingBox.min.x) / 2;
middle.y = (geometry.boundingBox.max.y + geometry.boundingBox.min.y) / 2;
middle.z = (geometry.boundingBox.max.z + geometry.boundingBox.min.z) / 2;
return middle;
}
该对象boundingBox
在本地空间中。如果要在世界空间中居中,则必须将middle
顶点转换为世界空间。您可以使用以下THREE.Object3D
localToWorld
方法轻松地做到这一点:
function getCenterPoint(mesh) {
var middle = new THREE.Vector3();
var geometry = mesh.geometry;
geometry.computeBoundingBox();
middle.x = (geometry.boundingBox.max.x + geometry.boundingBox.min.x) / 2;
middle.y = (geometry.boundingBox.max.y + geometry.boundingBox.min.y) / 2;
middle.z = (geometry.boundingBox.max.z + geometry.boundingBox.min.z) / 2;
mesh.localToWorld( middle );
return middle;
}
在较新的three.js版本中,该类内部提供了一种便捷方法getCenter
THREE.Box3
。
function getCenterPoint(mesh) {
var geometry = mesh.geometry;
geometry.computeBoundingBox();
var center = new THREE.Vector3();
geometry.boundingBox.getCenter( center );
mesh.localToWorld( center );
return center;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句