File tree Expand file tree Collapse file tree 3 files changed +38
-5
lines changed
Expand file tree Collapse file tree 3 files changed +38
-5
lines changed Original file line number Diff line number Diff line change @@ -13,7 +13,7 @@ export interface ModelRendererOptions {
1313}
1414
1515export class ModelRenderer extends ActorComponent {
16- asset : Systems . LazyAsset < THREE . Group < THREE . Object3DEventMap > > ;
16+ assets : Systems . LazyAsset < THREE . Group < THREE . Object3DEventMap > > [ ] ;
1717 model : THREE . Group < THREE . Object3DEventMap > ;
1818
1919 constructor (
@@ -25,11 +25,19 @@ export class ModelRenderer extends ActorComponent {
2525 typeName : "ModelRenderer"
2626 } ) ;
2727
28- this . asset = modelLoader ( "models/Tiny_Witch.obj" ) ;
28+ this . assets = [
29+ modelLoader ( "models/Tiny_Witch.obj" ) ,
30+ modelLoader ( "models/Tree.fbx" )
31+ ] ;
2932 }
3033
3134 awake ( ) {
32- this . model = this . asset . get ( ) ;
33- this . actor . threeObject . add ( this . model ) ;
35+ for ( const asset of this . assets ) {
36+ const model = asset . get ( ) ;
37+ if ( model . name === "Tree" ) {
38+ model . position . set ( 2 , 0 , 0 ) ;
39+ }
40+ this . actor . threeObject . add ( model ) ;
41+ }
3442 }
3543}
Original file line number Diff line number Diff line change @@ -5,16 +5,19 @@ import {
55import * as THREE from "three" ;
66import { OBJLoader } from "three/addons/loaders/OBJLoader.js" ;
77import { MTLLoader } from "three/addons/loaders/MTLLoader.js" ;
8+ import { FBXLoader } from "three/addons/loaders/FBXLoader.js" ;
89
910export const modelLoader = Systems . Assets . registerLoader < THREE . Group < THREE . Object3DEventMap > > (
1011 {
11- extensions : [ ".obj" ] ,
12+ extensions : [ ".obj" , ".fbx" ] ,
1213 type : "model"
1314 } ,
1415 ( asset , context ) => {
1516 switch ( asset . ext ) {
1617 case ".obj" :
1718 return objectLoader ( asset , context ) ;
19+ case ".fbx" :
20+ return fbxLoader ( asset , context ) ;
1821 default :
1922 throw new Error ( `Unsupported model type: ${ asset . ext } ` ) ;
2023 }
@@ -68,3 +71,25 @@ function isMaterialWithMap(
6871 material instanceof THREE . MeshPhongMaterial
6972 ) ;
7073}
74+
75+ function fbxLoader (
76+ asset : Systems . Asset ,
77+ context : Systems . AssetLoaderContext
78+ ) : Promise < THREE . Group < THREE . Object3DEventMap > > {
79+ const { manager } = context ;
80+
81+ const loader = new FBXLoader ( manager )
82+ . setPath ( asset . path ) ;
83+
84+ return new Promise ( ( resolve , reject ) => {
85+ loader . load (
86+ asset . basename ,
87+ ( object ) => {
88+ object . name = asset . name ;
89+ resolve ( object ) ;
90+ } ,
91+ void 0 ,
92+ ( error ) => reject ( error )
93+ ) ;
94+ } ) ;
95+ }
You can’t perform that action at this time.
0 commit comments