Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
车家大少爷
three.js
提交
bf8e0fe2
T
three.js
项目概览
车家大少爷
/
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,发现更多精彩内容 >>
提交
bf8e0fe2
编写于
10月 03, 2015
作者:
M
Mr.doob
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ColladaLoader2: Geometry can have multiple primitives...
上级
686107cb
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
89 addition
and
64 deletion
+89
-64
examples/js/loaders/ColladaLoader2.js
examples/js/loaders/ColladaLoader2.js
+89
-64
未找到文件。
examples/js/loaders/ColladaLoader2.js
浏览文件 @
bf8e0fe2
...
...
@@ -254,11 +254,16 @@ THREE.ColladaLoader.prototype = {
// geometry
var
lineMaterial
=
new
THREE
.
LineBasicMaterial
();
var
meshMaterial
=
new
THREE
.
MeshPhongMaterial
();
function
parseGeometry
(
xml
)
{
var
data
=
{
id
:
xml
.
getAttribute
(
'
id
'
),
sources
:
{}
name
:
xml
.
getAttribute
(
'
name
'
),
sources
:
{},
primitives
:
[]
};
var
mesh
=
xml
.
getElementsByTagName
(
'
mesh
'
)[
0
];
...
...
@@ -287,7 +292,7 @@ THREE.ColladaLoader.prototype = {
case
'
linestrips
'
:
case
'
polylist
'
:
case
'
triangles
'
:
data
.
primitive
=
parseGeometryPrimitive
(
child
);
data
.
primitive
s
.
push
(
parseGeometryPrimitive
(
child
)
);
break
;
default
:
...
...
@@ -299,119 +304,139 @@ THREE.ColladaLoader.prototype = {
//
if
(
data
.
primitive
===
undefined
)
return
;
var
group
=
new
THREE
.
Group
()
;
var
sources
=
data
.
sources
;
var
primitive
=
data
.
primitive
;
var
primitive
s
=
data
.
primitives
;
var
inputs
=
primitive
.
inputs
;
var
stride
=
primitive
.
stride
;
var
vcount
=
primitive
.
vcount
;
if
(
primitives
.
length
===
0
)
return
group
;
var
indices
=
primitive
.
p
;
var
vcount
=
primitive
.
vcount
;
for
(
var
p
=
0
;
p
<
primitives
.
length
;
p
++
)
{
var
maxcount
=
0
;
var
primitive
=
primitives
[
p
]
;
var
geometry
=
new
THREE
.
BufferGeometry
();
var
inputs
=
primitive
.
inputs
;
var
stride
=
primitive
.
stride
;
var
vcount
=
primitive
.
vcount
;
for
(
var
name
in
inputs
)
{
var
indices
=
primitive
.
p
;
var
vcount
=
primitive
.
vcount
;
var
input
=
inputs
[
name
]
;
var
maxcount
=
0
;
var
source
=
sources
[
input
.
id
]
;
var
offset
=
input
.
offset
;
var
geometry
=
new
THREE
.
BufferGeometry
()
;
if
(
data
.
name
)
geometry
.
name
=
data
.
name
;
var
array
=
[];
for
(
var
name
in
inputs
)
{
function
pushVector
(
i
)
{
var
input
=
inputs
[
name
];
var
index
=
indices
[
i
+
offset
]
*
3
;
array
.
push
(
source
[
index
+
0
],
source
[
index
+
1
],
source
[
index
+
2
]
)
;
var
source
=
sources
[
input
.
id
]
;
var
offset
=
input
.
offset
;
}
var
array
=
[];
function
pushVector
(
i
)
{
var
index
=
indices
[
i
+
offset
]
*
3
;
array
.
push
(
source
[
index
+
0
],
source
[
index
+
1
],
source
[
index
+
2
]
);
}
if
(
primitive
.
vcount
!==
undefined
)
{
if
(
primitive
.
vcount
!==
undefined
)
{
var
index
=
0
;
var
index
=
0
;
for
(
var
i
=
0
,
l
=
vcount
.
length
;
i
<
l
;
i
++
)
{
for
(
var
i
=
0
,
l
=
vcount
.
length
;
i
<
l
;
i
++
)
{
var
count
=
vcount
[
i
];
var
count
=
vcount
[
i
];
if
(
count
===
4
)
{
if
(
count
===
4
)
{
var
a
=
index
+
stride
*
0
;
var
b
=
index
+
stride
*
1
;
var
c
=
index
+
stride
*
2
;
var
d
=
index
+
stride
*
3
;
var
a
=
index
+
stride
*
0
;
var
b
=
index
+
stride
*
1
;
var
c
=
index
+
stride
*
2
;
var
d
=
index
+
stride
*
3
;
pushVector
(
a
);
pushVector
(
b
);
pushVector
(
d
);
pushVector
(
b
);
pushVector
(
c
);
pushVector
(
d
);
pushVector
(
a
);
pushVector
(
b
);
pushVector
(
d
);
pushVector
(
b
);
pushVector
(
c
);
pushVector
(
d
);
}
else
if
(
count
===
3
)
{
}
else
if
(
count
===
3
)
{
var
a
=
index
+
stride
*
0
;
var
b
=
index
+
stride
*
1
;
var
c
=
index
+
stride
*
2
;
var
a
=
index
+
stride
*
0
;
var
b
=
index
+
stride
*
1
;
var
c
=
index
+
stride
*
2
;
pushVector
(
a
);
pushVector
(
b
);
pushVector
(
c
);
pushVector
(
a
);
pushVector
(
b
);
pushVector
(
c
);
}
else
{
}
else
{
maxcount
=
Math
.
max
(
maxcount
,
count
);
maxcount
=
Math
.
max
(
maxcount
,
count
);
}
index
+=
stride
*
count
;
}
index
+=
stride
*
count
;
}
else
{
for
(
var
i
=
0
,
l
=
indices
.
length
;
i
<
l
;
i
+=
stride
)
{
pushVector
(
i
);
}
}
}
else
{
switch
(
name
)
{
for
(
var
i
=
0
,
l
=
indices
.
length
;
i
<
l
;
i
+=
stride
)
{
case
'
VERTEX
'
:
geometry
.
addAttribute
(
'
position
'
,
new
THREE
.
Float32Attribute
(
array
,
3
)
);
break
;
pushVector
(
i
);
case
'
NORMAL
'
:
geometry
.
addAttribute
(
'
normal
'
,
new
THREE
.
Float32Attribute
(
array
,
3
)
);
break
;
}
}
switch
(
name
)
{
case
'
VERTEX
'
:
geometry
.
addAttribute
(
'
position
'
,
new
THREE
.
Float32Attribute
(
array
,
3
)
);
break
;
if
(
maxcount
>
0
)
{
case
'
NORMAL
'
:
geometry
.
addAttribute
(
'
normal
'
,
new
THREE
.
Float32Attribute
(
array
,
3
)
);
break
;
console
.
log
(
'
ColladaLoader: Geometry
'
,
data
.
id
,
'
has faces with more than 4 vertices.
'
);
}
}
switch
(
primitive
.
type
)
{
if
(
maxcount
>
0
)
{
case
'
lines
'
:
group
.
add
(
new
THREE
.
LineSegments
(
geometry
,
lineMaterial
)
);
break
;
console
.
log
(
'
ColladaLoader: Geometry
'
,
data
.
id
,
'
has faces with more than 4 vertices.
'
);
case
'
linestrips
'
:
group
.
add
(
new
THREE
.
Line
(
geometry
,
lineMaterial
)
);
break
;
}
case
'
triangles
'
:
case
'
polylist
'
:
group
.
add
(
new
THREE
.
Mesh
(
geometry
,
meshMaterial
)
);
break
;
switch
(
data
.
primitive
.
type
)
{
}
case
'
lines
'
:
return
new
THREE
.
LineSegments
(
geometry
);
}
// flatten
case
'
linestrips
'
:
return
new
THREE
.
Line
(
geometry
);
if
(
group
.
children
.
length
===
1
)
{
case
'
triangles
'
:
case
'
polylist
'
:
return
new
THREE
.
Mesh
(
geometry
);
return
group
.
children
[
0
];
}
return
;
return
group
;
}
...
...
@@ -494,7 +519,7 @@ THREE.ColladaLoader.prototype = {
case
'
matrix
'
:
var
array
=
parseFloats
(
child
.
textContent
);
node
.
matrix
.
multiply
(
matrix
.
fromArray
(
array
)
);
// .transpose() when Z_UP?
node
.
matrix
.
multiply
(
matrix
.
fromArray
(
array
)
.
transpose
()
);
// .transpose() when Z_UP?
break
;
case
'
node
'
:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录