Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
21cb7e4b
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,发现更多精彩内容 >>
未验证
提交
21cb7e4b
编写于
12月 10, 2018
作者:
M
Mr.doob
提交者:
GitHub
12月 10, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #15348 from donmccurdy/feat-gltfexporter-cache-geometry
GLTFExporter: Instance meshes and attributes.
上级
d004a4a0
cd62f6cd
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
49 addition
and
9 deletion
+49
-9
examples/js/exporters/GLTFExporter.js
examples/js/exporters/GLTFExporter.js
+49
-9
未找到文件。
examples/js/exporters/GLTFExporter.js
浏览文件 @
21cb7e4b
...
...
@@ -111,7 +111,9 @@ THREE.GLTFExporter.prototype = {
var
extensionsUsed
=
{};
var
cachedData
=
{
meshes
:
new
Map
(),
attributes
:
new
Map
(),
attributesNormalized
:
new
Map
(),
materials
:
new
Map
(),
textures
:
new
Map
(),
images
:
new
Map
()
...
...
@@ -221,7 +223,7 @@ THREE.GLTFExporter.prototype = {
*/
function
isNormalizedNormalAttribute
(
normal
)
{
if
(
cachedData
.
attributes
.
has
(
normal
)
)
{
if
(
cachedData
.
attributes
Normalized
.
has
(
normal
)
)
{
return
false
;
...
...
@@ -249,9 +251,9 @@ THREE.GLTFExporter.prototype = {
*/
function
createNormalizedNormalAttribute
(
normal
)
{
if
(
cachedData
.
attributes
.
has
(
normal
)
)
{
if
(
cachedData
.
attributes
Normalized
.
has
(
normal
)
)
{
return
cachedData
.
attributes
.
get
(
normal
);
return
cachedData
.
attributes
Normalized
.
get
(
normal
);
}
...
...
@@ -278,7 +280,7 @@ THREE.GLTFExporter.prototype = {
}
cachedData
.
attributes
.
set
(
normal
,
attribute
);
cachedData
.
attributes
Normalized
.
set
(
normal
,
attribute
);
return
attribute
;
...
...
@@ -1008,6 +1010,13 @@ THREE.GLTFExporter.prototype = {
*/
function
processMesh
(
mesh
)
{
var
cacheKey
=
mesh
.
geometry
.
uuid
+
'
:
'
+
mesh
.
material
.
uuid
;
if
(
cachedData
.
meshes
.
has
(
cacheKey
)
)
{
return
cachedData
.
meshes
.
get
(
cacheKey
);
}
var
geometry
=
mesh
.
geometry
;
var
mode
;
...
...
@@ -1090,23 +1099,32 @@ THREE.GLTFExporter.prototype = {
var
attribute
=
geometry
.
attributes
[
attributeName
];
attributeName
=
nameConversion
[
attributeName
]
||
attributeName
.
toUpperCase
();
if
(
cachedData
.
attributes
.
has
(
attribute
)
)
{
attributes
[
attributeName
]
=
cachedData
.
attributes
.
get
(
attribute
);
continue
;
}
// JOINTS_0 must be UNSIGNED_BYTE or UNSIGNED_SHORT.
var
modifiedAttribute
;
var
array
=
attribute
.
array
;
if
(
attributeName
===
'
JOINTS_0
'
&&
!
(
array
instanceof
Uint16Array
)
&&
!
(
array
instanceof
Uint8Array
)
)
{
console
.
warn
(
'
GLTFExporter: Attribute "skinIndex" converted to type UNSIGNED_SHORT.
'
);
a
ttribute
=
new
THREE
.
BufferAttribute
(
new
Uint16Array
(
array
),
attribute
.
itemSize
,
attribute
.
normalized
);
modifiedA
ttribute
=
new
THREE
.
BufferAttribute
(
new
Uint16Array
(
array
),
attribute
.
itemSize
,
attribute
.
normalized
);
}
if
(
attributeName
.
substr
(
0
,
5
)
!==
'
MORPH
'
)
{
var
accessor
=
processAccessor
(
attribute
,
geometry
);
var
accessor
=
processAccessor
(
modifiedAttribute
||
attribute
,
geometry
);
if
(
accessor
!==
null
)
{
attributes
[
attributeName
]
=
accessor
;
cachedData
.
attributes
.
set
(
attribute
,
accessor
);
}
...
...
@@ -1165,6 +1183,7 @@ THREE.GLTFExporter.prototype = {
}
var
attribute
=
geometry
.
morphAttributes
[
attributeName
][
i
];
var
gltfAttributeName
=
attributeName
.
toUpperCase
();
// Three.js morph attribute has absolute values while the one of glTF has relative values.
//
...
...
@@ -1172,6 +1191,14 @@ THREE.GLTFExporter.prototype = {
// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#morph-targets
var
baseAttribute
=
geometry
.
attributes
[
attributeName
];
if
(
cachedData
.
attributes
.
has
(
baseAttribute
)
)
{
target
[
gltfAttributeName
]
=
cachedData
.
attributes
.
get
(
baseAttribute
);
continue
;
}
// Clones attribute not to override
var
relativeAttribute
=
attribute
.
clone
();
...
...
@@ -1186,7 +1213,8 @@ THREE.GLTFExporter.prototype = {
}
target
[
attributeName
.
toUpperCase
()
]
=
processAccessor
(
relativeAttribute
,
geometry
);
target
[
gltfAttributeName
]
=
processAccessor
(
relativeAttribute
,
geometry
);
cachedData
.
attributes
.
set
(
baseAttribute
,
target
[
gltfAttributeName
]
);
}
...
...
@@ -1257,7 +1285,16 @@ THREE.GLTFExporter.prototype = {
if
(
geometry
.
index
!==
null
)
{
primitive
.
indices
=
processAccessor
(
geometry
.
index
,
geometry
,
groups
[
i
].
start
,
groups
[
i
].
count
);
if
(
cachedData
.
attributes
.
has
(
geometry
.
index
)
)
{
primitive
.
indices
=
cachedData
.
attributes
.
get
(
geometry
.
index
);
}
else
{
primitive
.
indices
=
processAccessor
(
geometry
.
index
,
geometry
,
groups
[
i
].
start
,
groups
[
i
].
count
);
cachedData
.
attributes
.
set
(
geometry
.
index
,
primitive
.
indices
);
}
}
...
...
@@ -1289,7 +1326,10 @@ THREE.GLTFExporter.prototype = {
outputJSON
.
meshes
.
push
(
gltfMesh
);
return
outputJSON
.
meshes
.
length
-
1
;
var
index
=
outputJSON
.
meshes
.
length
-
1
;
cachedData
.
meshes
.
set
(
cacheKey
,
index
);
return
index
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录