这是我的代码,用于加载.fbx对象,默认情况下,该对象将对象加载为BufferGeometry
:
var loader = new THREE.FBXLoader();
async function loadFiles(scene,props) {
const {files, path, childName, fn} = props;
if (index > files.length - 1) return;
loader.load(path+files[index], object => {
// apply functions / transformations to obj
let sceneObj = fn.call(null,object,props);
if (sceneObj) { scene.add(sceneObj) }
// add obj to scene and push to array
scene.add(object);
objects.push(object);
// if there is another object to load, load it
index++;
loadFiles(scene,props);
});
}
我想使用var geometry = new THREE.Geometry().fromBufferGeometry( bufferGeometry );
来解决此问题,但是我似乎没有在加载器函数中构建mesh
,因此我看不到如何实现此代码。
我想以一种可读的方式访问对象的顶点,这就是为什么我不想将其加载为BufferGeometry
的原因。
答案 0 :(得分:1)
加载器返回一个对象,该对象将包含上面带有几何图形的网格。您将需要遍历对象及其子对象,并在遇到它时转换BufferGeometry。这是实现该目标的想法:
loader.load(path+files[index], object => {
// iterate over all objects and children
object.traverse(child => {
// convert the buffer geometry
if (child.isMesh && child.geometry.isBufferGeometry) {
const bg = child.geometry;
child.geometry = (new THREE.Geometry()).fromBufferGeometry(bg);
}
});
// ... do something with the loaded model...
});
希望有帮助!