Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
3ce46c12
T
three.js
项目概览
Ablesons
/
three.js
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
three.js
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3ce46c12
编写于
12月 08, 2016
作者:
K
Kyle Larson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Multi-Material is working.
上级
fe3b5e55
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
444 addition
and
102 deletion
+444
-102
examples/js/loaders/FBXLoader.js
examples/js/loaders/FBXLoader.js
+443
-101
examples/webgl_loader_fbx.html
examples/webgl_loader_fbx.html
+1
-1
未找到文件。
examples/js/loaders/FBXLoader.js
浏览文件 @
3ce46c12
...
...
@@ -125,23 +125,28 @@
scope
.
animations
=
(
new
Animation
()
).
parse
(
nodes
,
scope
.
hierarchy
);
scope
.
textures
=
(
new
Textures
()
).
parse
(
nodes
,
scope
.
hierarchy
);
scope
.
materials
=
(
new
Materials
()
).
parse
(
nodes
,
scope
.
hierarchy
);
scope
.
geometries
=
(
new
Geometries
()
).
parse
(
nodes
,
scope
.
hierarchy
);
console
.
timeEnd
(
'
FBXLoader: ObjectParser
'
);
this
.
texture_cache
=
{};
this
.
material_cache
=
{};
this
.
geometry_cache
=
{};
console
.
time
(
'
FBXLoader: GeometryParser
'
);
var
geometries
=
this
.
parseGeometri
es
(
nodes
);
var
meshes
=
this
.
parseMesh
es
(
nodes
);
console
.
timeEnd
(
'
FBXLoader: GeometryParser
'
);
var
container
=
new
THREE
.
Group
();
for
(
var
i
=
0
;
i
<
geometri
es
.
length
;
++
i
)
{
for
(
var
i
=
0
;
i
<
mesh
es
.
length
;
++
i
)
{
if
(
geometri
es
[
i
]
===
undefined
)
{
if
(
mesh
es
[
i
]
===
undefined
)
{
continue
;
}
container
.
add
(
geometri
es
[
i
]
);
container
.
add
(
mesh
es
[
i
]
);
//wireframe = new THREE.WireframeHelper( geometries[i], 0x00ff00 );
//container.add( wireframe );
...
...
@@ -161,6 +166,242 @@
},
getTexture
:
function
(
texNode
)
{
if
(
!
(
texNode
.
id
in
this
.
texture_cache
)
)
{
if
(
this
.
textureLoader
===
null
)
{
this
.
textureLoader
=
new
THREE
.
TextureLoader
();
}
this
.
texture_cache
[
texNode
.
id
]
=
this
.
textureLoader
.
load
(
this
.
textureBasePath
+
'
/
'
+
texNode
.
fileName
);
}
return
this
.
texture_cache
[
texNode
.
id
];
},
getMaterial
:
function
(
matNode
,
nodes
)
{
if
(
!
(
matNode
.
id
in
this
.
material_cache
)
)
{
// TODO:
// Cannot find a list of possible ShadingModel values.
// If someone finds a list, please add additional cases
// and map to appropriate materials.
var
tmpMat
;
switch
(
matNode
.
type
)
{
case
"
phong
"
:
tmpMat
=
new
THREE
.
MeshPhongMaterial
();
break
;
case
"
lambert
"
:
tmpMat
=
new
THREE
.
MeshLambertMaterial
();
break
;
default
:
console
.
warn
(
"
No implementation given for material type
"
+
mat_data
.
type
+
"
in FBXLoader.js. Defaulting to basic material
"
);
tmpMat
=
new
THREE
.
MeshBasicMaterial
(
{
color
:
0x3300ff
}
);
break
;
}
var
children
=
nodes
.
searchConnectionChildren
(
matNode
.
id
);
for
(
var
i
=
0
;
i
<
children
.
length
;
++
i
)
{
var
type
=
nodes
.
searchConnectionType
(
matNode
.
id
,
children
[
i
]
);
switch
(
type
)
{
case
"
\"
AmbientColor
"
:
//TODO: Support AmbientColor textures
break
;
case
"
\"
DiffuseColor
"
:
matNode
.
parameters
.
map
=
this
.
getTexture
(
this
.
textures
.
textures
[
children
[
i
]
]
);
break
;
default
:
console
.
warn
(
'
Unknown texture application of type
'
+
type
+
'
, skipping texture
'
);
break
;
}
}
tmpMat
.
setValues
(
matNode
.
parameters
);
this
.
material_cache
[
matNode
.
id
]
=
tmpMat
;
}
return
this
.
material_cache
[
matNode
.
id
];
},
getGeometry
:
function
(
geoNode
)
{
if
(
!
(
geoNode
.
id
in
this
.
geometry_cache
)
)
{
var
tmpGeo
=
new
THREE
.
BufferGeometry
();
tmpGeo
.
name
=
geoNode
.
name
;
tmpGeo
.
addAttribute
(
'
position
'
,
new
THREE
.
BufferAttribute
(
new
Float32Array
(
geoNode
.
vertices
),
3
)
);
if
(
geoNode
.
normals
!==
undefined
&&
geoNode
.
normals
.
length
>
0
)
{
tmpGeo
.
addAttribute
(
'
normal
'
,
new
THREE
.
BufferAttribute
(
new
Float32Array
(
geoNode
.
normals
),
3
)
);
}
if
(
geoNode
.
uvs
!==
undefined
&&
geoNode
.
uvs
.
length
>
0
)
{
tmpGeo
.
addAttribute
(
'
uv
'
,
new
THREE
.
BufferAttribute
(
new
Float32Array
(
geoNode
.
uvs
),
2
)
);
}
if
(
geoNode
.
indices
!==
undefined
&&
geoNode
.
indices
.
length
>
0
)
{
if
(
geoNode
.
indices
.
length
>
65535
)
{
tmpGeo
.
setIndex
(
new
THREE
.
BufferAttribute
(
new
Uint32Array
(
geoNode
.
indices
),
1
)
);
}
else
{
tmpGeo
.
setIndex
(
new
THREE
.
BufferAttribute
(
new
Uint16Array
(
geoNode
.
indices
),
1
)
);
}
}
tmpGeo
.
verticesNeedUpdate
=
true
;
tmpGeo
.
computeBoundingSphere
();
tmpGeo
.
computeBoundingBox
();
//Material groupings
if
(
geoNode
.
materialIndices
.
length
>
1
)
{
tmpGeo
.
groups
=
[];
for
(
var
i
=
0
,
prevIndex
=
-
1
;
i
<
geoNode
.
materialIndices
.
length
;
++
i
)
{
if
(
geoNode
.
materialIndices
[
i
]
!==
prevIndex
)
{
tmpGeo
.
groups
.
push
(
{
start
:
i
*
3
,
count
:
0
,
materialIndex
:
geoNode
.
materialIndices
[
i
]
}
);
prevIndex
=
geoNode
.
materialIndices
[
i
];
}
tmpGeo
.
groups
[
tmpGeo
.
groups
.
length
-
1
].
count
+=
3
;
}
}
this
.
geometry_cache
[
geoNode
.
id
]
=
new
THREE
.
Geometry
().
fromBufferGeometry
(
tmpGeo
);
this
.
geometry_cache
[
geoNode
.
id
].
bones
=
geoNode
.
bones
;
this
.
geometry_cache
[
geoNode
.
id
].
skinIndices
=
this
.
weights
.
skinIndices
;
this
.
geometry_cache
[
geoNode
.
id
].
skinWeights
=
this
.
weights
.
skinWeights
;
}
return
this
.
geometry_cache
[
geoNode
.
id
];
},
parseMeshes
:
function
(
node
)
{
var
modelNode
=
node
.
Objects
.
subNodes
.
Model
;
var
meshes
=
[];
for
(
var
ID
in
modelNode
)
{
if
(
modelNode
[
ID
].
attrType
===
'
Mesh
'
)
{
//Parse Mesh
meshes
.
push
(
this
.
parseMesh
(
modelNode
[
ID
],
node
)
);
}
}
return
meshes
;
},
parseMesh
:
function
(
meshNode
,
FBXNodes
)
{
var
geoNodes
=
FBXNodes
.
Objects
.
subNodes
.
Geometry
;
var
matNodes
=
FBXNodes
.
Objects
.
subNodes
.
Material
;
var
children
=
FBXNodes
.
searchConnectionChildren
(
meshNode
.
id
);
var
geometry
;
var
materials
=
[];
var
material
;
var
mesh
;
for
(
var
i
=
0
;
i
<
children
.
length
;
++
i
)
{
if
(
children
[
i
]
in
geoNodes
)
{
geometry
=
this
.
getGeometry
(
this
.
geometries
.
geometries
[
children
[
i
]
]
);
continue
;
}
if
(
children
[
i
]
in
matNodes
)
{
materials
.
push
(
this
.
getMaterial
(
this
.
materials
.
materials
[
children
[
i
]
],
FBXNodes
)
);
continue
;
}
}
if
(
materials
.
length
>
1
)
{
material
=
new
THREE
.
MultiMaterial
(
materials
);
//material = materials[ 0 ];
}
else
{
material
=
materials
[
0
];
}
if
(
geometry
.
bones
!==
undefined
&&
geometry
.
skinWeights
!==
undefined
)
{
if
(
material
instanceof
THREE
.
MultiMaterial
)
{
for
(
var
i
=
0
;
i
<
material
.
materials
.
length
;
++
i
)
{
material
.
materials
[
i
].
skinning
=
true
;
}
}
else
{
material
.
skinning
=
true
;
}
mesh
=
new
THREE
.
SkinnedMesh
(
geometry
,
material
);
}
else
{
mesh
=
new
THREE
.
Mesh
(
geometry
,
material
);
}
if
(
this
.
animations
!==
undefined
)
{
this
.
addAnimation
(
mesh
,
this
.
weights
.
matrices
,
this
.
animations
);
}
return
mesh
;
},
parseGeometries
:
function
(
node
)
{
// has not geo, return []
...
...
@@ -197,6 +438,8 @@
}
else
{
debugger
;
res
.
push
(
this
.
parseGeometry
(
node
.
Objects
.
subNodes
.
Geometry
,
node
)
);
}
...
...
@@ -241,18 +484,18 @@
geometry
.
computeBoundingSphere
();
geometry
.
computeBoundingBox
();
var
texture
;
var
texs
=
this
.
textures
.
getById
(
nodes
.
searchConnectionParent
(
geo
.
id
)
);
if
(
texs
!==
undefined
&&
texs
.
length
>
0
)
{
//
var texture;
//
var texs = this.textures.getById( nodes.searchConnectionParent( geo.id ) );
//
if ( texs !== undefined && texs.length > 0 ) {
if
(
this
.
textureLoader
===
null
)
{
//
if ( this.textureLoader === null ) {
this
.
textureLoader
=
new
THREE
.
TextureLoader
();
//
this.textureLoader = new THREE.TextureLoader();
}
texture
=
this
.
textureLoader
.
load
(
this
.
textureBasePath
+
'
/
'
+
texs
[
0
].
fileName
);
//
}
//
texture = this.textureLoader.load( this.textureBasePath + '/' + texs[ 0 ].fileName );
}
//
}
var
materials
=
[];
var
material
;
...
...
@@ -1575,6 +1818,39 @@
};
function
Geometries
()
{
this
.
geometries
=
{};
}
Object
.
assign
(
Geometries
.
prototype
,
{
parse
:
function
(
FBXNodes
,
hierarchy
)
{
if
(
!
(
'
Geometry
'
in
FBXNodes
.
Objects
.
subNodes
)
)
{
return
this
;
}
for
(
var
geo
in
FBXNodes
.
Objects
.
subNodes
.
Geometry
)
{
if
(
FBXNodes
.
Objects
.
subNodes
.
Geometry
[
geo
].
attrType
===
'
Mesh
'
)
{
this
.
geometries
[
geo
]
=
(
new
Geometry
()
).
parse
(
FBXNodes
.
Objects
.
subNodes
.
Geometry
[
geo
]
);
this
.
geometries
[
geo
].
addBones
(
hierarchy
.
hierarchy
);
}
}
return
this
;
}
}
);
function
Geometry
()
{
...
...
@@ -1588,7 +1864,6 @@
this
.
uvs
=
[];
this
.
bones
=
[];
this
.
skins
=
null
;
}
...
...
@@ -1610,12 +1885,16 @@
this
.
indices
=
this
.
getPolygonVertexIndices
();
this
.
uvs
=
(
new
UV
()
).
parse
(
this
.
node
,
this
);
this
.
normals
=
(
new
Normal
()
).
parse
(
this
.
node
,
this
);
this
.
materialIndices
=
(
new
MaterialIndex
()
).
parse
(
this
.
node
,
this
);
if
(
this
.
getPolygonTopologyMax
()
>
3
)
{
var
indexInfo
=
this
.
convertPolyIndicesToTri
(
this
.
indices
,
this
.
getPolygonTopologyArray
()
);
this
.
indices
,
this
.
materialIndices
,
this
.
getPolygonTopologyArray
()
);
this
.
indices
=
indexInfo
.
res
;
this
.
materialIndices
=
indexInfo
.
materialIndices
;
this
.
polyIndices
=
indexInfo
.
polyIndices
;
}
...
...
@@ -1762,7 +2041,7 @@
// [( a, b, c ), (a, c, d )....
// Also keep track of original poly index.
Geometry
.
prototype
.
convertPolyIndicesToTri
=
function
(
indices
,
strides
)
{
Geometry
.
prototype
.
convertPolyIndicesToTri
=
function
(
indices
,
materialIndices
,
strides
)
{
var
res
=
[];
...
...
@@ -1791,7 +2070,22 @@
}
return
{
res
:
res
,
polyIndices
:
polyIndices
};
var
newMaterialIndices
=
[
materialIndices
[
0
]
];
if
(
materialIndices
.
length
>
1
)
{
for
(
var
i
=
0
;
i
<
polyIndices
.
length
;
++
i
)
{
newMaterialIndices
[
i
]
=
materialIndices
[
polyIndices
[
i
]
];
}
}
return
{
res
:
res
,
materialIndices
:
newMaterialIndices
,
polyIndices
:
polyIndices
};
};
...
...
@@ -2234,6 +2528,73 @@
};
function
MaterialIndex
()
{
this
.
indexBuffer
=
[];
}
Object
.
assign
(
MaterialIndex
.
prototype
,
{
parse
:
function
(
node
,
geo
)
{
if
(
!
(
'
LayerElementMaterial
'
in
node
.
subNodes
)
)
{
return
;
}
var
indexNode
=
node
.
subNodes
.
LayerElementMaterial
[
0
];
var
mappingType
=
indexNode
.
properties
.
MappingInformationType
;
var
refType
=
indexNode
.
properties
.
ReferenceInformationType
;
var
indices
=
parseArrayToInt
(
indexNode
.
subNodes
.
Materials
.
properties
.
a
);
// it means that there is a normal for every vertex of every polygon of the model.
// For example, if the models has 8 vertices that make up four quads, then there
// will be 16 normals (one normal * 4 polygons * 4 vertices of the polygon). Note
// that generally a game engine needs the vertices to have only one normal defined.
// So, if you find a vertex has more tha one normal, you can either ignore the normals
// you find after the first, or calculate the mean from all of them (normal smoothing).
//if ( mappingType == "ByPolygonVertex" ){
switch
(
mappingType
)
{
case
"
ByPolygon
"
:
switch
(
refType
)
{
// Direct
// The material indices are in order.
case
"
IndexToDirect
"
:
this
.
indexBuffer
=
this
.
parse_ByPolygon_IndexToDirect
(
indices
);
break
;
default
:
this
.
indexBuffer
=
[
0
];
break
;
}
break
;
default
:
this
.
indexBuffer
=
[
0
];
break
;
}
return
this
.
indexBuffer
;
},
parse_ByPolygon_IndexToDirect
:
function
(
indices
)
{
return
indices
;
},
}
);
function
AnimationCurve
()
{
this
.
version
=
null
;
...
...
@@ -2584,13 +2945,15 @@
function
Textures
()
{
this
.
textures
=
[]
;
this
.
perGeoMap
=
{};
this
.
textures
=
{}
;
//
this.perGeoMap = {};
}
Textures
.
prototype
.
add
=
function
(
tex
)
{
debugger
;
if
(
this
.
textures
===
undefined
)
{
this
.
textures
=
[];
...
...
@@ -2620,7 +2983,7 @@
for
(
var
n
in
rawNodes
)
{
var
tex
=
(
new
Texture
()
).
parse
(
rawNodes
[
n
],
node
);
this
.
add
(
tex
)
;
this
.
textures
[
n
]
=
tex
;
}
...
...
@@ -2688,55 +3051,29 @@
function
Materials
()
{
this
.
materials
=
[]
;
this
.
materials
=
{}
;
this
.
perGeoMap
=
{};
}
Materials
.
prototype
.
add
=
function
(
mat
)
{
if
(
this
.
materials
===
undefined
)
{
Object
.
assign
(
Materials
.
prototype
,
{
this
.
materials
=
[];
}
parse
:
function
(
node
)
{
this
.
materials
.
push
(
mat
)
;
var
rawNodes
=
node
.
Objects
.
subNodes
.
Material
;
for
(
var
i
=
0
;
i
<
mat
.
parentIds
.
length
;
++
i
)
{
for
(
var
n
in
rawNodes
)
{
if
(
this
.
perGeoMap
[
mat
.
parentIds
[
i
]
]
===
undefined
)
{
this
.
perGeoMap
[
mat
.
parentIds
[
i
]
]
=
[];
var
mat
=
(
new
Material
()
).
parse
(
rawNodes
[
n
],
node
);
this
.
materials
[
n
]
=
mat
;
}
this
.
perGeoMap
[
mat
.
parentIds
[
i
]
].
push
(
this
.
materials
[
this
.
materials
.
length
-
1
]
)
;
return
this
;
}
};
Materials
.
prototype
.
parse
=
function
(
node
)
{
var
rawNodes
=
node
.
Objects
.
subNodes
.
Material
;
for
(
var
n
in
rawNodes
)
{
var
mat
=
(
new
Material
()
).
parse
(
rawNodes
[
n
],
node
);
this
.
add
(
mat
);
}
return
this
;
};
Materials
.
prototype
.
getById
=
function
(
id
)
{
return
this
.
perGeoMap
[
id
];
};
}
);
function
Material
()
{
...
...
@@ -2747,83 +3084,88 @@
}
Material
.
prototype
.
parse
=
function
(
node
,
nodes
)
{
Object
.
assign
(
Material
.
prototype
,
{
this
.
id
=
node
.
id
;
this
.
name
=
node
.
attrName
;
this
.
type
=
node
.
properties
.
ShadingModel
;
parse
:
function
(
node
,
nodes
)
{
this
.
parameters
=
this
.
getParameters
(
node
.
properties
);
this
.
id
=
node
.
id
;
this
.
name
=
node
.
attrName
;
this
.
type
=
node
.
properties
.
ShadingModel
;
this
.
parentIds
=
this
.
searchParents
(
this
.
id
,
nod
es
);
this
.
parameters
=
this
.
parseParameters
(
node
.
properti
es
);
return
this
;
this
.
parentIds
=
this
.
searchParents
(
this
.
id
,
nodes
)
;
}
;
return
this
;
Material
.
prototype
.
getParameters
=
function
(
properties
)
{
},
var
parameters
=
{};
parseParameters
:
function
(
properties
)
{
//TODO: Missing parameters:
// - Ambient
// - MultiLayer
// - ShininessExponent (Same vals as Shininess)
// - Specular (Same vals as SpecularColor)
// - TransparencyFactor (Maybe same as Opacity?).
var
parameters
=
{};
if
(
properties
.
Diffuse
)
{
//TODO: Missing parameters:
// - Ambient
// - MultiLayer
// - ShininessExponent (Same vals as Shininess)
// - Specular (Same vals as SpecularColor)
// - TransparencyFactor (Maybe same as Opacity?).
parameters
.
color
=
new
THREE
.
Color
().
fromArray
(
[
parseFloat
(
properties
.
Diffuse
.
value
.
x
),
parseFloat
(
properties
.
Diffuse
.
value
.
y
),
parseFloat
(
properties
.
Diffuse
.
value
.
z
)
]
);
if
(
properties
.
Diffuse
)
{
}
if
(
properties
.
Specular
)
{
parameters
.
color
=
new
THREE
.
Color
().
fromArray
(
[
parseFloat
(
properties
.
Diffuse
.
value
.
x
),
parseFloat
(
properties
.
Diffuse
.
value
.
y
),
parseFloat
(
properties
.
Diffuse
.
value
.
z
)
]
);
parameters
.
specular
=
new
THREE
.
Color
().
fromArray
(
[
parseFloat
(
properties
.
Specular
.
value
.
x
),
parseFloat
(
properties
.
Specular
.
value
.
y
),
parseFloat
(
properties
.
Specular
.
value
.
z
)
]
);
}
if
(
properties
.
Specular
)
{
}
if
(
properties
.
Shininess
)
{
parameters
.
specular
=
new
THREE
.
Color
().
fromArray
(
[
parseFloat
(
properties
.
Specular
.
value
.
x
),
parseFloat
(
properties
.
Specular
.
value
.
y
),
parseFloat
(
properties
.
Specular
.
value
.
z
)
]
);
parameters
.
shininess
=
properties
.
Shininess
.
value
;
}
if
(
properties
.
Shininess
)
{
}
if
(
properties
.
Emissive
)
{
parameters
.
shininess
=
properties
.
Shininess
.
value
;
parameters
.
emissive
=
new
THREE
.
Color
().
fromArray
(
[
parseFloat
(
properties
.
Emissive
.
value
.
x
),
parseFloat
(
properties
.
Emissive
.
value
.
y
),
parseFloat
(
properties
.
Emissive
.
value
.
z
)
]
);
}
if
(
properties
.
Emissive
)
{
}
if
(
properties
.
EmissiveFactor
)
{
parameters
.
emissive
=
new
THREE
.
Color
().
fromArray
(
[
parseFloat
(
properties
.
Emissive
.
value
.
x
),
parseFloat
(
properties
.
Emissive
.
value
.
y
),
parseFloat
(
properties
.
Emissive
.
value
.
z
)
]
);
parameters
.
emissiveIntensity
=
properties
.
EmissiveFactor
.
value
;
}
if
(
properties
.
EmissiveFactor
)
{
}
if
(
properties
.
Reflectivity
)
{
parameters
.
emissiveIntensity
=
properties
.
EmissiveFactor
.
value
;
parameters
.
reflectivity
=
properties
.
Reflectivity
.
value
;
}
if
(
properties
.
Reflectivity
)
{
}
if
(
properties
.
Opacity
)
{
parameters
.
reflectivity
=
properties
.
Reflectivity
.
value
;
parameters
.
opacity
=
properties
.
Opacity
.
value
;
}
if
(
properties
.
Opacity
)
{
}
if
(
parameters
.
opacity
<
1.0
)
{
parameters
.
opacity
=
properties
.
Opacity
.
value
;
parameters
.
transparent
=
true
;
}
if
(
parameters
.
opacity
<
1.0
)
{
}
parameters
.
transparent
=
true
;
return
parameters
;
}
};
//Assigning textures
Material
.
prototype
.
searchParents
=
function
(
id
,
nodes
)
{
var
p
=
nodes
.
searchConnectionParent
(
id
)
;
return
parameters
;
return
p
;
},
};
searchParents
:
function
(
id
,
nodes
)
{
return
nodes
.
searchConnectionParent
(
id
);
}
}
);
/* --------------------------------------------------------------------- */
...
...
@@ -2862,7 +3204,7 @@
// what want: normal per vertex, order vertice
// i have: normal per polygon
// i have: indice per polygon
var
parse_Data_ByPolygonVertex_Direct
=
function
(
node
,
indices
,
strides
,
itemSize
)
{
function
parse_Data_ByPolygonVertex_Direct
(
node
,
indices
,
strides
,
itemSize
)
{
// *21204 > 3573
// Geometry: 690680816, "Geometry::", "Mesh" {
...
...
examples/webgl_loader_fbx.html
浏览文件 @
3ce46c12
...
...
@@ -93,7 +93,7 @@
};
var
loader
=
new
THREE
.
FBXLoader
(
manager
);
loader
.
load
(
'
models/fbx/
MyMultiTest
.fbx
'
,
function
(
object
)
{
loader
.
load
(
'
models/fbx/
xsi_man_skinning
.fbx
'
,
function
(
object
)
{
object
.
traverse
(
function
(
child
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录