three.js中边界框的坐标错误

时间:2013-04-23 10:40:24

标签: javascript three.js webgl

我对three.js中的边界框有一些奇怪的行为。 我使用STLLoader,对于某些模型,一切正常,但对于其中一些,盒子被移动了。 例如:

http://oi37.tinypic.com/35a1y4l.jpghttp://oi34.tinypic.com/4hf4tl.jpg

边界框的大小合适,位置为(0,0,0)。相同的位置加载了STL模型。

这是我的代码:

function stlLoader() {
         var redPhongMaterial = new THREE.MeshPhongMaterial({ color: 0xFFEA32, side: THREE.DoubleSide, ambient:0x000000}); // yellow
            var stlLoader = new THREE.STLLoader();
            stlLoader.addEventListener('load', function (event) {
                    var stlGeometry = event.content;
                    var mesh = new THREE.Mesh(stlGeometry, redPhongMaterial);
                    mesh.scale.set(2, 2, 2);
                    mesh.castShadow = true;
                    mesh.receiveShadow = true;
                    stlGeometry.computeBoundingBox();
                    var boundingBox = mesh.geometry.boundingBox.clone();
                    drawBoundingBox(boundingBox, mesh.scale.x, mesh.scale.y, mesh.scale.z);
                    mesh.position.y = 0;
                    mesh.position.x = 0;
                    mesh.position.z = 0;
        scene.add( mesh );
                    loadComplete();
                } );
            stlLoader.load( ptsfilestoload );
    }

    function drawBoundingBox(box, scaleX, scaleY, scaleZ)
    {
        var length = scaleX * (box.max.x - box.min.x);
        var height = scaleY * (box.max.y - box.min.y);
        var depth =  scaleZ * (box.max.z - box.min.z);
        var boundingBoxGeometry = new THREE.CubeGeometry( length, height, depth );
        for ( var i = 0; i < boundingBoxGeometry.faces.length; i ++ ) 
        {
             boundingBoxGeometry.faces[i].color.setHex( Math.random() * 0xffffff );
        }
        var boundingBoxMaterial = new THREE.MeshBasicMaterial( { color: 0xffffff, vertexColors: THREE.FaceColors, transparent: true, opacity: 0.7 } );
        var boundingBoxMesh = new THREE.Mesh( boundingBoxGeometry, boundingBoxMaterial);
        scene.add( boundingBoxMesh );
    }

或者这可能是STLLoader的问题?我是webgl和three.js的新手,所以任何帮助表示赞赏

1 个答案:

答案 0 :(得分:1)

在你的drawBoundingBox例程中,你需要

var bboxCenter = box.center ();
boundingBoxMesh .translateX (bboxCenter.x);
boundingBoxMesh .translateY (bboxCenter.y);
boundingBoxMesh .translateZ (bboxCenter.z);

在将网格物体添加到场景之前。您的多维数据集是在0,0,0左右创建的。