Javascript three.js中边界框的坐标错误
我对three.js中的边界框有一些奇怪的行为。 我使用STLLoader,对于一些模型,一切都很好,但对于其中一些模型,框是移动的。 例如: 及 边界框大小正确,其位置为(0,0,0)。同一位置已加载STL模型 这是我的代码:Javascript three.js中边界框的坐标错误,javascript,three.js,webgl,Javascript,Three.js,Webgl,我对three.js中的边界框有一些奇怪的行为。 我使用STLLoader,对于一些模型,一切都很好,但对于其中一些模型,框是移动的。 例如: 及 边界框大小正确,其位置为(0,0,0)。同一位置已加载STL模型 这是我的代码: function stlLoader() { var redPhongMaterial = new THREE.MeshPhongMaterial({ color: 0xFFEA32, side: THREE.DoubleSide, ambient
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(){
var redPhongMaterial=new THREE.MeshPhongMaterial({color:0xFFEA32,side:THREE.DoubleSide,ambient:0x000000});//黄色
var stlLoader=new THREE.stlLoader();
stlLoader.addEventListener('load',函数(事件){
var stlGeometry=event.content;
var mesh=新的三点网格(stlGeometry,redPhongMaterial);
网格。比例。设置(2,2,2);
mesh.castShadow=true;
mesh.receiveShadow=true;
stlGeometry.computeBoundingBox();
var boundingBox=mesh.geometry.boundingBox.clone();
drawBoundingBox(边界框,mesh.scale.x,mesh.scale.y,mesh.scale.z);
网格位置y=0;
网格位置x=0;
网格位置z=0;
场景。添加(网格);
loadComplete();
} );
stlLoader.load(ptsfilestoload);
}
函数drawBoundingBox(box、scaleX、scaleY、scaleZ)
{
变量长度=scaleX*(box.max.x-box.min.x);
变量高度=比例*(box.max.y-box.min.y);
变量深度=scaleZ*(box.max.z-box.min.z);
var boundingBoxGeometry=新的三个立方体(长度、高度、深度);
对于(变量i=0;i
或者这就是STLLoader的问题?我对webgl和three.js非常陌生,因此非常感谢您在drawBoundingBox例程中提供的任何帮助
var bboxCenter = box.center ();
boundingBoxMesh .translateX (bboxCenter.x);
boundingBoxMesh .translateY (bboxCenter.y);
boundingBoxMesh .translateZ (bboxCenter.z);
在将网格添加到场景之前。您的立方体是在0,0,0左右创建的。谢谢,gaitat!这正是我想要的。只需添加一个小部件即可正常使用缩放:boundingBoxMesh.translateX(scaleX*bboxCenter.x);哦,还有一个小问题:如何加载对象使其中心适合坐标系点(0,0,0)?在我的问题的屏幕截图上,您可以看到对象的中心有时从(0,0,0)移动,而不是从mesh.position.x=0说mesh.position.x=-bboxCenter.x,并且不要忘记更新边界框位置。