Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
db96a4a8
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,发现更多精彩内容 >>
提交
db96a4a8
编写于
4月 04, 2011
作者:
A
alteredq
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Added support for morph colors to JSONLoader and Geometry.
上级
df7216e7
变更
7
展开全部
隐藏空白更改
内联
并排
Showing
7 changed file
with
105 addition
and
77 deletion
+105
-77
build/Three.js
build/Three.js
+4
-3
build/custom/ThreeCanvas.js
build/custom/ThreeCanvas.js
+1
-1
build/custom/ThreeExtras.js
build/custom/ThreeExtras.js
+71
-70
build/custom/ThreeSVG.js
build/custom/ThreeSVG.js
+1
-1
build/custom/ThreeWebGL.js
build/custom/ThreeWebGL.js
+1
-1
src/core/Geometry.js
src/core/Geometry.js
+1
-0
src/extras/io/JSONLoader.js
src/extras/io/JSONLoader.js
+26
-1
未找到文件。
build/Three.js
浏览文件 @
db96a4a8
...
@@ -51,7 +51,7 @@ multiplyVector3:function(b,d){d||(d=b);var c=b.x,f=b.y,g=b.z,h=this.x,j=this.y,k
...
@@ -51,7 +51,7 @@ multiplyVector3:function(b,d){d||(d=b);var c=b.x,f=b.y,g=b.z,h=this.x,j=this.y,k
THREE
.
Quaternion
.
slerp
=
function
(
b
,
d
,
c
,
f
){
var
g
=
b
.
w
*
d
.
w
+
b
.
x
*
d
.
x
+
b
.
y
*
d
.
y
+
b
.
z
*
d
.
z
;
if
(
Math
.
abs
(
g
)
>=
1
){
c
.
w
=
b
.
w
;
c
.
x
=
b
.
x
;
c
.
y
=
b
.
y
;
c
.
z
=
b
.
z
;
return
c
}
var
h
=
Math
.
acos
(
g
),
j
=
Math
.
sqrt
(
1
-
g
*
g
);
if
(
Math
.
abs
(
j
)
<
0.0010
){
c
.
w
=
0.5
*
(
b
.
w
+
d
.
w
);
c
.
x
=
0.5
*
(
b
.
x
+
d
.
x
);
c
.
y
=
0.5
*
(
b
.
y
+
d
.
y
);
c
.
z
=
0.5
*
(
b
.
z
+
d
.
z
);
return
c
}
g
=
Math
.
sin
((
1
-
f
)
*
h
)
/
j
;
f
=
Math
.
sin
(
f
*
h
)
/
j
;
c
.
w
=
b
.
w
*
g
+
d
.
w
*
f
;
c
.
x
=
b
.
x
*
g
+
d
.
x
*
f
;
c
.
y
=
b
.
y
*
g
+
d
.
y
*
f
;
c
.
z
=
b
.
z
*
g
+
d
.
z
*
f
;
return
c
};
THREE
.
Vertex
=
function
(
b
){
this
.
position
=
b
||
new
THREE
.
Vector3
};
THREE
.
Quaternion
.
slerp
=
function
(
b
,
d
,
c
,
f
){
var
g
=
b
.
w
*
d
.
w
+
b
.
x
*
d
.
x
+
b
.
y
*
d
.
y
+
b
.
z
*
d
.
z
;
if
(
Math
.
abs
(
g
)
>=
1
){
c
.
w
=
b
.
w
;
c
.
x
=
b
.
x
;
c
.
y
=
b
.
y
;
c
.
z
=
b
.
z
;
return
c
}
var
h
=
Math
.
acos
(
g
),
j
=
Math
.
sqrt
(
1
-
g
*
g
);
if
(
Math
.
abs
(
j
)
<
0.0010
){
c
.
w
=
0.5
*
(
b
.
w
+
d
.
w
);
c
.
x
=
0.5
*
(
b
.
x
+
d
.
x
);
c
.
y
=
0.5
*
(
b
.
y
+
d
.
y
);
c
.
z
=
0.5
*
(
b
.
z
+
d
.
z
);
return
c
}
g
=
Math
.
sin
((
1
-
f
)
*
h
)
/
j
;
f
=
Math
.
sin
(
f
*
h
)
/
j
;
c
.
w
=
b
.
w
*
g
+
d
.
w
*
f
;
c
.
x
=
b
.
x
*
g
+
d
.
x
*
f
;
c
.
y
=
b
.
y
*
g
+
d
.
y
*
f
;
c
.
z
=
b
.
z
*
g
+
d
.
z
*
f
;
return
c
};
THREE
.
Vertex
=
function
(
b
){
this
.
position
=
b
||
new
THREE
.
Vector3
};
THREE
.
Face3
=
function
(
b
,
d
,
c
,
f
,
g
,
h
){
this
.
a
=
b
;
this
.
b
=
d
;
this
.
c
=
c
;
this
.
normal
=
f
instanceof
THREE
.
Vector3
?
f
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
f
instanceof
Array
?
f
:[];
this
.
color
=
g
instanceof
THREE
.
Color
?
g
:
new
THREE
.
Color
;
this
.
vertexColors
=
g
instanceof
Array
?
g
:[];
this
.
vertexTangents
=
[];
this
.
materials
=
h
instanceof
Array
?
h
:[
h
];
this
.
centroid
=
new
THREE
.
Vector3
};
THREE
.
Face3
=
function
(
b
,
d
,
c
,
f
,
g
,
h
){
this
.
a
=
b
;
this
.
b
=
d
;
this
.
c
=
c
;
this
.
normal
=
f
instanceof
THREE
.
Vector3
?
f
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
f
instanceof
Array
?
f
:[];
this
.
color
=
g
instanceof
THREE
.
Color
?
g
:
new
THREE
.
Color
;
this
.
vertexColors
=
g
instanceof
Array
?
g
:[];
this
.
vertexTangents
=
[];
this
.
materials
=
h
instanceof
Array
?
h
:[
h
];
this
.
centroid
=
new
THREE
.
Vector3
};
THREE
.
Face4
=
function
(
b
,
d
,
c
,
f
,
g
,
h
,
j
){
this
.
a
=
b
;
this
.
b
=
d
;
this
.
c
=
c
;
this
.
d
=
f
;
this
.
normal
=
g
instanceof
THREE
.
Vector3
?
g
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
g
instanceof
Array
?
g
:[];
this
.
color
=
h
instanceof
THREE
.
Color
?
h
:
new
THREE
.
Color
;
this
.
vertexColors
=
h
instanceof
Array
?
h
:[];
this
.
vertexTangents
=
[];
this
.
materials
=
j
instanceof
Array
?
j
:[
j
];
this
.
centroid
=
new
THREE
.
Vector3
};
THREE
.
UV
=
function
(
b
,
d
){
this
.
set
(
b
||
0
,
d
||
0
)};
THREE
.
Face4
=
function
(
b
,
d
,
c
,
f
,
g
,
h
,
j
){
this
.
a
=
b
;
this
.
b
=
d
;
this
.
c
=
c
;
this
.
d
=
f
;
this
.
normal
=
g
instanceof
THREE
.
Vector3
?
g
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
g
instanceof
Array
?
g
:[];
this
.
color
=
h
instanceof
THREE
.
Color
?
h
:
new
THREE
.
Color
;
this
.
vertexColors
=
h
instanceof
Array
?
h
:[];
this
.
vertexTangents
=
[];
this
.
materials
=
j
instanceof
Array
?
j
:[
j
];
this
.
centroid
=
new
THREE
.
Vector3
};
THREE
.
UV
=
function
(
b
,
d
){
this
.
set
(
b
||
0
,
d
||
0
)};
THREE
.
UV
.
prototype
=
{
set
:
function
(
b
,
d
){
this
.
u
=
b
;
this
.
v
=
d
;
return
this
},
copy
:
function
(
b
){
this
.
set
(
b
.
u
,
b
.
v
);
return
this
}};
THREE
.
Geometry
=
function
(){
this
.
id
=
"
Geometry
"
+
THREE
.
GeometryIdCounter
++
;
this
.
vertices
=
[];
this
.
colors
=
[];
this
.
faces
=
[];
this
.
faceUvs
=
[[]];
this
.
faceVertexUvs
=
[[]];
this
.
morphTargets
=
[];
this
.
skinWeights
=
[];
this
.
skinIndices
=
[];
this
.
boundingSphere
=
this
.
boundingBox
=
null
;
this
.
hasTangents
=!
1
};
THREE
.
UV
.
prototype
=
{
set
:
function
(
b
,
d
){
this
.
u
=
b
;
this
.
v
=
d
;
return
this
},
copy
:
function
(
b
){
this
.
set
(
b
.
u
,
b
.
v
);
return
this
}};
THREE
.
Geometry
=
function
(){
this
.
id
=
"
Geometry
"
+
THREE
.
GeometryIdCounter
++
;
this
.
vertices
=
[];
this
.
colors
=
[];
this
.
faces
=
[];
this
.
faceUvs
=
[[]];
this
.
faceVertexUvs
=
[[]];
this
.
morphTargets
=
[];
this
.
morphColors
=
[];
this
.
skinWeights
=
[];
this
.
skinIndices
=
[];
this
.
boundingSphere
=
this
.
boundingBox
=
null
;
this
.
hasTangents
=!
1
};
THREE
.
Geometry
.
prototype
=
{
computeCentroids
:
function
(){
var
b
,
d
,
c
;
b
=
0
;
for
(
d
=
this
.
faces
.
length
;
b
<
d
;
b
++
){
c
=
this
.
faces
[
b
];
c
.
centroid
.
set
(
0
,
0
,
0
);
if
(
c
instanceof
THREE
.
Face3
){
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
a
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
b
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
c
].
position
);
c
.
centroid
.
divideScalar
(
3
)}
else
if
(
c
instanceof
THREE
.
Face4
){
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
a
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
b
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
c
].
position
);
THREE
.
Geometry
.
prototype
=
{
computeCentroids
:
function
(){
var
b
,
d
,
c
;
b
=
0
;
for
(
d
=
this
.
faces
.
length
;
b
<
d
;
b
++
){
c
=
this
.
faces
[
b
];
c
.
centroid
.
set
(
0
,
0
,
0
);
if
(
c
instanceof
THREE
.
Face3
){
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
a
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
b
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
c
].
position
);
c
.
centroid
.
divideScalar
(
3
)}
else
if
(
c
instanceof
THREE
.
Face4
){
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
a
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
b
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
c
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
d
].
position
);
c
.
centroid
.
divideScalar
(
4
)}}},
computeFaceNormals
:
function
(
b
){
var
d
,
c
,
f
,
g
,
h
,
j
,
k
=
new
THREE
.
Vector3
,
n
=
new
THREE
.
Vector3
;
f
=
0
;
for
(
g
=
this
.
faces
.
length
;
f
<
g
;
f
++
){
h
=
this
.
faces
[
f
];
if
(
b
&&
h
.
vertexNormals
.
length
){
k
.
set
(
0
,
0
,
0
);
d
=
0
;
for
(
c
=
h
.
vertexNormals
.
length
;
d
<
c
;
d
++
)
k
.
addSelf
(
h
.
vertexNormals
[
d
]);
k
.
divideScalar
(
3
)}
else
{
d
=
this
.
vertices
[
h
.
a
];
c
=
this
.
vertices
[
h
.
b
];
j
=
this
.
vertices
[
h
.
c
];
k
.
sub
(
j
.
position
,
c
.
position
);
n
.
sub
(
d
.
position
,
c
.
position
);
k
.
crossSelf
(
n
)}
k
.
isZero
()
||
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
d
].
position
);
c
.
centroid
.
divideScalar
(
4
)}}},
computeFaceNormals
:
function
(
b
){
var
d
,
c
,
f
,
g
,
h
,
j
,
k
=
new
THREE
.
Vector3
,
n
=
new
THREE
.
Vector3
;
f
=
0
;
for
(
g
=
this
.
faces
.
length
;
f
<
g
;
f
++
){
h
=
this
.
faces
[
f
];
if
(
b
&&
h
.
vertexNormals
.
length
){
k
.
set
(
0
,
0
,
0
);
d
=
0
;
for
(
c
=
h
.
vertexNormals
.
length
;
d
<
c
;
d
++
)
k
.
addSelf
(
h
.
vertexNormals
[
d
]);
k
.
divideScalar
(
3
)}
else
{
d
=
this
.
vertices
[
h
.
a
];
c
=
this
.
vertices
[
h
.
b
];
j
=
this
.
vertices
[
h
.
c
];
k
.
sub
(
j
.
position
,
c
.
position
);
n
.
sub
(
d
.
position
,
c
.
position
);
k
.
crossSelf
(
n
)}
k
.
isZero
()
||
k
.
normalize
();
h
.
normal
.
copy
(
k
)}},
computeVertexNormals
:
function
(){
var
b
,
d
,
c
,
f
;
if
(
this
.
__tmpVertices
==
undefined
){
f
=
this
.
__tmpVertices
=
Array
(
this
.
vertices
.
length
);
b
=
0
;
for
(
d
=
this
.
vertices
.
length
;
b
<
d
;
b
++
)
f
[
b
]
=
new
THREE
.
Vector3
;
b
=
0
;
for
(
d
=
this
.
faces
.
length
;
b
<
d
;
b
++
){
c
=
this
.
faces
[
b
];
if
(
c
instanceof
THREE
.
Face3
)
c
.
vertexNormals
=
[
new
THREE
.
Vector3
,
new
THREE
.
Vector3
,
new
THREE
.
Vector3
];
else
if
(
c
instanceof
THREE
.
Face4
)
c
.
vertexNormals
=
[
new
THREE
.
Vector3
,
new
THREE
.
Vector3
,
new
THREE
.
Vector3
,
new
THREE
.
Vector3
]}}
else
{
f
=
k
.
normalize
();
h
.
normal
.
copy
(
k
)}},
computeVertexNormals
:
function
(){
var
b
,
d
,
c
,
f
;
if
(
this
.
__tmpVertices
==
undefined
){
f
=
this
.
__tmpVertices
=
Array
(
this
.
vertices
.
length
);
b
=
0
;
for
(
d
=
this
.
vertices
.
length
;
b
<
d
;
b
++
)
f
[
b
]
=
new
THREE
.
Vector3
;
b
=
0
;
for
(
d
=
this
.
faces
.
length
;
b
<
d
;
b
++
){
c
=
this
.
faces
[
b
];
if
(
c
instanceof
THREE
.
Face3
)
c
.
vertexNormals
=
[
new
THREE
.
Vector3
,
new
THREE
.
Vector3
,
new
THREE
.
Vector3
];
else
if
(
c
instanceof
THREE
.
Face4
)
c
.
vertexNormals
=
[
new
THREE
.
Vector3
,
new
THREE
.
Vector3
,
new
THREE
.
Vector3
,
new
THREE
.
Vector3
]}}
else
{
f
=
...
@@ -402,8 +402,9 @@ THREE.JSONLoader.prototype.load=function(b){var d=this,c=b.model,f=b.callback,g=
...
@@ -402,8 +402,9 @@ THREE.JSONLoader.prototype.load=function(b){var d=this,c=b.model,f=b.callback,g=
THREE
.
JSONLoader
.
prototype
.
createModel
=
function
(
b
,
d
,
c
){
var
f
=
new
THREE
.
Geometry
;
this
.
init_materials
(
f
,
b
.
materials
,
c
);(
function
(){
if
(
b
.
version
===
undefined
||
b
.
version
!=
2
)
console
.
error
(
"
Deprecated file format.
"
);
else
{
var
g
,
h
,
j
,
k
,
n
,
p
,
o
,
t
,
x
,
v
,
z
,
C
,
E
,
J
,
U
,
y
=
b
.
faces
;
p
=
b
.
vertices
;
var
L
=
b
.
normals
,
N
=
b
.
colors
;
o
=
b
.
scale
!==
undefined
?
b
.
scale
:
1
;
var
P
=
0
;
for
(
g
=
0
;
g
<
b
.
uvs
.
length
;
g
++
)
b
.
uvs
[
g
].
length
&&
P
++
;
for
(
g
=
0
;
g
<
P
;
g
++
){
f
.
faceUvs
[
g
]
=
[];
f
.
faceVertexUvs
[
g
]
=
[]}
k
=
0
;
for
(
n
=
p
.
length
;
k
<
n
;){
z
=
new
THREE
.
Vertex
;
z
.
position
.
x
=
p
[
k
++
]
/
THREE
.
JSONLoader
.
prototype
.
createModel
=
function
(
b
,
d
,
c
){
var
f
=
new
THREE
.
Geometry
;
this
.
init_materials
(
f
,
b
.
materials
,
c
);(
function
(){
if
(
b
.
version
===
undefined
||
b
.
version
!=
2
)
console
.
error
(
"
Deprecated file format.
"
);
else
{
var
g
,
h
,
j
,
k
,
n
,
p
,
o
,
t
,
x
,
v
,
z
,
C
,
E
,
J
,
U
,
y
=
b
.
faces
;
p
=
b
.
vertices
;
var
L
=
b
.
normals
,
N
=
b
.
colors
;
o
=
b
.
scale
!==
undefined
?
b
.
scale
:
1
;
var
P
=
0
;
for
(
g
=
0
;
g
<
b
.
uvs
.
length
;
g
++
)
b
.
uvs
[
g
].
length
&&
P
++
;
for
(
g
=
0
;
g
<
P
;
g
++
){
f
.
faceUvs
[
g
]
=
[];
f
.
faceVertexUvs
[
g
]
=
[]}
k
=
0
;
for
(
n
=
p
.
length
;
k
<
n
;){
z
=
new
THREE
.
Vertex
;
z
.
position
.
x
=
p
[
k
++
]
/
o
;
z
.
position
.
y
=
p
[
k
++
]
/
o
;
z
.
position
.
z
=
p
[
k
++
]
/
o
;
f
.
vertices
.
push
(
z
)}
k
=
0
;
for
(
n
=
y
.
length
;
k
<
n
;){
v
=
y
[
k
++
];
p
=
v
&
1
;
j
=
v
&
2
;
g
=
v
&
4
;
h
=
v
&
8
;
t
=
v
&
16
;
o
=
v
&
32
;
z
=
v
&
64
;
v
&=
128
;
if
(
p
){
C
=
new
THREE
.
Face4
;
C
.
a
=
y
[
k
++
];
C
.
b
=
y
[
k
++
];
C
.
c
=
y
[
k
++
];
C
.
d
=
y
[
k
++
];
p
=
4
}
else
{
C
=
new
THREE
.
Face3
;
C
.
a
=
y
[
k
++
];
C
.
b
=
y
[
k
++
];
C
.
c
=
y
[
k
++
];
p
=
3
}
if
(
j
){
j
=
y
[
k
++
];
C
.
materials
=
f
.
materials
[
j
]}
j
=
f
.
faces
.
length
;
if
(
g
)
for
(
g
=
0
;
g
<
P
;
g
++
){
E
=
b
.
uvs
[
g
];
x
=
y
[
k
++
];
U
=
E
[
x
*
2
];
x
=
E
[
x
*
2
+
1
];
f
.
faceUvs
[
g
][
j
]
=
new
THREE
.
UV
(
U
,
x
)}
if
(
h
)
for
(
g
=
0
;
g
<
P
;
g
++
){
E
=
b
.
uvs
[
g
];
J
=
[];
for
(
h
=
0
;
h
<
p
;
h
++
){
x
=
y
[
k
++
];
o
;
z
.
position
.
y
=
p
[
k
++
]
/
o
;
z
.
position
.
z
=
p
[
k
++
]
/
o
;
f
.
vertices
.
push
(
z
)}
k
=
0
;
for
(
n
=
y
.
length
;
k
<
n
;){
v
=
y
[
k
++
];
p
=
v
&
1
;
j
=
v
&
2
;
g
=
v
&
4
;
h
=
v
&
8
;
t
=
v
&
16
;
o
=
v
&
32
;
z
=
v
&
64
;
v
&=
128
;
if
(
p
){
C
=
new
THREE
.
Face4
;
C
.
a
=
y
[
k
++
];
C
.
b
=
y
[
k
++
];
C
.
c
=
y
[
k
++
];
C
.
d
=
y
[
k
++
];
p
=
4
}
else
{
C
=
new
THREE
.
Face3
;
C
.
a
=
y
[
k
++
];
C
.
b
=
y
[
k
++
];
C
.
c
=
y
[
k
++
];
p
=
3
}
if
(
j
){
j
=
y
[
k
++
];
C
.
materials
=
f
.
materials
[
j
]}
j
=
f
.
faces
.
length
;
if
(
g
)
for
(
g
=
0
;
g
<
P
;
g
++
){
E
=
b
.
uvs
[
g
];
x
=
y
[
k
++
];
U
=
E
[
x
*
2
];
x
=
E
[
x
*
2
+
1
];
f
.
faceUvs
[
g
][
j
]
=
new
THREE
.
UV
(
U
,
x
)}
if
(
h
)
for
(
g
=
0
;
g
<
P
;
g
++
){
E
=
b
.
uvs
[
g
];
J
=
[];
for
(
h
=
0
;
h
<
p
;
h
++
){
x
=
y
[
k
++
];
U
=
E
[
x
*
2
];
x
=
E
[
x
*
2
+
1
];
J
[
h
]
=
new
THREE
.
UV
(
U
,
x
)}
f
.
faceVertexUvs
[
g
][
j
]
=
J
}
if
(
t
){
t
=
y
[
k
++
]
*
3
;
h
=
new
THREE
.
Vector3
;
h
.
x
=
L
[
t
++
];
h
.
y
=
L
[
t
++
];
h
.
z
=
L
[
t
];
C
.
normal
=
h
}
if
(
o
)
for
(
g
=
0
;
g
<
p
;
g
++
){
t
=
y
[
k
++
]
*
3
;
h
=
new
THREE
.
Vector3
;
h
.
x
=
L
[
t
++
];
h
.
y
=
L
[
t
++
];
h
.
z
=
L
[
t
];
C
.
vertexNormals
.
push
(
h
)}
if
(
z
){
o
=
new
THREE
.
Color
(
y
[
k
++
]);
C
.
color
=
o
}
if
(
v
)
for
(
g
=
0
;
g
<
p
;
g
++
){
o
=
y
[
k
++
];
o
=
new
THREE
.
Color
(
N
[
o
]);
C
.
vertexColors
.
push
(
o
)}
f
.
faces
.
push
(
C
)}}})();(
function
(){
var
g
,
h
,
j
,
k
;
if
(
b
.
skinWeights
){
g
=
0
;
for
(
h
=
b
.
skinWeights
.
length
;
g
<
h
;
g
+=
2
){
j
=
b
.
skinWeights
[
g
];
k
=
b
.
skinWeights
[
g
+
U
=
E
[
x
*
2
];
x
=
E
[
x
*
2
+
1
];
J
[
h
]
=
new
THREE
.
UV
(
U
,
x
)}
f
.
faceVertexUvs
[
g
][
j
]
=
J
}
if
(
t
){
t
=
y
[
k
++
]
*
3
;
h
=
new
THREE
.
Vector3
;
h
.
x
=
L
[
t
++
];
h
.
y
=
L
[
t
++
];
h
.
z
=
L
[
t
];
C
.
normal
=
h
}
if
(
o
)
for
(
g
=
0
;
g
<
p
;
g
++
){
t
=
y
[
k
++
]
*
3
;
h
=
new
THREE
.
Vector3
;
h
.
x
=
L
[
t
++
];
h
.
y
=
L
[
t
++
];
h
.
z
=
L
[
t
];
C
.
vertexNormals
.
push
(
h
)}
if
(
z
){
o
=
new
THREE
.
Color
(
y
[
k
++
]);
C
.
color
=
o
}
if
(
v
)
for
(
g
=
0
;
g
<
p
;
g
++
){
o
=
y
[
k
++
];
o
=
new
THREE
.
Color
(
N
[
o
]);
C
.
vertexColors
.
push
(
o
)}
f
.
faces
.
push
(
C
)}}})();(
function
(){
var
g
,
h
,
j
,
k
;
if
(
b
.
skinWeights
){
g
=
0
;
for
(
h
=
b
.
skinWeights
.
length
;
g
<
h
;
g
+=
2
){
j
=
b
.
skinWeights
[
g
];
k
=
b
.
skinWeights
[
g
+
1
];
f
.
skinWeights
.
push
(
new
THREE
.
Vector4
(
j
,
k
,
0
,
0
))}}
if
(
b
.
skinIndices
){
g
=
0
;
for
(
h
=
b
.
skinIndices
.
length
;
g
<
h
;
g
+=
2
){
j
=
b
.
skinIndices
[
g
];
k
=
b
.
skinIndices
[
g
+
1
];
f
.
skinIndices
.
push
(
new
THREE
.
Vector4
(
j
,
k
,
0
,
0
))}}
f
.
bones
=
b
.
bones
;
f
.
animation
=
b
.
animation
})();(
function
(){
if
(
b
.
morphTargets
!==
undefined
){
var
g
,
h
,
j
,
k
;
g
=
0
;
for
(
h
=
b
.
morphTargets
.
length
;
g
<
h
;
g
++
){
f
.
morphTargets
[
g
]
=
{};
f
.
morphTargets
[
g
].
name
=
b
.
morphTargets
[
g
].
name
;
f
.
morphTargets
[
g
].
vertices
=
[];
dstVertices
=
f
.
morphTargets
[
g
].
vertices
;
srcVertices
=
b
.
morphTargets
[
g
].
vertices
;
1
];
f
.
skinWeights
.
push
(
new
THREE
.
Vector4
(
j
,
k
,
0
,
0
))}}
if
(
b
.
skinIndices
){
g
=
0
;
for
(
h
=
b
.
skinIndices
.
length
;
g
<
h
;
g
+=
2
){
j
=
b
.
skinIndices
[
g
];
k
=
b
.
skinIndices
[
g
+
1
];
f
.
skinIndices
.
push
(
new
THREE
.
Vector4
(
j
,
k
,
0
,
0
))}}
f
.
bones
=
b
.
bones
;
f
.
animation
=
b
.
animation
})();(
function
(){
if
(
b
.
morphTargets
!==
undefined
){
var
g
,
h
,
j
,
k
,
n
,
p
;
g
=
0
;
for
(
h
=
b
.
morphTargets
.
length
;
g
<
h
;
g
++
){
f
.
morphTargets
[
g
]
=
{};
f
.
morphTargets
[
g
].
name
=
b
.
morphTargets
[
g
].
name
;
f
.
morphTargets
[
g
].
vertices
=
[];
n
=
f
.
morphTargets
[
g
].
vertices
;
p
=
b
.
morphTargets
[
g
].
vertices
;
j
=
0
;
j
=
0
;
for
(
k
=
srcVertices
.
length
;
j
<
k
;
j
+=
3
)
dstVertices
.
push
(
new
THREE
.
Vertex
(
new
THREE
.
Vector3
(
srcVertices
[
j
],
srcVertices
[
j
+
1
],
srcVertices
[
j
+
2
])))}}})();
f
.
computeCentroids
();
f
.
computeFaceNormals
();
d
(
f
)};
THREE
.
BinaryLoader
=
function
(
b
){
THREE
.
Loader
.
call
(
this
,
b
)};
THREE
.
BinaryLoader
.
prototype
=
new
THREE
.
Loader
;
THREE
.
BinaryLoader
.
prototype
.
constructor
=
THREE
.
BinaryLoader
;
THREE
.
BinaryLoader
.
prototype
.
supr
=
THREE
.
Loader
.
prototype
;
for
(
k
=
p
.
length
;
j
<
k
;
j
+=
3
)
n
.
push
(
new
THREE
.
Vertex
(
new
THREE
.
Vector3
(
p
[
j
],
p
[
j
+
1
],
p
[
j
+
2
])))}}
if
(
b
.
morphColors
!==
undefined
){
var
o
,
t
;
g
=
0
;
for
(
h
=
b
.
morphColors
.
length
;
g
<
h
;
g
++
){
f
.
morphColors
[
g
]
=
{};
f
.
morphColors
[
g
].
name
=
b
.
morphColors
[
g
].
name
;
f
.
morphColors
[
g
].
colors
=
[];
p
=
f
.
morphColors
[
g
].
colors
;
o
=
b
.
morphColors
[
g
].
colors
;
k
=
0
;
for
(
n
=
o
.
length
;
k
<
n
;
k
+=
3
){
t
=
new
THREE
.
Color
(
16755200
);
t
.
setRGB
(
o
[
j
],
o
[
j
+
1
],
o
[
j
+
2
]);
p
.
push
(
t
)}}}})();
f
.
computeCentroids
();
f
.
computeFaceNormals
();
d
(
f
)};
THREE
.
BinaryLoader
=
function
(
b
){
THREE
.
Loader
.
call
(
this
,
b
)};
THREE
.
BinaryLoader
.
prototype
=
new
THREE
.
Loader
;
THREE
.
BinaryLoader
.
prototype
.
constructor
=
THREE
.
BinaryLoader
;
THREE
.
BinaryLoader
.
prototype
.
supr
=
THREE
.
Loader
.
prototype
;
THREE
.
BinaryLoader
.
prototype
=
{
load
:
function
(
b
){
var
d
=
b
.
model
,
c
=
b
.
callback
,
f
=
b
.
texture_path
?
b
.
texture_path
:
THREE
.
Loader
.
prototype
.
extractUrlbase
(
d
),
g
=
b
.
bin_path
?
b
.
bin_path
:
THREE
.
Loader
.
prototype
.
extractUrlbase
(
d
);
b
=
(
new
Date
).
getTime
();
d
=
new
Worker
(
d
);
var
h
=
this
.
showProgress
?
THREE
.
Loader
.
prototype
.
updateProgress
:
null
;
d
.
onmessage
=
function
(
j
){
THREE
.
BinaryLoader
.
prototype
.
loadAjaxBuffers
(
j
.
data
.
buffers
,
j
.
data
.
materials
,
c
,
g
,
f
,
h
)};
d
.
onerror
=
function
(
j
){
alert
(
"
worker.onerror:
"
+
j
.
message
+
"
\n
"
+
j
.
data
);
j
.
preventDefault
()};
THREE
.
BinaryLoader
.
prototype
=
{
load
:
function
(
b
){
var
d
=
b
.
model
,
c
=
b
.
callback
,
f
=
b
.
texture_path
?
b
.
texture_path
:
THREE
.
Loader
.
prototype
.
extractUrlbase
(
d
),
g
=
b
.
bin_path
?
b
.
bin_path
:
THREE
.
Loader
.
prototype
.
extractUrlbase
(
d
);
b
=
(
new
Date
).
getTime
();
d
=
new
Worker
(
d
);
var
h
=
this
.
showProgress
?
THREE
.
Loader
.
prototype
.
updateProgress
:
null
;
d
.
onmessage
=
function
(
j
){
THREE
.
BinaryLoader
.
prototype
.
loadAjaxBuffers
(
j
.
data
.
buffers
,
j
.
data
.
materials
,
c
,
g
,
f
,
h
)};
d
.
onerror
=
function
(
j
){
alert
(
"
worker.onerror:
"
+
j
.
message
+
"
\n
"
+
j
.
data
);
j
.
preventDefault
()};
d
.
postMessage
(
b
)},
loadAjaxBuffers
:
function
(
b
,
d
,
c
,
f
,
g
,
h
){
var
j
=
new
XMLHttpRequest
,
k
=
f
+
"
/
"
+
b
,
n
=
0
;
j
.
onreadystatechange
=
function
(){
if
(
j
.
readyState
==
4
)
j
.
status
==
200
||
j
.
status
==
0
?
THREE
.
BinaryLoader
.
prototype
.
createBinModel
(
j
.
responseText
,
c
,
g
,
d
):
alert
(
"
Couldn't load [
"
+
k
+
"
] [
"
+
j
.
status
+
"
]
"
);
else
if
(
j
.
readyState
==
3
){
if
(
h
){
n
==
0
&&
(
n
=
j
.
getResponseHeader
(
"
Content-Length
"
));
h
({
total
:
n
,
loaded
:
j
.
responseText
.
length
})}}
else
j
.
readyState
==
2
&&
(
n
=
j
.
getResponseHeader
(
"
Content-Length
"
))};
j
.
open
(
"
GET
"
,
k
,
!
0
);
j
.
overrideMimeType
(
"
text/plain; charset=x-user-defined
"
);
d
.
postMessage
(
b
)},
loadAjaxBuffers
:
function
(
b
,
d
,
c
,
f
,
g
,
h
){
var
j
=
new
XMLHttpRequest
,
k
=
f
+
"
/
"
+
b
,
n
=
0
;
j
.
onreadystatechange
=
function
(){
if
(
j
.
readyState
==
4
)
j
.
status
==
200
||
j
.
status
==
0
?
THREE
.
BinaryLoader
.
prototype
.
createBinModel
(
j
.
responseText
,
c
,
g
,
d
):
alert
(
"
Couldn't load [
"
+
k
+
"
] [
"
+
j
.
status
+
"
]
"
);
else
if
(
j
.
readyState
==
3
){
if
(
h
){
n
==
0
&&
(
n
=
j
.
getResponseHeader
(
"
Content-Length
"
));
h
({
total
:
n
,
loaded
:
j
.
responseText
.
length
})}}
else
j
.
readyState
==
2
&&
(
n
=
j
.
getResponseHeader
(
"
Content-Length
"
))};
j
.
open
(
"
GET
"
,
k
,
!
0
);
j
.
overrideMimeType
(
"
text/plain; charset=x-user-defined
"
);
j
.
setRequestHeader
(
"
Content-Type
"
,
"
text/plain
"
);
j
.
send
(
null
)},
createBinModel
:
function
(
b
,
d
,
c
,
f
){
var
g
=
function
(
h
){
function
j
(
O
,
aa
){
var
qa
=
o
(
O
,
aa
),
Da
=
o
(
O
,
aa
+
1
),
ha
=
o
(
O
,
aa
+
2
),
la
=
o
(
O
,
aa
+
3
),
m
=
(
la
<<
1
&
255
|
ha
>>
7
)
-
127
;
qa
|=
(
ha
&
127
)
<<
16
|
Da
<<
8
;
if
(
qa
==
0
&&
m
==-
127
)
return
0
;
return
(
1
-
2
*
(
la
>>
7
))
*
(
1
+
qa
*
Math
.
pow
(
2
,
-
23
))
*
Math
.
pow
(
2
,
m
)}
function
k
(
O
,
aa
){
var
qa
=
o
(
O
,
aa
),
Da
=
o
(
O
,
aa
+
1
),
ha
=
o
(
O
,
aa
+
2
);
return
(
o
(
O
,
aa
+
3
)
<<
24
)
+
(
ha
<<
16
)
+
(
Da
<<
8
)
+
qa
}
function
n
(
O
,
aa
){
var
qa
=
o
(
O
,
aa
);
return
(
o
(
O
,
aa
+
1
)
<<
8
)
+
qa
}
function
p
(
O
,
aa
){
var
qa
=
o
(
O
,
aa
);
j
.
setRequestHeader
(
"
Content-Type
"
,
"
text/plain
"
);
j
.
send
(
null
)},
createBinModel
:
function
(
b
,
d
,
c
,
f
){
var
g
=
function
(
h
){
function
j
(
O
,
aa
){
var
qa
=
o
(
O
,
aa
),
Da
=
o
(
O
,
aa
+
1
),
ha
=
o
(
O
,
aa
+
2
),
la
=
o
(
O
,
aa
+
3
),
m
=
(
la
<<
1
&
255
|
ha
>>
7
)
-
127
;
qa
|=
(
ha
&
127
)
<<
16
|
Da
<<
8
;
if
(
qa
==
0
&&
m
==-
127
)
return
0
;
return
(
1
-
2
*
(
la
>>
7
))
*
(
1
+
qa
*
Math
.
pow
(
2
,
-
23
))
*
Math
.
pow
(
2
,
m
)}
function
k
(
O
,
aa
){
var
qa
=
o
(
O
,
aa
),
Da
=
o
(
O
,
aa
+
1
),
ha
=
o
(
O
,
aa
+
2
);
return
(
o
(
O
,
aa
+
3
)
<<
24
)
+
(
ha
<<
16
)
+
(
Da
<<
8
)
+
qa
}
function
n
(
O
,
aa
){
var
qa
=
o
(
O
,
aa
);
return
(
o
(
O
,
aa
+
1
)
<<
8
)
+
qa
}
function
p
(
O
,
aa
){
var
qa
=
o
(
O
,
aa
);
...
...
build/custom/ThreeCanvas.js
浏览文件 @
db96a4a8
...
@@ -51,7 +51,7 @@ multiplyVector3:function(a,b){b||(b=a);var c=a.x,e=a.y,d=a.z,f=this.x,g=this.y,i
...
@@ -51,7 +51,7 @@ multiplyVector3:function(a,b){b||(b=a);var c=a.x,e=a.y,d=a.z,f=this.x,g=this.y,i
THREE
.
Quaternion
.
slerp
=
function
(
a
,
b
,
c
,
e
){
var
d
=
a
.
w
*
b
.
w
+
a
.
x
*
b
.
x
+
a
.
y
*
b
.
y
+
a
.
z
*
b
.
z
;
if
(
Math
.
abs
(
d
)
>=
1
){
c
.
w
=
a
.
w
;
c
.
x
=
a
.
x
;
c
.
y
=
a
.
y
;
c
.
z
=
a
.
z
;
return
c
}
var
f
=
Math
.
acos
(
d
),
g
=
Math
.
sqrt
(
1
-
d
*
d
);
if
(
Math
.
abs
(
g
)
<
0.0010
){
c
.
w
=
0.5
*
(
a
.
w
+
b
.
w
);
c
.
x
=
0.5
*
(
a
.
x
+
b
.
x
);
c
.
y
=
0.5
*
(
a
.
y
+
b
.
y
);
c
.
z
=
0.5
*
(
a
.
z
+
b
.
z
);
return
c
}
d
=
Math
.
sin
((
1
-
e
)
*
f
)
/
g
;
e
=
Math
.
sin
(
e
*
f
)
/
g
;
c
.
w
=
a
.
w
*
d
+
b
.
w
*
e
;
c
.
x
=
a
.
x
*
d
+
b
.
x
*
e
;
c
.
y
=
a
.
y
*
d
+
b
.
y
*
e
;
c
.
z
=
a
.
z
*
d
+
b
.
z
*
e
;
return
c
};
THREE
.
Vertex
=
function
(
a
){
this
.
position
=
a
||
new
THREE
.
Vector3
};
THREE
.
Quaternion
.
slerp
=
function
(
a
,
b
,
c
,
e
){
var
d
=
a
.
w
*
b
.
w
+
a
.
x
*
b
.
x
+
a
.
y
*
b
.
y
+
a
.
z
*
b
.
z
;
if
(
Math
.
abs
(
d
)
>=
1
){
c
.
w
=
a
.
w
;
c
.
x
=
a
.
x
;
c
.
y
=
a
.
y
;
c
.
z
=
a
.
z
;
return
c
}
var
f
=
Math
.
acos
(
d
),
g
=
Math
.
sqrt
(
1
-
d
*
d
);
if
(
Math
.
abs
(
g
)
<
0.0010
){
c
.
w
=
0.5
*
(
a
.
w
+
b
.
w
);
c
.
x
=
0.5
*
(
a
.
x
+
b
.
x
);
c
.
y
=
0.5
*
(
a
.
y
+
b
.
y
);
c
.
z
=
0.5
*
(
a
.
z
+
b
.
z
);
return
c
}
d
=
Math
.
sin
((
1
-
e
)
*
f
)
/
g
;
e
=
Math
.
sin
(
e
*
f
)
/
g
;
c
.
w
=
a
.
w
*
d
+
b
.
w
*
e
;
c
.
x
=
a
.
x
*
d
+
b
.
x
*
e
;
c
.
y
=
a
.
y
*
d
+
b
.
y
*
e
;
c
.
z
=
a
.
z
*
d
+
b
.
z
*
e
;
return
c
};
THREE
.
Vertex
=
function
(
a
){
this
.
position
=
a
||
new
THREE
.
Vector3
};
THREE
.
Face3
=
function
(
a
,
b
,
c
,
e
,
d
,
f
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
normal
=
e
instanceof
THREE
.
Vector3
?
e
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
e
instanceof
Array
?
e
:[];
this
.
color
=
d
instanceof
THREE
.
Color
?
d
:
new
THREE
.
Color
;
this
.
vertexColors
=
d
instanceof
Array
?
d
:[];
this
.
vertexTangents
=
[];
this
.
materials
=
f
instanceof
Array
?
f
:[
f
];
this
.
centroid
=
new
THREE
.
Vector3
};
THREE
.
Face3
=
function
(
a
,
b
,
c
,
e
,
d
,
f
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
normal
=
e
instanceof
THREE
.
Vector3
?
e
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
e
instanceof
Array
?
e
:[];
this
.
color
=
d
instanceof
THREE
.
Color
?
d
:
new
THREE
.
Color
;
this
.
vertexColors
=
d
instanceof
Array
?
d
:[];
this
.
vertexTangents
=
[];
this
.
materials
=
f
instanceof
Array
?
f
:[
f
];
this
.
centroid
=
new
THREE
.
Vector3
};
THREE
.
Face4
=
function
(
a
,
b
,
c
,
e
,
d
,
f
,
g
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
d
=
e
;
this
.
normal
=
d
instanceof
THREE
.
Vector3
?
d
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
d
instanceof
Array
?
d
:[];
this
.
color
=
f
instanceof
THREE
.
Color
?
f
:
new
THREE
.
Color
;
this
.
vertexColors
=
f
instanceof
Array
?
f
:[];
this
.
vertexTangents
=
[];
this
.
materials
=
g
instanceof
Array
?
g
:[
g
];
this
.
centroid
=
new
THREE
.
Vector3
};
THREE
.
UV
=
function
(
a
,
b
){
this
.
set
(
a
||
0
,
b
||
0
)};
THREE
.
Face4
=
function
(
a
,
b
,
c
,
e
,
d
,
f
,
g
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
d
=
e
;
this
.
normal
=
d
instanceof
THREE
.
Vector3
?
d
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
d
instanceof
Array
?
d
:[];
this
.
color
=
f
instanceof
THREE
.
Color
?
f
:
new
THREE
.
Color
;
this
.
vertexColors
=
f
instanceof
Array
?
f
:[];
this
.
vertexTangents
=
[];
this
.
materials
=
g
instanceof
Array
?
g
:[
g
];
this
.
centroid
=
new
THREE
.
Vector3
};
THREE
.
UV
=
function
(
a
,
b
){
this
.
set
(
a
||
0
,
b
||
0
)};
THREE
.
UV
.
prototype
=
{
set
:
function
(
a
,
b
){
this
.
u
=
a
;
this
.
v
=
b
;
return
this
},
copy
:
function
(
a
){
this
.
set
(
a
.
u
,
a
.
v
);
return
this
}};
THREE
.
Geometry
=
function
(){
this
.
id
=
"
Geometry
"
+
THREE
.
GeometryIdCounter
++
;
this
.
vertices
=
[];
this
.
colors
=
[];
this
.
faces
=
[];
this
.
faceUvs
=
[[]];
this
.
faceVertexUvs
=
[[]];
this
.
morphTargets
=
[];
this
.
skinWeights
=
[];
this
.
skinIndices
=
[];
this
.
boundingSphere
=
this
.
boundingBox
=
null
;
this
.
hasTangents
=!
1
};
THREE
.
UV
.
prototype
=
{
set
:
function
(
a
,
b
){
this
.
u
=
a
;
this
.
v
=
b
;
return
this
},
copy
:
function
(
a
){
this
.
set
(
a
.
u
,
a
.
v
);
return
this
}};
THREE
.
Geometry
=
function
(){
this
.
id
=
"
Geometry
"
+
THREE
.
GeometryIdCounter
++
;
this
.
vertices
=
[];
this
.
colors
=
[];
this
.
faces
=
[];
this
.
faceUvs
=
[[]];
this
.
faceVertexUvs
=
[[]];
this
.
morphTargets
=
[];
this
.
morphColors
=
[];
this
.
skinWeights
=
[];
this
.
skinIndices
=
[];
this
.
boundingSphere
=
this
.
boundingBox
=
null
;
this
.
hasTangents
=!
1
};
THREE
.
Geometry
.
prototype
=
{
computeCentroids
:
function
(){
var
a
,
b
,
c
;
a
=
0
;
for
(
b
=
this
.
faces
.
length
;
a
<
b
;
a
++
){
c
=
this
.
faces
[
a
];
c
.
centroid
.
set
(
0
,
0
,
0
);
if
(
c
instanceof
THREE
.
Face3
){
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
a
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
b
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
c
].
position
);
c
.
centroid
.
divideScalar
(
3
)}
else
if
(
c
instanceof
THREE
.
Face4
){
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
a
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
b
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
c
].
position
);
THREE
.
Geometry
.
prototype
=
{
computeCentroids
:
function
(){
var
a
,
b
,
c
;
a
=
0
;
for
(
b
=
this
.
faces
.
length
;
a
<
b
;
a
++
){
c
=
this
.
faces
[
a
];
c
.
centroid
.
set
(
0
,
0
,
0
);
if
(
c
instanceof
THREE
.
Face3
){
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
a
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
b
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
c
].
position
);
c
.
centroid
.
divideScalar
(
3
)}
else
if
(
c
instanceof
THREE
.
Face4
){
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
a
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
b
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
c
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
d
].
position
);
c
.
centroid
.
divideScalar
(
4
)}}},
computeFaceNormals
:
function
(
a
){
var
b
,
c
,
e
,
d
,
f
,
g
,
i
=
new
THREE
.
Vector3
,
h
=
new
THREE
.
Vector3
;
e
=
0
;
for
(
d
=
this
.
faces
.
length
;
e
<
d
;
e
++
){
f
=
this
.
faces
[
e
];
if
(
a
&&
f
.
vertexNormals
.
length
){
i
.
set
(
0
,
0
,
0
);
b
=
0
;
for
(
c
=
f
.
vertexNormals
.
length
;
b
<
c
;
b
++
)
i
.
addSelf
(
f
.
vertexNormals
[
b
]);
i
.
divideScalar
(
3
)}
else
{
b
=
this
.
vertices
[
f
.
a
];
c
=
this
.
vertices
[
f
.
b
];
g
=
this
.
vertices
[
f
.
c
];
i
.
sub
(
g
.
position
,
c
.
position
);
h
.
sub
(
b
.
position
,
c
.
position
);
i
.
crossSelf
(
h
)}
i
.
isZero
()
||
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
d
].
position
);
c
.
centroid
.
divideScalar
(
4
)}}},
computeFaceNormals
:
function
(
a
){
var
b
,
c
,
e
,
d
,
f
,
g
,
i
=
new
THREE
.
Vector3
,
h
=
new
THREE
.
Vector3
;
e
=
0
;
for
(
d
=
this
.
faces
.
length
;
e
<
d
;
e
++
){
f
=
this
.
faces
[
e
];
if
(
a
&&
f
.
vertexNormals
.
length
){
i
.
set
(
0
,
0
,
0
);
b
=
0
;
for
(
c
=
f
.
vertexNormals
.
length
;
b
<
c
;
b
++
)
i
.
addSelf
(
f
.
vertexNormals
[
b
]);
i
.
divideScalar
(
3
)}
else
{
b
=
this
.
vertices
[
f
.
a
];
c
=
this
.
vertices
[
f
.
b
];
g
=
this
.
vertices
[
f
.
c
];
i
.
sub
(
g
.
position
,
c
.
position
);
h
.
sub
(
b
.
position
,
c
.
position
);
i
.
crossSelf
(
h
)}
i
.
isZero
()
||
i
.
normalize
();
f
.
normal
.
copy
(
i
)}},
computeVertexNormals
:
function
(){
var
a
,
b
,
c
,
e
;
if
(
this
.
__tmpVertices
==
undefined
){
e
=
this
.
__tmpVertices
=
Array
(
this
.
vertices
.
length
);
a
=
0
;
for
(
b
=
this
.
vertices
.
length
;
a
<
b
;
a
++
)
e
[
a
]
=
new
THREE
.
Vector3
;
a
=
0
;
for
(
b
=
this
.
faces
.
length
;
a
<
b
;
a
++
){
c
=
this
.
faces
[
a
];
if
(
c
instanceof
THREE
.
Face3
)
c
.
vertexNormals
=
[
new
THREE
.
Vector3
,
new
THREE
.
Vector3
,
new
THREE
.
Vector3
];
else
if
(
c
instanceof
THREE
.
Face4
)
c
.
vertexNormals
=
[
new
THREE
.
Vector3
,
new
THREE
.
Vector3
,
new
THREE
.
Vector3
,
new
THREE
.
Vector3
]}}
else
{
e
=
i
.
normalize
();
f
.
normal
.
copy
(
i
)}},
computeVertexNormals
:
function
(){
var
a
,
b
,
c
,
e
;
if
(
this
.
__tmpVertices
==
undefined
){
e
=
this
.
__tmpVertices
=
Array
(
this
.
vertices
.
length
);
a
=
0
;
for
(
b
=
this
.
vertices
.
length
;
a
<
b
;
a
++
)
e
[
a
]
=
new
THREE
.
Vector3
;
a
=
0
;
for
(
b
=
this
.
faces
.
length
;
a
<
b
;
a
++
){
c
=
this
.
faces
[
a
];
if
(
c
instanceof
THREE
.
Face3
)
c
.
vertexNormals
=
[
new
THREE
.
Vector3
,
new
THREE
.
Vector3
,
new
THREE
.
Vector3
];
else
if
(
c
instanceof
THREE
.
Face4
)
c
.
vertexNormals
=
[
new
THREE
.
Vector3
,
new
THREE
.
Vector3
,
new
THREE
.
Vector3
,
new
THREE
.
Vector3
]}}
else
{
e
=
...
...
build/custom/ThreeExtras.js
浏览文件 @
db96a4a8
此差异已折叠。
点击以展开。
build/custom/ThreeSVG.js
浏览文件 @
db96a4a8
...
@@ -51,7 +51,7 @@ multiplyVector3:function(a,b){b||(b=a);var c=a.x,e=a.y,d=a.z,f=this.x,g=this.y,i
...
@@ -51,7 +51,7 @@ multiplyVector3:function(a,b){b||(b=a);var c=a.x,e=a.y,d=a.z,f=this.x,g=this.y,i
THREE
.
Quaternion
.
slerp
=
function
(
a
,
b
,
c
,
e
){
var
d
=
a
.
w
*
b
.
w
+
a
.
x
*
b
.
x
+
a
.
y
*
b
.
y
+
a
.
z
*
b
.
z
;
if
(
Math
.
abs
(
d
)
>=
1
){
c
.
w
=
a
.
w
;
c
.
x
=
a
.
x
;
c
.
y
=
a
.
y
;
c
.
z
=
a
.
z
;
return
c
}
var
f
=
Math
.
acos
(
d
),
g
=
Math
.
sqrt
(
1
-
d
*
d
);
if
(
Math
.
abs
(
g
)
<
0.0010
){
c
.
w
=
0.5
*
(
a
.
w
+
b
.
w
);
c
.
x
=
0.5
*
(
a
.
x
+
b
.
x
);
c
.
y
=
0.5
*
(
a
.
y
+
b
.
y
);
c
.
z
=
0.5
*
(
a
.
z
+
b
.
z
);
return
c
}
d
=
Math
.
sin
((
1
-
e
)
*
f
)
/
g
;
e
=
Math
.
sin
(
e
*
f
)
/
g
;
c
.
w
=
a
.
w
*
d
+
b
.
w
*
e
;
c
.
x
=
a
.
x
*
d
+
b
.
x
*
e
;
c
.
y
=
a
.
y
*
d
+
b
.
y
*
e
;
c
.
z
=
a
.
z
*
d
+
b
.
z
*
e
;
return
c
};
THREE
.
Vertex
=
function
(
a
){
this
.
position
=
a
||
new
THREE
.
Vector3
};
THREE
.
Quaternion
.
slerp
=
function
(
a
,
b
,
c
,
e
){
var
d
=
a
.
w
*
b
.
w
+
a
.
x
*
b
.
x
+
a
.
y
*
b
.
y
+
a
.
z
*
b
.
z
;
if
(
Math
.
abs
(
d
)
>=
1
){
c
.
w
=
a
.
w
;
c
.
x
=
a
.
x
;
c
.
y
=
a
.
y
;
c
.
z
=
a
.
z
;
return
c
}
var
f
=
Math
.
acos
(
d
),
g
=
Math
.
sqrt
(
1
-
d
*
d
);
if
(
Math
.
abs
(
g
)
<
0.0010
){
c
.
w
=
0.5
*
(
a
.
w
+
b
.
w
);
c
.
x
=
0.5
*
(
a
.
x
+
b
.
x
);
c
.
y
=
0.5
*
(
a
.
y
+
b
.
y
);
c
.
z
=
0.5
*
(
a
.
z
+
b
.
z
);
return
c
}
d
=
Math
.
sin
((
1
-
e
)
*
f
)
/
g
;
e
=
Math
.
sin
(
e
*
f
)
/
g
;
c
.
w
=
a
.
w
*
d
+
b
.
w
*
e
;
c
.
x
=
a
.
x
*
d
+
b
.
x
*
e
;
c
.
y
=
a
.
y
*
d
+
b
.
y
*
e
;
c
.
z
=
a
.
z
*
d
+
b
.
z
*
e
;
return
c
};
THREE
.
Vertex
=
function
(
a
){
this
.
position
=
a
||
new
THREE
.
Vector3
};
THREE
.
Face3
=
function
(
a
,
b
,
c
,
e
,
d
,
f
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
normal
=
e
instanceof
THREE
.
Vector3
?
e
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
e
instanceof
Array
?
e
:[];
this
.
color
=
d
instanceof
THREE
.
Color
?
d
:
new
THREE
.
Color
;
this
.
vertexColors
=
d
instanceof
Array
?
d
:[];
this
.
vertexTangents
=
[];
this
.
materials
=
f
instanceof
Array
?
f
:[
f
];
this
.
centroid
=
new
THREE
.
Vector3
};
THREE
.
Face3
=
function
(
a
,
b
,
c
,
e
,
d
,
f
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
normal
=
e
instanceof
THREE
.
Vector3
?
e
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
e
instanceof
Array
?
e
:[];
this
.
color
=
d
instanceof
THREE
.
Color
?
d
:
new
THREE
.
Color
;
this
.
vertexColors
=
d
instanceof
Array
?
d
:[];
this
.
vertexTangents
=
[];
this
.
materials
=
f
instanceof
Array
?
f
:[
f
];
this
.
centroid
=
new
THREE
.
Vector3
};
THREE
.
Face4
=
function
(
a
,
b
,
c
,
e
,
d
,
f
,
g
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
d
=
e
;
this
.
normal
=
d
instanceof
THREE
.
Vector3
?
d
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
d
instanceof
Array
?
d
:[];
this
.
color
=
f
instanceof
THREE
.
Color
?
f
:
new
THREE
.
Color
;
this
.
vertexColors
=
f
instanceof
Array
?
f
:[];
this
.
vertexTangents
=
[];
this
.
materials
=
g
instanceof
Array
?
g
:[
g
];
this
.
centroid
=
new
THREE
.
Vector3
};
THREE
.
UV
=
function
(
a
,
b
){
this
.
set
(
a
||
0
,
b
||
0
)};
THREE
.
Face4
=
function
(
a
,
b
,
c
,
e
,
d
,
f
,
g
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
d
=
e
;
this
.
normal
=
d
instanceof
THREE
.
Vector3
?
d
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
d
instanceof
Array
?
d
:[];
this
.
color
=
f
instanceof
THREE
.
Color
?
f
:
new
THREE
.
Color
;
this
.
vertexColors
=
f
instanceof
Array
?
f
:[];
this
.
vertexTangents
=
[];
this
.
materials
=
g
instanceof
Array
?
g
:[
g
];
this
.
centroid
=
new
THREE
.
Vector3
};
THREE
.
UV
=
function
(
a
,
b
){
this
.
set
(
a
||
0
,
b
||
0
)};
THREE
.
UV
.
prototype
=
{
set
:
function
(
a
,
b
){
this
.
u
=
a
;
this
.
v
=
b
;
return
this
},
copy
:
function
(
a
){
this
.
set
(
a
.
u
,
a
.
v
);
return
this
}};
THREE
.
Geometry
=
function
(){
this
.
id
=
"
Geometry
"
+
THREE
.
GeometryIdCounter
++
;
this
.
vertices
=
[];
this
.
colors
=
[];
this
.
faces
=
[];
this
.
faceUvs
=
[[]];
this
.
faceVertexUvs
=
[[]];
this
.
morphTargets
=
[];
this
.
skinWeights
=
[];
this
.
skinIndices
=
[];
this
.
boundingSphere
=
this
.
boundingBox
=
null
;
this
.
hasTangents
=!
1
};
THREE
.
UV
.
prototype
=
{
set
:
function
(
a
,
b
){
this
.
u
=
a
;
this
.
v
=
b
;
return
this
},
copy
:
function
(
a
){
this
.
set
(
a
.
u
,
a
.
v
);
return
this
}};
THREE
.
Geometry
=
function
(){
this
.
id
=
"
Geometry
"
+
THREE
.
GeometryIdCounter
++
;
this
.
vertices
=
[];
this
.
colors
=
[];
this
.
faces
=
[];
this
.
faceUvs
=
[[]];
this
.
faceVertexUvs
=
[[]];
this
.
morphTargets
=
[];
this
.
morphColors
=
[];
this
.
skinWeights
=
[];
this
.
skinIndices
=
[];
this
.
boundingSphere
=
this
.
boundingBox
=
null
;
this
.
hasTangents
=!
1
};
THREE
.
Geometry
.
prototype
=
{
computeCentroids
:
function
(){
var
a
,
b
,
c
;
a
=
0
;
for
(
b
=
this
.
faces
.
length
;
a
<
b
;
a
++
){
c
=
this
.
faces
[
a
];
c
.
centroid
.
set
(
0
,
0
,
0
);
if
(
c
instanceof
THREE
.
Face3
){
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
a
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
b
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
c
].
position
);
c
.
centroid
.
divideScalar
(
3
)}
else
if
(
c
instanceof
THREE
.
Face4
){
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
a
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
b
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
c
].
position
);
THREE
.
Geometry
.
prototype
=
{
computeCentroids
:
function
(){
var
a
,
b
,
c
;
a
=
0
;
for
(
b
=
this
.
faces
.
length
;
a
<
b
;
a
++
){
c
=
this
.
faces
[
a
];
c
.
centroid
.
set
(
0
,
0
,
0
);
if
(
c
instanceof
THREE
.
Face3
){
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
a
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
b
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
c
].
position
);
c
.
centroid
.
divideScalar
(
3
)}
else
if
(
c
instanceof
THREE
.
Face4
){
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
a
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
b
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
c
].
position
);
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
d
].
position
);
c
.
centroid
.
divideScalar
(
4
)}}},
computeFaceNormals
:
function
(
a
){
var
b
,
c
,
e
,
d
,
f
,
g
,
i
=
new
THREE
.
Vector3
,
h
=
new
THREE
.
Vector3
;
e
=
0
;
for
(
d
=
this
.
faces
.
length
;
e
<
d
;
e
++
){
f
=
this
.
faces
[
e
];
if
(
a
&&
f
.
vertexNormals
.
length
){
i
.
set
(
0
,
0
,
0
);
b
=
0
;
for
(
c
=
f
.
vertexNormals
.
length
;
b
<
c
;
b
++
)
i
.
addSelf
(
f
.
vertexNormals
[
b
]);
i
.
divideScalar
(
3
)}
else
{
b
=
this
.
vertices
[
f
.
a
];
c
=
this
.
vertices
[
f
.
b
];
g
=
this
.
vertices
[
f
.
c
];
i
.
sub
(
g
.
position
,
c
.
position
);
h
.
sub
(
b
.
position
,
c
.
position
);
i
.
crossSelf
(
h
)}
i
.
isZero
()
||
c
.
centroid
.
addSelf
(
this
.
vertices
[
c
.
d
].
position
);
c
.
centroid
.
divideScalar
(
4
)}}},
computeFaceNormals
:
function
(
a
){
var
b
,
c
,
e
,
d
,
f
,
g
,
i
=
new
THREE
.
Vector3
,
h
=
new
THREE
.
Vector3
;
e
=
0
;
for
(
d
=
this
.
faces
.
length
;
e
<
d
;
e
++
){
f
=
this
.
faces
[
e
];
if
(
a
&&
f
.
vertexNormals
.
length
){
i
.
set
(
0
,
0
,
0
);
b
=
0
;
for
(
c
=
f
.
vertexNormals
.
length
;
b
<
c
;
b
++
)
i
.
addSelf
(
f
.
vertexNormals
[
b
]);
i
.
divideScalar
(
3
)}
else
{
b
=
this
.
vertices
[
f
.
a
];
c
=
this
.
vertices
[
f
.
b
];
g
=
this
.
vertices
[
f
.
c
];
i
.
sub
(
g
.
position
,
c
.
position
);
h
.
sub
(
b
.
position
,
c
.
position
);
i
.
crossSelf
(
h
)}
i
.
isZero
()
||
i
.
normalize
();
f
.
normal
.
copy
(
i
)}},
computeVertexNormals
:
function
(){
var
a
,
b
,
c
,
e
;
if
(
this
.
__tmpVertices
==
undefined
){
e
=
this
.
__tmpVertices
=
Array
(
this
.
vertices
.
length
);
a
=
0
;
for
(
b
=
this
.
vertices
.
length
;
a
<
b
;
a
++
)
e
[
a
]
=
new
THREE
.
Vector3
;
a
=
0
;
for
(
b
=
this
.
faces
.
length
;
a
<
b
;
a
++
){
c
=
this
.
faces
[
a
];
if
(
c
instanceof
THREE
.
Face3
)
c
.
vertexNormals
=
[
new
THREE
.
Vector3
,
new
THREE
.
Vector3
,
new
THREE
.
Vector3
];
else
if
(
c
instanceof
THREE
.
Face4
)
c
.
vertexNormals
=
[
new
THREE
.
Vector3
,
new
THREE
.
Vector3
,
new
THREE
.
Vector3
,
new
THREE
.
Vector3
]}}
else
{
e
=
i
.
normalize
();
f
.
normal
.
copy
(
i
)}},
computeVertexNormals
:
function
(){
var
a
,
b
,
c
,
e
;
if
(
this
.
__tmpVertices
==
undefined
){
e
=
this
.
__tmpVertices
=
Array
(
this
.
vertices
.
length
);
a
=
0
;
for
(
b
=
this
.
vertices
.
length
;
a
<
b
;
a
++
)
e
[
a
]
=
new
THREE
.
Vector3
;
a
=
0
;
for
(
b
=
this
.
faces
.
length
;
a
<
b
;
a
++
){
c
=
this
.
faces
[
a
];
if
(
c
instanceof
THREE
.
Face3
)
c
.
vertexNormals
=
[
new
THREE
.
Vector3
,
new
THREE
.
Vector3
,
new
THREE
.
Vector3
];
else
if
(
c
instanceof
THREE
.
Face4
)
c
.
vertexNormals
=
[
new
THREE
.
Vector3
,
new
THREE
.
Vector3
,
new
THREE
.
Vector3
,
new
THREE
.
Vector3
]}}
else
{
e
=
...
...
build/custom/ThreeWebGL.js
浏览文件 @
db96a4a8
...
@@ -51,7 +51,7 @@ multiplyVector3:function(b,d){d||(d=b);var e=b.x,h=b.y,g=b.z,j=this.x,k=this.y,n
...
@@ -51,7 +51,7 @@ multiplyVector3:function(b,d){d||(d=b);var e=b.x,h=b.y,g=b.z,j=this.x,k=this.y,n
THREE
.
Quaternion
.
slerp
=
function
(
b
,
d
,
e
,
h
){
var
g
=
b
.
w
*
d
.
w
+
b
.
x
*
d
.
x
+
b
.
y
*
d
.
y
+
b
.
z
*
d
.
z
;
if
(
Math
.
abs
(
g
)
>=
1
){
e
.
w
=
b
.
w
;
e
.
x
=
b
.
x
;
e
.
y
=
b
.
y
;
e
.
z
=
b
.
z
;
return
e
}
var
j
=
Math
.
acos
(
g
),
k
=
Math
.
sqrt
(
1
-
g
*
g
);
if
(
Math
.
abs
(
k
)
<
0.0010
){
e
.
w
=
0.5
*
(
b
.
w
+
d
.
w
);
e
.
x
=
0.5
*
(
b
.
x
+
d
.
x
);
e
.
y
=
0.5
*
(
b
.
y
+
d
.
y
);
e
.
z
=
0.5
*
(
b
.
z
+
d
.
z
);
return
e
}
g
=
Math
.
sin
((
1
-
h
)
*
j
)
/
k
;
h
=
Math
.
sin
(
h
*
j
)
/
k
;
e
.
w
=
b
.
w
*
g
+
d
.
w
*
h
;
e
.
x
=
b
.
x
*
g
+
d
.
x
*
h
;
e
.
y
=
b
.
y
*
g
+
d
.
y
*
h
;
e
.
z
=
b
.
z
*
g
+
d
.
z
*
h
;
return
e
};
THREE
.
Vertex
=
function
(
b
){
this
.
position
=
b
||
new
THREE
.
Vector3
};
THREE
.
Quaternion
.
slerp
=
function
(
b
,
d
,
e
,
h
){
var
g
=
b
.
w
*
d
.
w
+
b
.
x
*
d
.
x
+
b
.
y
*
d
.
y
+
b
.
z
*
d
.
z
;
if
(
Math
.
abs
(
g
)
>=
1
){
e
.
w
=
b
.
w
;
e
.
x
=
b
.
x
;
e
.
y
=
b
.
y
;
e
.
z
=
b
.
z
;
return
e
}
var
j
=
Math
.
acos
(
g
),
k
=
Math
.
sqrt
(
1
-
g
*
g
);
if
(
Math
.
abs
(
k
)
<
0.0010
){
e
.
w
=
0.5
*
(
b
.
w
+
d
.
w
);
e
.
x
=
0.5
*
(
b
.
x
+
d
.
x
);
e
.
y
=
0.5
*
(
b
.
y
+
d
.
y
);
e
.
z
=
0.5
*
(
b
.
z
+
d
.
z
);
return
e
}
g
=
Math
.
sin
((
1
-
h
)
*
j
)
/
k
;
h
=
Math
.
sin
(
h
*
j
)
/
k
;
e
.
w
=
b
.
w
*
g
+
d
.
w
*
h
;
e
.
x
=
b
.
x
*
g
+
d
.
x
*
h
;
e
.
y
=
b
.
y
*
g
+
d
.
y
*
h
;
e
.
z
=
b
.
z
*
g
+
d
.
z
*
h
;
return
e
};
THREE
.
Vertex
=
function
(
b
){
this
.
position
=
b
||
new
THREE
.
Vector3
};
THREE
.
Face3
=
function
(
b
,
d
,
e
,
h
,
g
,
j
){
this
.
a
=
b
;
this
.
b
=
d
;
this
.
c
=
e
;
this
.
normal
=
h
instanceof
THREE
.
Vector3
?
h
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
h
instanceof
Array
?
h
:[];
this
.
color
=
g
instanceof
THREE
.
Color
?
g
:
new
THREE
.
Color
;
this
.
vertexColors
=
g
instanceof
Array
?
g
:[];
this
.
vertexTangents
=
[];
this
.
materials
=
j
instanceof
Array
?
j
:[
j
];
this
.
centroid
=
new
THREE
.
Vector3
};
THREE
.
Face3
=
function
(
b
,
d
,
e
,
h
,
g
,
j
){
this
.
a
=
b
;
this
.
b
=
d
;
this
.
c
=
e
;
this
.
normal
=
h
instanceof
THREE
.
Vector3
?
h
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
h
instanceof
Array
?
h
:[];
this
.
color
=
g
instanceof
THREE
.
Color
?
g
:
new
THREE
.
Color
;
this
.
vertexColors
=
g
instanceof
Array
?
g
:[];
this
.
vertexTangents
=
[];
this
.
materials
=
j
instanceof
Array
?
j
:[
j
];
this
.
centroid
=
new
THREE
.
Vector3
};
THREE
.
Face4
=
function
(
b
,
d
,
e
,
h
,
g
,
j
,
k
){
this
.
a
=
b
;
this
.
b
=
d
;
this
.
c
=
e
;
this
.
d
=
h
;
this
.
normal
=
g
instanceof
THREE
.
Vector3
?
g
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
g
instanceof
Array
?
g
:[];
this
.
color
=
j
instanceof
THREE
.
Color
?
j
:
new
THREE
.
Color
;
this
.
vertexColors
=
j
instanceof
Array
?
j
:[];
this
.
vertexTangents
=
[];
this
.
materials
=
k
instanceof
Array
?
k
:[
k
];
this
.
centroid
=
new
THREE
.
Vector3
};
THREE
.
UV
=
function
(
b
,
d
){
this
.
set
(
b
||
0
,
d
||
0
)};
THREE
.
Face4
=
function
(
b
,
d
,
e
,
h
,
g
,
j
,
k
){
this
.
a
=
b
;
this
.
b
=
d
;
this
.
c
=
e
;
this
.
d
=
h
;
this
.
normal
=
g
instanceof
THREE
.
Vector3
?
g
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
g
instanceof
Array
?
g
:[];
this
.
color
=
j
instanceof
THREE
.
Color
?
j
:
new
THREE
.
Color
;
this
.
vertexColors
=
j
instanceof
Array
?
j
:[];
this
.
vertexTangents
=
[];
this
.
materials
=
k
instanceof
Array
?
k
:[
k
];
this
.
centroid
=
new
THREE
.
Vector3
};
THREE
.
UV
=
function
(
b
,
d
){
this
.
set
(
b
||
0
,
d
||
0
)};
THREE
.
UV
.
prototype
=
{
set
:
function
(
b
,
d
){
this
.
u
=
b
;
this
.
v
=
d
;
return
this
},
copy
:
function
(
b
){
this
.
set
(
b
.
u
,
b
.
v
);
return
this
}};
THREE
.
Geometry
=
function
(){
this
.
id
=
"
Geometry
"
+
THREE
.
GeometryIdCounter
++
;
this
.
vertices
=
[];
this
.
colors
=
[];
this
.
faces
=
[];
this
.
faceUvs
=
[[]];
this
.
faceVertexUvs
=
[[]];
this
.
morphTargets
=
[];
this
.
skinWeights
=
[];
this
.
skinIndices
=
[];
this
.
boundingSphere
=
this
.
boundingBox
=
null
;
this
.
hasTangents
=!
1
};
THREE
.
UV
.
prototype
=
{
set
:
function
(
b
,
d
){
this
.
u
=
b
;
this
.
v
=
d
;
return
this
},
copy
:
function
(
b
){
this
.
set
(
b
.
u
,
b
.
v
);
return
this
}};
THREE
.
Geometry
=
function
(){
this
.
id
=
"
Geometry
"
+
THREE
.
GeometryIdCounter
++
;
this
.
vertices
=
[];
this
.
colors
=
[];
this
.
faces
=
[];
this
.
faceUvs
=
[[]];
this
.
faceVertexUvs
=
[[]];
this
.
morphTargets
=
[];
this
.
morphColors
=
[];
this
.
skinWeights
=
[];
this
.
skinIndices
=
[];
this
.
boundingSphere
=
this
.
boundingBox
=
null
;
this
.
hasTangents
=!
1
};
THREE
.
Geometry
.
prototype
=
{
computeCentroids
:
function
(){
var
b
,
d
,
e
;
b
=
0
;
for
(
d
=
this
.
faces
.
length
;
b
<
d
;
b
++
){
e
=
this
.
faces
[
b
];
e
.
centroid
.
set
(
0
,
0
,
0
);
if
(
e
instanceof
THREE
.
Face3
){
e
.
centroid
.
addSelf
(
this
.
vertices
[
e
.
a
].
position
);
e
.
centroid
.
addSelf
(
this
.
vertices
[
e
.
b
].
position
);
e
.
centroid
.
addSelf
(
this
.
vertices
[
e
.
c
].
position
);
e
.
centroid
.
divideScalar
(
3
)}
else
if
(
e
instanceof
THREE
.
Face4
){
e
.
centroid
.
addSelf
(
this
.
vertices
[
e
.
a
].
position
);
e
.
centroid
.
addSelf
(
this
.
vertices
[
e
.
b
].
position
);
e
.
centroid
.
addSelf
(
this
.
vertices
[
e
.
c
].
position
);
THREE
.
Geometry
.
prototype
=
{
computeCentroids
:
function
(){
var
b
,
d
,
e
;
b
=
0
;
for
(
d
=
this
.
faces
.
length
;
b
<
d
;
b
++
){
e
=
this
.
faces
[
b
];
e
.
centroid
.
set
(
0
,
0
,
0
);
if
(
e
instanceof
THREE
.
Face3
){
e
.
centroid
.
addSelf
(
this
.
vertices
[
e
.
a
].
position
);
e
.
centroid
.
addSelf
(
this
.
vertices
[
e
.
b
].
position
);
e
.
centroid
.
addSelf
(
this
.
vertices
[
e
.
c
].
position
);
e
.
centroid
.
divideScalar
(
3
)}
else
if
(
e
instanceof
THREE
.
Face4
){
e
.
centroid
.
addSelf
(
this
.
vertices
[
e
.
a
].
position
);
e
.
centroid
.
addSelf
(
this
.
vertices
[
e
.
b
].
position
);
e
.
centroid
.
addSelf
(
this
.
vertices
[
e
.
c
].
position
);
e
.
centroid
.
addSelf
(
this
.
vertices
[
e
.
d
].
position
);
e
.
centroid
.
divideScalar
(
4
)}}},
computeFaceNormals
:
function
(
b
){
var
d
,
e
,
h
,
g
,
j
,
k
,
n
=
new
THREE
.
Vector3
,
p
=
new
THREE
.
Vector3
;
h
=
0
;
for
(
g
=
this
.
faces
.
length
;
h
<
g
;
h
++
){
j
=
this
.
faces
[
h
];
if
(
b
&&
j
.
vertexNormals
.
length
){
n
.
set
(
0
,
0
,
0
);
d
=
0
;
for
(
e
=
j
.
vertexNormals
.
length
;
d
<
e
;
d
++
)
n
.
addSelf
(
j
.
vertexNormals
[
d
]);
n
.
divideScalar
(
3
)}
else
{
d
=
this
.
vertices
[
j
.
a
];
e
=
this
.
vertices
[
j
.
b
];
k
=
this
.
vertices
[
j
.
c
];
n
.
sub
(
k
.
position
,
e
.
position
);
p
.
sub
(
d
.
position
,
e
.
position
);
n
.
crossSelf
(
p
)}
n
.
isZero
()
||
e
.
centroid
.
addSelf
(
this
.
vertices
[
e
.
d
].
position
);
e
.
centroid
.
divideScalar
(
4
)}}},
computeFaceNormals
:
function
(
b
){
var
d
,
e
,
h
,
g
,
j
,
k
,
n
=
new
THREE
.
Vector3
,
p
=
new
THREE
.
Vector3
;
h
=
0
;
for
(
g
=
this
.
faces
.
length
;
h
<
g
;
h
++
){
j
=
this
.
faces
[
h
];
if
(
b
&&
j
.
vertexNormals
.
length
){
n
.
set
(
0
,
0
,
0
);
d
=
0
;
for
(
e
=
j
.
vertexNormals
.
length
;
d
<
e
;
d
++
)
n
.
addSelf
(
j
.
vertexNormals
[
d
]);
n
.
divideScalar
(
3
)}
else
{
d
=
this
.
vertices
[
j
.
a
];
e
=
this
.
vertices
[
j
.
b
];
k
=
this
.
vertices
[
j
.
c
];
n
.
sub
(
k
.
position
,
e
.
position
);
p
.
sub
(
d
.
position
,
e
.
position
);
n
.
crossSelf
(
p
)}
n
.
isZero
()
||
n
.
normalize
();
j
.
normal
.
copy
(
n
)}},
computeVertexNormals
:
function
(){
var
b
,
d
,
e
,
h
;
if
(
this
.
__tmpVertices
==
undefined
){
h
=
this
.
__tmpVertices
=
Array
(
this
.
vertices
.
length
);
b
=
0
;
for
(
d
=
this
.
vertices
.
length
;
b
<
d
;
b
++
)
h
[
b
]
=
new
THREE
.
Vector3
;
b
=
0
;
for
(
d
=
this
.
faces
.
length
;
b
<
d
;
b
++
){
e
=
this
.
faces
[
b
];
if
(
e
instanceof
THREE
.
Face3
)
e
.
vertexNormals
=
[
new
THREE
.
Vector3
,
new
THREE
.
Vector3
,
new
THREE
.
Vector3
];
else
if
(
e
instanceof
THREE
.
Face4
)
e
.
vertexNormals
=
[
new
THREE
.
Vector3
,
new
THREE
.
Vector3
,
new
THREE
.
Vector3
,
new
THREE
.
Vector3
]}}
else
{
h
=
n
.
normalize
();
j
.
normal
.
copy
(
n
)}},
computeVertexNormals
:
function
(){
var
b
,
d
,
e
,
h
;
if
(
this
.
__tmpVertices
==
undefined
){
h
=
this
.
__tmpVertices
=
Array
(
this
.
vertices
.
length
);
b
=
0
;
for
(
d
=
this
.
vertices
.
length
;
b
<
d
;
b
++
)
h
[
b
]
=
new
THREE
.
Vector3
;
b
=
0
;
for
(
d
=
this
.
faces
.
length
;
b
<
d
;
b
++
){
e
=
this
.
faces
[
b
];
if
(
e
instanceof
THREE
.
Face3
)
e
.
vertexNormals
=
[
new
THREE
.
Vector3
,
new
THREE
.
Vector3
,
new
THREE
.
Vector3
];
else
if
(
e
instanceof
THREE
.
Face4
)
e
.
vertexNormals
=
[
new
THREE
.
Vector3
,
new
THREE
.
Vector3
,
new
THREE
.
Vector3
,
new
THREE
.
Vector3
]}}
else
{
h
=
...
...
src/core/Geometry.js
浏览文件 @
db96a4a8
...
@@ -18,6 +18,7 @@ THREE.Geometry = function () {
...
@@ -18,6 +18,7 @@ THREE.Geometry = function () {
this
.
faceVertexUvs
=
[[]];
this
.
faceVertexUvs
=
[[]];
this
.
morphTargets
=
[];
this
.
morphTargets
=
[];
this
.
morphColors
=
[];
this
.
skinWeights
=
[];
this
.
skinWeights
=
[];
this
.
skinIndices
=
[];
this
.
skinIndices
=
[];
...
...
src/extras/io/JSONLoader.js
浏览文件 @
db96a4a8
...
@@ -326,7 +326,7 @@ THREE.JSONLoader.prototype.createModel = function ( json, callback, texture_path
...
@@ -326,7 +326,7 @@ THREE.JSONLoader.prototype.createModel = function ( json, callback, texture_path
if
(
json
.
morphTargets
!==
undefined
)
{
if
(
json
.
morphTargets
!==
undefined
)
{
var
i
,
l
,
v
,
vl
;
var
i
,
l
,
v
,
vl
,
dstVertices
,
srcVertices
;
for
(
i
=
0
,
l
=
json
.
morphTargets
.
length
;
i
<
l
;
i
++
)
{
for
(
i
=
0
,
l
=
json
.
morphTargets
.
length
;
i
<
l
;
i
++
)
{
...
@@ -346,6 +346,31 @@ THREE.JSONLoader.prototype.createModel = function ( json, callback, texture_path
...
@@ -346,6 +346,31 @@ THREE.JSONLoader.prototype.createModel = function ( json, callback, texture_path
}
}
}
}
if
(
json
.
morphColors
!==
undefined
)
{
var
i
,
l
,
c
,
cl
,
dstColors
,
srcColors
,
color
;
for
(
i
=
0
,
l
=
json
.
morphColors
.
length
;
i
<
l
;
i
++
)
{
geometry
.
morphColors
[
i
]
=
{};
geometry
.
morphColors
[
i
].
name
=
json
.
morphColors
[
i
].
name
;
geometry
.
morphColors
[
i
].
colors
=
[];
dstColors
=
geometry
.
morphColors
[
i
].
colors
;
srcColors
=
json
.
morphColors
[
i
].
colors
;
for
(
c
=
0
,
cl
=
srcColors
.
length
;
c
<
cl
;
c
+=
3
)
{
color
=
new
THREE
.
Color
(
0xffaa00
);
color
.
setRGB
(
srcColors
[
v
],
srcColors
[
v
+
1
],
srcColors
[
v
+
2
]
);
dstColors
.
push
(
color
);
}
}
}
};
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录