0

three.js のバウンディング ボックスで奇妙な動作が発生します。私は STLLoader を使用しており、一部のモデルではすべて正常に動作しますが、一部のモデルではボックスがずれています。例えば:

http://oi37.tinypic.com/35a1y4l.jpg および http://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に慣れていないので、助けていただければ幸いです

4

1 に答える 1

1

drawBoundingBox ルーチンで必要な

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

メッシュをシーンに追加する直前。キューブは 0,0,0 付近に作成されます。

于 2013-04-23T13:19:21.573 に答える