У меня есть странное поведение с ограничивающей рамкой в 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 поэтому любая помощь оценили
Спасибо, gaitat! Это просто то, что я хотел. Просто одно небольшое дополнение для правильной работы с масштабированием: boundingBoxMesh.translateX (scaleX * bboxCenter.x); – cmd
О, и еще один маленький вопрос: как я могу загрузить объект, чтобы его центр соответствовал точке системы координат (0,0,0)? На скриншотах из моего вопроса вы можете видеть, что центр объекта иногда смещается от (0,0,0) – cmd
Вместо mesh.position.x = 0 say mesh.position.x = -bboxCenter.x и не забудьте обновить свой ограничивающий поле. – gaitat