Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
db38659a
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,发现更多精彩内容 >>
未验证
提交
db38659a
编写于
12月 12, 2019
作者:
M
Mr.doob
提交者:
GitHub
12月 12, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #18132 from zeux/gltfparallel
GLTFLoader: Load materials and geometries in parallel
上级
7f5dffb2
876fe225
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
114 addition
and
112 deletion
+114
-112
examples/js/loaders/GLTFLoader.js
examples/js/loaders/GLTFLoader.js
+57
-56
examples/jsm/loaders/GLTFLoader.js
examples/jsm/loaders/GLTFLoader.js
+57
-56
未找到文件。
examples/js/loaders/GLTFLoader.js
浏览文件 @
db38659a
...
...
@@ -2593,108 +2593,109 @@ THREE.GLTFLoader = ( function () {
}
return
Promise
.
all
(
pending
).
then
(
function
(
originalMaterials
)
{
pending
.
push
(
parser
.
loadGeometries
(
primitives
)
);
return
parser
.
loadGeometries
(
primitives
).
then
(
function
(
geometrie
s
)
{
return
Promise
.
all
(
pending
).
then
(
function
(
result
s
)
{
var
meshes
=
[];
var
materials
=
results
.
slice
(
0
,
results
.
length
-
1
);
var
geometries
=
results
[
results
.
length
-
1
];
for
(
var
i
=
0
,
il
=
geometries
.
length
;
i
<
il
;
i
++
)
{
var
meshes
=
[];
var
geometry
=
geometries
[
i
];
var
primitive
=
primitives
[
i
];
for
(
var
i
=
0
,
il
=
geometries
.
length
;
i
<
il
;
i
++
)
{
// 1. create Mesh
var
geometry
=
geometries
[
i
];
var
primitive
=
primitives
[
i
];
var
mesh
;
// 1. create Mesh
var
material
=
originalMaterials
[
i
]
;
var
mesh
;
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
TRIANGLES
||
primitive
.
mode
===
WEBGL_CONSTANTS
.
TRIANGLE_STRIP
||
primitive
.
mode
===
WEBGL_CONSTANTS
.
TRIANGLE_FAN
||
primitive
.
mode
===
undefined
)
{
var
material
=
materials
[
i
];
// .isSkinnedMesh isn't in glTF spec. See .markDefs()
mesh
=
meshDef
.
isSkinnedMesh
===
true
?
new
THREE
.
SkinnedMesh
(
geometry
,
material
)
:
new
THREE
.
Mesh
(
geometry
,
material
);
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
TRIANGLES
||
primitive
.
mode
===
WEBGL_CONSTANTS
.
TRIANGLE_STRIP
||
primitive
.
mode
===
WEBGL_CONSTANTS
.
TRIANGLE_FAN
||
primitive
.
mode
===
undefined
)
{
if
(
mesh
.
isSkinnedMesh
===
true
&&
!
mesh
.
geometry
.
attributes
.
skinWeight
.
normalized
)
{
// .isSkinnedMesh isn't in glTF spec. See .markDefs()
mesh
=
meshDef
.
isSkinnedMesh
===
true
?
new
THREE
.
SkinnedMesh
(
geometry
,
material
)
:
new
THREE
.
Mesh
(
geometry
,
material
);
// we normalize floating point skin weight array to fix malformed assets (see #15319)
// it's important to skip this for non-float32 data since normalizeSkinWeights assumes non-normalized inputs
mesh
.
normalizeSkinWeights
();
if
(
mesh
.
isSkinnedMesh
===
true
&&
!
mesh
.
geometry
.
attributes
.
skinWeight
.
normalized
)
{
}
// we normalize floating point skin weight array to fix malformed assets (see #15319)
// it's important to skip this for non-float32 data since normalizeSkinWeights assumes non-normalized inputs
mesh
.
normalizeSkinWeights
();
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
TRIANGLE_STRIP
)
{
}
mesh
.
geometry
=
toTrianglesDrawMode
(
mesh
.
geometry
,
THREE
.
TriangleStripDrawMode
);
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
TRIANGLE_STRIP
)
{
}
else
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
TRIANGLE_FAN
)
{
mesh
.
geometry
=
toTrianglesDrawMode
(
mesh
.
geometry
,
THREE
.
TriangleStripDrawMode
);
mesh
.
geometry
=
toTrianglesDrawMode
(
mesh
.
geometry
,
THREE
.
TriangleFanDrawMode
);
}
else
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
TRIANGLE_FAN
)
{
}
mesh
.
geometry
=
toTrianglesDrawMode
(
mesh
.
geometry
,
THREE
.
TriangleFanDrawMode
);
}
else
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
LINES
)
{
}
mesh
=
new
THREE
.
LineSegments
(
geometry
,
material
);
}
else
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
LINES
)
{
}
else
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
LINE_STRIP
)
{
mesh
=
new
THREE
.
LineSegments
(
geometry
,
material
);
mesh
=
new
THREE
.
Line
(
geometry
,
material
);
}
else
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
LINE_STRIP
)
{
}
else
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
LINE_LOOP
)
{
mesh
=
new
THREE
.
Line
(
geometry
,
material
);
mesh
=
new
THREE
.
LineLoop
(
geometry
,
material
);
}
else
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
LINE_LOOP
)
{
}
else
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
POINTS
)
{
mesh
=
new
THREE
.
LineLoop
(
geometry
,
material
);
mesh
=
new
THREE
.
Points
(
geometry
,
material
);
}
else
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
POINTS
)
{
}
else
{
mesh
=
new
THREE
.
Points
(
geometry
,
material
);
throw
new
Error
(
'
THREE.GLTFLoader: Primitive mode unsupported:
'
+
primitive
.
mode
);
}
else
{
}
throw
new
Error
(
'
THREE.GLTFLoader: Primitive mode unsupported:
'
+
primitive
.
mode
);
if
(
Object
.
keys
(
mesh
.
geometry
.
morphAttributes
).
length
>
0
)
{
}
updateMorphTargets
(
mesh
,
meshDef
);
if
(
Object
.
keys
(
mesh
.
geometry
.
morphAttributes
).
length
>
0
)
{
}
updateMorphTargets
(
mesh
,
meshDef
);
mesh
.
name
=
meshDef
.
name
||
(
'
mesh_
'
+
meshIndex
);
}
if
(
geometries
.
length
>
1
)
mesh
.
name
+=
'
_
'
+
i
;
mesh
.
name
=
meshDef
.
name
||
(
'
mesh_
'
+
meshIndex
)
;
assignExtrasToUserData
(
mesh
,
meshDef
)
;
if
(
geometries
.
length
>
1
)
mesh
.
name
+=
'
_
'
+
i
;
parser
.
assignFinalMaterial
(
mesh
);
assignExtrasToUserData
(
mesh
,
meshDef
);
meshes
.
push
(
mesh
);
parser
.
assignFinalMaterial
(
mesh
);
}
meshes
.
push
(
mesh
);
if
(
meshes
.
length
===
1
)
{
}
return
meshes
[
0
];
if
(
meshes
.
length
===
1
)
{
}
return
meshes
[
0
];
var
group
=
new
THREE
.
Group
();
}
for
(
var
i
=
0
,
il
=
meshes
.
length
;
i
<
il
;
i
++
)
{
var
group
=
new
THREE
.
Group
();
group
.
add
(
meshes
[
i
]
);
for
(
var
i
=
0
,
il
=
meshes
.
length
;
i
<
il
;
i
++
)
{
}
group
.
add
(
meshes
[
i
]
);
return
group
;
}
}
)
;
return
group
;
}
);
...
...
examples/jsm/loaders/GLTFLoader.js
浏览文件 @
db38659a
...
...
@@ -2660,108 +2660,109 @@ var GLTFLoader = ( function () {
}
return
Promise
.
all
(
pending
).
then
(
function
(
originalMaterials
)
{
pending
.
push
(
parser
.
loadGeometries
(
primitives
)
);
return
parser
.
loadGeometries
(
primitives
).
then
(
function
(
geometrie
s
)
{
return
Promise
.
all
(
pending
).
then
(
function
(
result
s
)
{
var
meshes
=
[];
var
materials
=
results
.
slice
(
0
,
results
.
length
-
1
);
var
geometries
=
results
[
results
.
length
-
1
];
for
(
var
i
=
0
,
il
=
geometries
.
length
;
i
<
il
;
i
++
)
{
var
meshes
=
[];
var
geometry
=
geometries
[
i
];
var
primitive
=
primitives
[
i
];
for
(
var
i
=
0
,
il
=
geometries
.
length
;
i
<
il
;
i
++
)
{
// 1. create Mesh
var
geometry
=
geometries
[
i
];
var
primitive
=
primitives
[
i
];
var
mesh
;
// 1. create Mesh
var
material
=
originalMaterials
[
i
]
;
var
mesh
;
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
TRIANGLES
||
primitive
.
mode
===
WEBGL_CONSTANTS
.
TRIANGLE_STRIP
||
primitive
.
mode
===
WEBGL_CONSTANTS
.
TRIANGLE_FAN
||
primitive
.
mode
===
undefined
)
{
var
material
=
materials
[
i
];
// .isSkinnedMesh isn't in glTF spec. See .markDefs()
mesh
=
meshDef
.
isSkinnedMesh
===
true
?
new
SkinnedMesh
(
geometry
,
material
)
:
new
Mesh
(
geometry
,
material
);
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
TRIANGLES
||
primitive
.
mode
===
WEBGL_CONSTANTS
.
TRIANGLE_STRIP
||
primitive
.
mode
===
WEBGL_CONSTANTS
.
TRIANGLE_FAN
||
primitive
.
mode
===
undefined
)
{
if
(
mesh
.
isSkinnedMesh
===
true
&&
!
mesh
.
geometry
.
attributes
.
skinWeight
.
normalized
)
{
// .isSkinnedMesh isn't in glTF spec. See .markDefs()
mesh
=
meshDef
.
isSkinnedMesh
===
true
?
new
SkinnedMesh
(
geometry
,
material
)
:
new
Mesh
(
geometry
,
material
);
// we normalize floating point skin weight array to fix malformed assets (see #15319)
// it's important to skip this for non-float32 data since normalizeSkinWeights assumes non-normalized inputs
mesh
.
normalizeSkinWeights
();
if
(
mesh
.
isSkinnedMesh
===
true
&&
!
mesh
.
geometry
.
attributes
.
skinWeight
.
normalized
)
{
}
// we normalize floating point skin weight array to fix malformed assets (see #15319)
// it's important to skip this for non-float32 data since normalizeSkinWeights assumes non-normalized inputs
mesh
.
normalizeSkinWeights
();
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
TRIANGLE_STRIP
)
{
}
mesh
.
geometry
=
toTrianglesDrawMode
(
mesh
.
geometry
,
TriangleStripDrawMode
);
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
TRIANGLE_STRIP
)
{
}
else
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
TRIANGLE_FAN
)
{
mesh
.
geometry
=
toTrianglesDrawMode
(
mesh
.
geometry
,
TriangleStripDrawMode
);
mesh
.
geometry
=
toTrianglesDrawMode
(
mesh
.
geometry
,
TriangleFanDrawMode
);
}
else
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
TRIANGLE_FAN
)
{
}
mesh
.
geometry
=
toTrianglesDrawMode
(
mesh
.
geometry
,
TriangleFanDrawMode
);
}
else
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
LINES
)
{
}
mesh
=
new
LineSegments
(
geometry
,
material
);
}
else
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
LINES
)
{
}
else
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
LINE_STRIP
)
{
mesh
=
new
LineSegments
(
geometry
,
material
);
mesh
=
new
Line
(
geometry
,
material
);
}
else
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
LINE_STRIP
)
{
}
else
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
LINE_LOOP
)
{
mesh
=
new
Line
(
geometry
,
material
);
mesh
=
new
LineLoop
(
geometry
,
material
);
}
else
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
LINE_LOOP
)
{
}
else
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
POINTS
)
{
mesh
=
new
LineLoop
(
geometry
,
material
);
mesh
=
new
Points
(
geometry
,
material
);
}
else
if
(
primitive
.
mode
===
WEBGL_CONSTANTS
.
POINTS
)
{
}
else
{
mesh
=
new
Points
(
geometry
,
material
);
throw
new
Error
(
'
THREE.GLTFLoader: Primitive mode unsupported:
'
+
primitive
.
mode
);
}
else
{
}
throw
new
Error
(
'
THREE.GLTFLoader: Primitive mode unsupported:
'
+
primitive
.
mode
);
if
(
Object
.
keys
(
mesh
.
geometry
.
morphAttributes
).
length
>
0
)
{
}
updateMorphTargets
(
mesh
,
meshDef
);
if
(
Object
.
keys
(
mesh
.
geometry
.
morphAttributes
).
length
>
0
)
{
}
updateMorphTargets
(
mesh
,
meshDef
);
mesh
.
name
=
meshDef
.
name
||
(
'
mesh_
'
+
meshIndex
);
}
if
(
geometries
.
length
>
1
)
mesh
.
name
+=
'
_
'
+
i
;
mesh
.
name
=
meshDef
.
name
||
(
'
mesh_
'
+
meshIndex
)
;
assignExtrasToUserData
(
mesh
,
meshDef
)
;
if
(
geometries
.
length
>
1
)
mesh
.
name
+=
'
_
'
+
i
;
parser
.
assignFinalMaterial
(
mesh
);
assignExtrasToUserData
(
mesh
,
meshDef
);
meshes
.
push
(
mesh
);
parser
.
assignFinalMaterial
(
mesh
);
}
meshes
.
push
(
mesh
);
if
(
meshes
.
length
===
1
)
{
}
return
meshes
[
0
];
if
(
meshes
.
length
===
1
)
{
}
return
meshes
[
0
];
var
group
=
new
Group
();
}
for
(
var
i
=
0
,
il
=
meshes
.
length
;
i
<
il
;
i
++
)
{
var
group
=
new
Group
();
group
.
add
(
meshes
[
i
]
);
for
(
var
i
=
0
,
il
=
meshes
.
length
;
i
<
il
;
i
++
)
{
}
group
.
add
(
meshes
[
i
]
);
return
group
;
}
}
)
;
return
group
;
}
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录