Javascript 如何在THREE.js中使用AMFLoader中的几何体?
我正在使用STLLoader和AMFLoader在场景中加载模型。当文件为STL文件时,我加载该文件并计算边界框以及我自己用于计算体积和表面积的函数:Javascript 如何在THREE.js中使用AMFLoader中的几何体?,javascript,three.js,Javascript,Three.js,我正在使用STLLoader和AMFLoader在场景中加载模型。当文件为STL文件时,我加载该文件并计算边界框以及我自己用于计算体积和表面积的函数: var loader = new THREE.STLLoader(); loader.load('file.stl'', function ( geometry ) { var material = new THREE.MeshLambertMaterial( { color: 0xeaeaea/*, s
var loader = new THREE.STLLoader();
loader.load('file.stl'', function ( geometry ) {
var material = new THREE.MeshLambertMaterial( { color: 0xeaeaea/*, specular: 0x111111, shininess: 100*/ } );
geometry.computeBoundingBox(geometry);
bBox = geometry.boundingBox;
geometry.computeVertexNormals();
// convert buffergeometry to geometry so attributes can be used to calculate volume and area
var calcGeometry = new THREE.Geometry().fromBufferGeometry(geometry);
// calculate Volume
modelVolume = calculateVolume(calcGeometry);
// calculate Surface Area
modelArea = calculateArea(calcGeometry);
meshMain = new THREE.Mesh( geometry, material );
meshMain.position.set( 0, 0, 0 );
meshMain.rotation.set( 0, - Math.PI / 2, 0 );
meshMain.scale.set( 1, 1, 1 );
// center the rotational pivot point on center of geometry
meshMain.translation = geometry.center();
// bounding box info
showBoundingBox = new THREE.BoxHelper(meshMain, bBoxColor);
meshMain.castShadow = true;
meshMain.receiveShadow = true;
scene.add( meshMain );
});
但是,AMFLoader似乎会返回网格。如何处理返回网格的几何体?这就是我尝试过的:
var loader = new THREE.AMFLoader();
loader.load( 'file.amf', function ( amfobject ) {
console.log(amfobject.geometry); // undefined
scene.add( amfobject );
} );
编辑
这就是我试图做的:
amfobject.children.forEach(function (child) {
child.geometry.computeFaceNormals();
child.geometry.computeVertexNormals();
child.geometry.computeBoundingBox();
});
但是它说child.geometry没有定义。试试
console.log(amfobject)
看看它有什么类型。它可能是THREE.Group()
,并且具有THREE.Mesh()数组的子属性
是的,它是一个组。但是我尝试了这个,发现amfobject.children.geometry
没有定义。我在上的特定模型似乎有一个子几何体,几何体位于此处:amfobject.children[0]。children[0]。几何体