2013-04-23 6 views
0

У меня есть странное поведение с ограничивающей рамкой в ​​three.js. Я использую STLLoader, и для некоторых моделей все работает нормально, но для некоторых из них коробка сдвигается. Например:Неправильные координаты для ограничивающей рамки в three.js

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 поэтому любая помощь оценили

ответ

1

В вашей обычной drawBoundingBox вам нужно

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

просто, прежде чем добавить сетку на сцену. Ваш куб создается около 0,0,0.

+0

Спасибо, gaitat! Это просто то, что я хотел. Просто одно небольшое дополнение для правильной работы с масштабированием: boundingBoxMesh.translateX (scaleX * bboxCenter.x); – cmd

+0

О, и еще один маленький вопрос: как я могу загрузить объект, чтобы его центр соответствовал точке системы координат (0,0,0)? На скриншотах из моего вопроса вы можете видеть, что центр объекта иногда смещается от (0,0,0) – cmd

+0

Вместо mesh.position.x = 0 say mesh.position.x = -bboxCenter.x и не забудьте обновить свой ограничивающий поле. – gaitat