ファイル形式FBXについて調査してみました
ファイルの読み込みをしたい
上記のサイトによると、
FBXLoaderというモジュールを適用して実装する。
ローカルに3DFileであるFBX Fileが存在する場合、
そのファイルのパスを指定することで、
Object
Vueの場合はpublicディレクトリ配下に置くことで、
直接パスからデータをLoadできる。
URLで読み込み、出力されるのは"Group"というThree.js独特の入れ子構造型である。
内部には3Dオブジェクトを構成する情報が並べられており、
Concole.logするとブラウザのDeveloper Toolで確認できる。
// camera,light,sceneの設定は前回記事を参照 const loader = new THREE.FBXLoader(); loader.load(modelFile, (fbx)=>{ fbx.position.set(0, 0, 0); fbx.rotation.set(0, Math.PI, 0); scene.add(fbx); renderer.render(scene, camera); });
3Dfileの.fbx fileについて
.fbxファイルについて馴染みがない。
FBXデータ自体はFBX BinaryとFBX ASCIIに大別できます。
FBX ASCIIはtextファイルで人間でも読める感じ。
一般的にはBinaryファイルであり、console.logで確認できるか何を書いているかさっぱり理解できないはず。
FBX ASCIIはXMLのようにノード木構造となっており、情報が格納されている。
FBX Binaryはマジックバイナリ・FBXVersion・
ファイルのコンテンツを並べるトップレベルノード・ファイルフッターなどで構成されているらしい。
詳しくは以下のスライドにて(自分の知識で限界まで分かるわかりやすさ)
www.slideshare.net
Three.jsでFBXファイルを読み込んでみる
Three.jsについてはこちらから。
まずはThree.jsのinstallをしないといけません。
そこからFBXLoaderを用いて、
引数はファイルのURL、返り値はGroup型のロードした3Dファイルオブジェクトです。
// FBXLoaderを読み込み import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader' // Groupとはロードした3Dファイルを示すThree.js特有の型 import { Group } from 'three' public static getInstance = () : Loader => new Loader (); private manager = new LoadingManager(); private fbxLoader = new FBXLoader(this.manager); // 引数はファイルの位置を示すURL、返り値はGroup public async fbxloader(fileurl: string): Promise<Group> { return new Promise((resolve, reject): void => { this.fbxLoader.load( fileurl, (obj: Group) : void => resolve(obj), (event: ErrorEvent) : void => reject(event), (event: ProgressEvent) : void => {}, ); }); }
URLはローカルに置いたファイルのパスでも構いませんし、
Binaryデータの場合だと、
Blobに変換してあげて、createObjectURLでオブジェクトのURLを生成するのでも構いません。
createObjectURLではtextかblob、MediaSourceしか対応していないので注意が必要です。
const fileurl = URL.createObjectURL(Blob);