在Three.js中获取Object3D的大小

Iga*_*gal 6 javascript three.js

我的场景中有这个3D对象:

var icon = new THREE.Object3D()

var iconTexture = THREE.ImageUtils.loadTexture('images/icon.png'),
      iconMaterial = new THREE.SpriteMaterial({
      map: iconTexture,
      color: 0xffffff,
      opacity: 1
});

var iconSprite = new THREE.Sprite(iconMaterial);

iconSprite.scale.set(14, 14, 1.0);
iconSprite.position.set(Math.random() - 0.5, Math.random() - 0.5, Math.random() - 0.75);

icon.position.setLength(0);

icon.add(iconSprite);

icon.position.y = 15;
icon.position.z = 20;
scene.add(icon);
scene.updateMatrixWorld(true);
Run Code Online (Sandbox Code Playgroud)

我想要获得这个对象的位置:

var position = new THREE.Vector3();
position.getPositionFromMatrix( icon.matrixWorld );
console.log(position.x + ',' + position.y + ',' + position.z);
Run Code Online (Sandbox Code Playgroud)

但我无法得到那个物体的大小.我试过这样的事情:

console.log("sizes: "+icon.min+", "+icon.max);
Run Code Online (Sandbox Code Playgroud)

但得到了这个输出:sizes: undefined, undefined.

有没有办法获得该对象的大小?

bar*_*zek 9

您可以从对象创建边界框:

var bbox = new THREE.Box3().setFromObject(icon);
Run Code Online (Sandbox Code Playgroud)

如果你有边界框,你可以得到它的最小值和最大值.

Max.z - Min.z - >身高

Max.x - Mix.x - >宽度

Max.y - Min.y - >深度


gai*_*tat 9

THREE.Sprite()有一个geometry属性,所以你可以这样做:

if( iconSprite.geometry.boundingBox === undefined )
    iconSprite.geometry.computeBoundingBox ();
Run Code Online (Sandbox Code Playgroud)

并且您可以.boundingBox从它自己的属性.boundingBox.min.boundingBox.max.