Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
3c98b094
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,发现更多精彩内容 >>
提交
3c98b094
编写于
4月 06, 2012
作者:
A
alteredq
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fixed bug in quad tessellation in geometry.computeTangents.
Should fix issue #1647
上级
433f6b35
变更
7
展开全部
隐藏空白更改
内联
并排
Showing
7 changed file
with
89 addition
and
88 deletion
+89
-88
build/Three.js
build/Three.js
+63
-63
build/custom/ThreeCanvas.js
build/custom/ThreeCanvas.js
+2
-2
build/custom/ThreeDOM.js
build/custom/ThreeDOM.js
+1
-1
build/custom/ThreeExtras.js
build/custom/ThreeExtras.js
+17
-16
build/custom/ThreeSVG.js
build/custom/ThreeSVG.js
+2
-2
build/custom/ThreeWebGL.js
build/custom/ThreeWebGL.js
+3
-3
src/core/Geometry.js
src/core/Geometry.js
+1
-1
未找到文件。
build/Three.js
浏览文件 @
3c98b094
此差异已折叠。
点击以展开。
build/custom/ThreeCanvas.js
浏览文件 @
3c98b094
...
...
@@ -80,7 +80,7 @@ this.x=a.x*d;this.y=a.y*d;this.z=a.z*d;this.w=Math.cos(c);return this},setFromRo
this
.
normalize
();
return
this
},
calculateW
:
function
(){
this
.
w
=-
Math
.
sqrt
(
Math
.
abs
(
1
-
this
.
x
*
this
.
x
-
this
.
y
*
this
.
y
-
this
.
z
*
this
.
z
));
return
this
},
inverse
:
function
(){
this
.
x
*=-
1
;
this
.
y
*=-
1
;
this
.
z
*=-
1
;
return
this
},
length
:
function
(){
return
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
+
this
.
z
*
this
.
z
+
this
.
w
*
this
.
w
)},
normalize
:
function
(){
var
a
=
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
+
this
.
z
*
this
.
z
+
this
.
w
*
this
.
w
);
0
===
a
?
this
.
w
=
this
.
z
=
this
.
y
=
this
.
x
=
0
:(
a
=
1
/
a
,
this
.
x
*=
a
,
this
.
y
*=
a
,
this
.
z
*=
a
,
this
.
w
*=
a
);
return
this
},
multiply
:
function
(
a
,
b
){
this
.
x
=
a
.
x
*
b
.
w
+
a
.
y
*
b
.
z
-
a
.
z
*
b
.
y
+
a
.
w
*
b
.
x
;
this
.
y
=-
a
.
x
*
b
.
z
+
a
.
y
*
b
.
w
+
a
.
z
*
b
.
x
+
a
.
w
*
b
.
y
;
this
.
z
=
a
.
x
*
b
.
y
-
a
.
y
*
b
.
x
+
a
.
z
*
b
.
w
+
a
.
w
*
b
.
z
;
this
.
w
=-
a
.
x
*
b
.
x
-
a
.
y
*
b
.
y
-
a
.
z
*
b
.
z
+
a
.
w
*
b
.
w
;
return
this
},
multiplySelf
:
function
(
a
){
var
b
=
this
.
x
,
c
=
this
.
y
,
d
=
this
.
z
,
e
=
this
.
w
,
f
=
a
.
x
,
g
=
a
.
y
,
h
=
a
.
z
,
a
=
a
.
w
;
this
.
x
=
b
*
a
+
e
*
f
+
c
*
h
-
d
*
g
;
this
.
y
=
c
*
a
+
e
*
g
+
d
*
f
-
b
*
h
;
this
.
z
=
d
*
a
+
e
*
h
+
b
*
g
-
c
*
f
;
this
.
w
=
e
*
a
-
b
*
f
-
c
*
g
-
d
*
h
;
return
this
},
multiplyVector3
:
function
(
a
,
b
){
b
||
(
b
=
a
);
var
c
=
a
.
x
,
d
=
a
.
y
,
e
=
a
.
z
,
f
=
this
.
x
,
g
=
this
.
y
,
h
=
this
.
z
,
l
=
this
.
w
,
i
=
l
*
c
+
g
*
e
-
h
*
d
,
j
=
l
*
d
+
h
*
c
-
f
*
e
,
n
=
l
*
e
+
f
*
d
-
g
*
c
,
c
=-
f
*
c
-
g
*
d
-
h
*
e
;
b
.
x
=
i
*
l
+
c
*-
f
+
j
*-
h
-
n
*-
g
;
b
.
y
=
j
*
l
+
c
*-
g
+
n
*-
f
-
i
*-
h
;
b
.
z
=
n
*
l
+
c
*-
h
+
i
*-
g
-
j
*-
f
;
return
b
},
clone
:
function
(){
return
new
THREE
.
Quaternion
(
this
.
x
,
this
.
y
,
this
.
z
,
this
.
w
)}};
THREE
.
Quaternion
.
slerp
=
function
(
a
,
b
,
c
,
d
){
var
e
=
a
.
w
*
b
.
w
+
a
.
x
*
b
.
x
+
a
.
y
*
b
.
y
+
a
.
z
*
b
.
z
;
0
>
e
?(
c
.
w
=-
b
.
w
,
c
.
x
=-
b
.
x
,
c
.
y
=-
b
.
y
,
c
.
z
=-
b
.
z
,
e
=-
e
):
c
.
copy
(
b
);
if
(
1
<=
Math
.
abs
(
e
))
return
c
.
w
=
a
.
w
,
c
.
x
=
a
.
x
,
c
.
y
=
a
.
y
,
c
.
z
=
a
.
z
,
c
;
var
f
=
Math
.
acos
(
e
),
e
=
Math
.
sqrt
(
1
-
e
*
e
);
if
(
0.001
>
Math
.
abs
(
e
))
return
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
),
c
;
b
=
Math
.
sin
((
1
-
d
)
*
f
)
/
e
;
d
=
Math
.
sin
(
d
*
f
)
/
e
;
c
.
w
=
a
.
w
*
b
+
c
.
w
*
d
;
c
.
x
=
a
.
x
*
b
+
c
.
x
*
d
;
c
.
y
=
a
.
y
*
b
+
c
.
y
*
d
;
c
.
z
=
a
.
z
*
b
+
c
.
z
*
d
;
return
c
};
THREE
.
Vertex
=
function
(
a
){
this
.
position
=
a
||
new
THREE
.
Vector3
};
THREE
.
Quaternion
.
slerp
=
function
(
a
,
b
,
c
,
d
){
var
e
=
a
.
w
*
b
.
w
+
a
.
x
*
b
.
x
+
a
.
y
*
b
.
y
+
a
.
z
*
b
.
z
;
0
>
e
?(
c
.
w
=-
b
.
w
,
c
.
x
=-
b
.
x
,
c
.
y
=-
b
.
y
,
c
.
z
=-
b
.
z
,
e
=-
e
):
c
.
copy
(
b
);
if
(
1
<=
Math
.
abs
(
e
))
return
c
.
w
=
a
.
w
,
c
.
x
=
a
.
x
,
c
.
y
=
a
.
y
,
c
.
z
=
a
.
z
,
c
;
var
f
=
Math
.
acos
(
e
),
e
=
Math
.
sqrt
(
1
-
e
*
e
);
if
(
0.001
0
>
Math
.
abs
(
e
))
return
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
),
c
;
b
=
Math
.
sin
((
1
-
d
)
*
f
)
/
e
;
d
=
Math
.
sin
(
d
*
f
)
/
e
;
c
.
w
=
a
.
w
*
b
+
c
.
w
*
d
;
c
.
x
=
a
.
x
*
b
+
c
.
x
*
d
;
c
.
y
=
a
.
y
*
b
+
c
.
y
*
d
;
c
.
z
=
a
.
z
*
b
+
c
.
z
*
d
;
return
c
};
THREE
.
Vertex
=
function
(
a
){
this
.
position
=
a
||
new
THREE
.
Vector3
};
THREE
.
Vertex
.
prototype
=
{
constructor
:
THREE
.
Vertex
,
clone
:
function
(){
return
new
THREE
.
Vertex
(
this
.
position
.
clone
())}};
THREE
.
Face3
=
function
(
a
,
b
,
c
,
d
,
e
,
f
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
normal
=
d
instanceof
THREE
.
Vector3
?
d
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
d
instanceof
Array
?
d
:[];
this
.
color
=
e
instanceof
THREE
.
Color
?
e
:
new
THREE
.
Color
;
this
.
vertexColors
=
e
instanceof
Array
?
e
:[];
this
.
vertexTangents
=
[];
this
.
materialIndex
=
f
;
this
.
centroid
=
new
THREE
.
Vector3
};
THREE
.
Face3
.
prototype
=
{
constructor
:
THREE
.
Face3
,
clone
:
function
(){
var
a
=
new
THREE
.
Face3
(
this
.
a
,
this
.
b
,
this
.
c
);
a
.
normal
.
copy
(
this
.
normal
);
a
.
color
.
copy
(
this
.
color
);
a
.
centroid
.
copy
(
this
.
centroid
);
a
.
materialIndex
=
this
.
materialIndex
;
var
b
,
c
;
for
(
b
=
0
,
c
=
this
.
vertexNormals
.
length
;
b
<
c
;
b
++
)
a
.
vertexNormals
[
b
]
=
this
.
vertexNormals
[
b
].
clone
();
for
(
b
=
0
,
c
=
this
.
vertexColors
.
length
;
b
<
c
;
b
++
)
a
.
vertexColors
[
b
]
=
this
.
vertexColors
[
b
].
clone
();
for
(
b
=
0
,
c
=
this
.
vertexTangents
.
length
;
b
<
c
;
b
++
)
a
.
vertexTangents
[
b
]
=
this
.
vertexTangents
[
b
].
clone
();
return
a
}};
THREE
.
Face4
=
function
(
a
,
b
,
c
,
d
,
e
,
f
,
g
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
d
=
d
;
this
.
normal
=
e
instanceof
THREE
.
Vector3
?
e
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
e
instanceof
Array
?
e
:[];
this
.
color
=
f
instanceof
THREE
.
Color
?
f
:
new
THREE
.
Color
;
this
.
vertexColors
=
f
instanceof
Array
?
f
:[];
this
.
vertexTangents
=
[];
this
.
materialIndex
=
g
;
this
.
centroid
=
new
THREE
.
Vector3
};
...
...
@@ -96,7 +96,7 @@ d;c++){e=this.faces[c];e.__originalFaceNormal?e.__originalFaceNormal.copy(e.norm
this
.
morphNormals
[
a
].
faceNormals
=
[];
this
.
morphNormals
[
a
].
vertexNormals
=
[];
var
g
=
this
.
morphNormals
[
a
].
faceNormals
,
h
=
this
.
morphNormals
[
a
].
vertexNormals
,
l
,
i
;
for
(
c
=
0
,
d
=
this
.
faces
.
length
;
c
<
d
;
c
++
)
e
=
this
.
faces
[
c
],
l
=
new
THREE
.
Vector3
,
i
=
e
instanceof
THREE
.
Face3
?{
a
:
new
THREE
.
Vector3
,
b
:
new
THREE
.
Vector3
,
c
:
new
THREE
.
Vector3
}:{
a
:
new
THREE
.
Vector3
,
b
:
new
THREE
.
Vector3
,
c
:
new
THREE
.
Vector3
,
d
:
new
THREE
.
Vector3
},
g
.
push
(
l
),
h
.
push
(
i
)}
g
=
this
.
morphNormals
[
a
];
f
.
vertices
=
this
.
morphTargets
[
a
].
vertices
;
f
.
computeFaceNormals
();
f
.
computeVertexNormals
();
for
(
c
=
0
,
d
=
this
.
faces
.
length
;
c
<
d
;
c
++
)
e
=
this
.
faces
[
c
],
l
=
g
.
faceNormals
[
c
],
i
=
g
.
vertexNormals
[
c
],
l
.
copy
(
e
.
normal
),
e
instanceof
THREE
.
Face3
?(
i
.
a
.
copy
(
e
.
vertexNormals
[
0
]),
i
.
b
.
copy
(
e
.
vertexNormals
[
1
]),
i
.
c
.
copy
(
e
.
vertexNormals
[
2
])):(
i
.
a
.
copy
(
e
.
vertexNormals
[
0
]),
i
.
b
.
copy
(
e
.
vertexNormals
[
1
]),
i
.
c
.
copy
(
e
.
vertexNormals
[
2
]),
i
.
d
.
copy
(
e
.
vertexNormals
[
3
]))}
for
(
c
=
0
,
d
=
this
.
faces
.
length
;
c
<
d
;
c
++
)
e
=
this
.
faces
[
c
],
e
.
normal
=
e
.
__originalFaceNormal
,
e
.
vertexNormals
=
e
.
__originalVertexNormals
},
computeTangents
:
function
(){
function
a
(
a
,
b
,
c
,
d
,
e
,
f
,
A
){
h
=
a
.
vertices
[
b
].
position
;
l
=
a
.
vertices
[
c
].
position
;
i
=
a
.
vertices
[
d
].
position
;
j
=
g
[
e
];
n
=
g
[
f
];
m
=
g
[
A
];
o
=
l
.
x
-
h
.
x
;
p
=
i
.
x
-
h
.
x
;
k
=
l
.
y
-
h
.
y
;
u
=
i
.
y
-
h
.
y
;
H
=
l
.
z
-
h
.
z
;
C
=
i
.
z
-
h
.
z
;
L
=
n
.
u
-
j
.
u
;
G
=
m
.
u
-
j
.
u
;
t
=
n
.
v
-
j
.
v
;
E
=
m
.
v
-
j
.
v
;
z
=
1
/
(
L
*
E
-
G
*
t
);
y
.
set
((
E
*
o
-
t
*
p
)
*
z
,(
E
*
k
-
t
*
u
)
*
z
,(
E
*
H
-
t
*
C
)
*
z
);
K
.
set
((
L
*
p
-
G
*
o
)
*
z
,(
L
*
u
-
G
*
k
)
*
z
,(
L
*
C
-
G
*
H
)
*
z
);
r
[
b
].
addSelf
(
y
);
r
[
c
].
addSelf
(
y
);
r
[
d
].
addSelf
(
y
);
v
[
b
].
addSelf
(
K
);
v
[
c
].
addSelf
(
K
);
v
[
d
].
addSelf
(
K
)}
var
b
,
c
,
d
,
e
,
f
,
g
,
h
,
l
,
i
,
j
,
n
,
m
,
o
,
p
,
k
,
u
,
H
,
C
,
L
,
G
,
t
,
E
,
z
,
F
,
r
=
[],
v
=
[],
y
=
new
THREE
.
Vector3
,
K
=
new
THREE
.
Vector3
,
$
=
new
THREE
.
Vector3
,
da
=
new
THREE
.
Vector3
,
O
=
new
THREE
.
Vector3
;
for
(
b
=
0
,
c
=
this
.
vertices
.
length
;
b
<
c
;
b
++
)
r
[
b
]
=
new
THREE
.
Vector3
,
v
[
b
]
=
new
THREE
.
Vector3
;
for
(
b
=
0
,
c
=
this
.
faces
.
length
;
b
<
c
;
b
++
)
f
=
this
.
faces
[
b
],
g
=
this
.
faceVertexUvs
[
0
][
b
],
f
instanceof
THREE
.
Face3
?
a
(
this
,
f
.
a
,
f
.
b
,
f
.
c
,
0
,
1
,
2
):
f
instanceof
THREE
.
Face4
&&
(
a
(
this
,
f
.
a
,
f
.
b
,
f
.
c
,
0
,
1
,
2
),
a
(
this
,
f
.
a
,
f
.
b
,
f
.
d
,
0
,
1
,
3
));
var
I
=
[
"
a
"
,
"
b
"
,
"
c
"
,
"
d
"
];
for
(
b
=
0
,
c
=
this
.
faces
.
length
;
b
<
c
;
b
++
){
f
=
this
.
faces
[
b
];
for
(
d
=
0
;
d
<
f
.
vertexNormals
.
length
;
d
++
)
O
.
copy
(
f
.
vertexNormals
[
d
]),
e
=
f
[
I
[
d
]],
$
=
new
THREE
.
Vector3
,
da
=
new
THREE
.
Vector3
,
O
=
new
THREE
.
Vector3
;
for
(
b
=
0
,
c
=
this
.
vertices
.
length
;
b
<
c
;
b
++
)
r
[
b
]
=
new
THREE
.
Vector3
,
v
[
b
]
=
new
THREE
.
Vector3
;
for
(
b
=
0
,
c
=
this
.
faces
.
length
;
b
<
c
;
b
++
)
f
=
this
.
faces
[
b
],
g
=
this
.
faceVertexUvs
[
0
][
b
],
f
instanceof
THREE
.
Face3
?
a
(
this
,
f
.
a
,
f
.
b
,
f
.
c
,
0
,
1
,
2
):
f
instanceof
THREE
.
Face4
&&
(
a
(
this
,
f
.
a
,
f
.
b
,
f
.
d
,
0
,
1
,
3
),
a
(
this
,
f
.
b
,
f
.
c
,
f
.
d
,
1
,
2
,
3
));
var
I
=
[
"
a
"
,
"
b
"
,
"
c
"
,
"
d
"
];
for
(
b
=
0
,
c
=
this
.
faces
.
length
;
b
<
c
;
b
++
){
f
=
this
.
faces
[
b
];
for
(
d
=
0
;
d
<
f
.
vertexNormals
.
length
;
d
++
)
O
.
copy
(
f
.
vertexNormals
[
d
]),
e
=
f
[
I
[
d
]],
F
=
r
[
e
],
$
.
copy
(
F
),
$
.
subSelf
(
O
.
multiplyScalar
(
O
.
dot
(
F
))).
normalize
(),
da
.
cross
(
f
.
vertexNormals
[
d
],
F
),
e
=
da
.
dot
(
v
[
e
]),
e
=
0
>
e
?
-
1
:
1
,
f
.
vertexTangents
[
d
]
=
new
THREE
.
Vector4
(
$
.
x
,
$
.
y
,
$
.
z
,
e
)}
this
.
hasTangents
=!
0
},
computeBoundingBox
:
function
(){
if
(
!
this
.
boundingBox
)
this
.
boundingBox
=
{
min
:
new
THREE
.
Vector3
,
max
:
new
THREE
.
Vector3
};
if
(
0
<
this
.
vertices
.
length
){
var
a
;
a
=
this
.
vertices
[
0
].
position
;
this
.
boundingBox
.
min
.
copy
(
a
);
this
.
boundingBox
.
max
.
copy
(
a
);
for
(
var
b
=
this
.
boundingBox
.
min
,
c
=
this
.
boundingBox
.
max
,
d
=
1
,
e
=
this
.
vertices
.
length
;
d
<
e
;
d
++
){
a
=
this
.
vertices
[
d
].
position
;
if
(
a
.
x
<
b
.
x
)
b
.
x
=
a
.
x
;
else
if
(
a
.
x
>
c
.
x
)
c
.
x
=
a
.
x
;
if
(
a
.
y
<
b
.
y
)
b
.
y
=
a
.
y
;
else
if
(
a
.
y
>
c
.
y
)
c
.
y
=
a
.
y
;
if
(
a
.
z
<
b
.
z
)
b
.
z
=
a
.
z
;
else
if
(
a
.
z
>
c
.
z
)
c
.
z
=
a
.
z
}}
else
this
.
boundingBox
.
min
.
set
(
0
,
0
,
0
),
this
.
boundingBox
.
max
.
set
(
0
,
0
,
0
)},
computeBoundingSphere
:
function
(){
if
(
!
this
.
boundingSphere
)
this
.
boundingSphere
=
{
radius
:
0
};
for
(
var
a
,
b
=
0
,
c
=
0
,
d
=
this
.
vertices
.
length
;
c
<
d
;
c
++
)
a
=
this
.
vertices
[
c
].
position
.
length
(),
a
>
b
&&
(
b
=
a
);
this
.
boundingSphere
.
radius
=
b
},
mergeVertices
:
function
(){
var
a
=
{},
b
=
[],
c
=
[],
d
,
e
=
Math
.
pow
(
10
,
4
),
f
,
g
;
for
(
f
=
0
,
g
=
this
.
vertices
.
length
;
f
<
g
;
f
++
)
d
=
this
.
vertices
[
f
].
position
,
d
=
[
Math
.
round
(
d
.
x
*
e
),
Math
.
round
(
d
.
y
*
e
),
Math
.
round
(
d
.
z
*
e
)].
join
(
"
_
"
),
void
0
===
a
[
d
]?(
a
[
d
]
=
f
,
b
.
push
(
this
.
vertices
[
f
]),
c
[
f
]
=
b
.
length
-
1
):
c
[
f
]
=
c
[
a
[
d
]];
for
(
f
=
0
,
g
=
this
.
faces
.
length
;
f
<
g
;
f
++
)
if
(
a
=
this
.
faces
[
f
],
a
instanceof
THREE
.
Face3
)
a
.
a
=
c
[
a
.
a
],
a
.
b
=
c
[
a
.
b
],
a
.
c
=
c
[
a
.
c
];
else
if
(
a
instanceof
THREE
.
Face4
)
a
.
a
=
c
[
a
.
a
],
a
.
b
=
c
[
a
.
b
],
a
.
c
=
c
[
a
.
c
],
a
.
d
=
c
[
a
.
d
];
this
.
vertices
=
b
}};
THREE
.
GeometryCount
=
0
;
...
...
build/custom/ThreeDOM.js
浏览文件 @
3c98b094
...
...
@@ -79,7 +79,7 @@ this.x=a.x*d;this.y=a.y*d;this.z=a.z*d;this.w=Math.cos(c);return this},setFromRo
this
.
normalize
();
return
this
},
calculateW
:
function
(){
this
.
w
=-
Math
.
sqrt
(
Math
.
abs
(
1
-
this
.
x
*
this
.
x
-
this
.
y
*
this
.
y
-
this
.
z
*
this
.
z
));
return
this
},
inverse
:
function
(){
this
.
x
*=-
1
;
this
.
y
*=-
1
;
this
.
z
*=-
1
;
return
this
},
length
:
function
(){
return
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
+
this
.
z
*
this
.
z
+
this
.
w
*
this
.
w
)},
normalize
:
function
(){
var
a
=
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
+
this
.
z
*
this
.
z
+
this
.
w
*
this
.
w
);
0
===
a
?
this
.
w
=
this
.
z
=
this
.
y
=
this
.
x
=
0
:(
a
=
1
/
a
,
this
.
x
*=
a
,
this
.
y
*=
a
,
this
.
z
*=
a
,
this
.
w
*=
a
);
return
this
},
multiply
:
function
(
a
,
b
){
this
.
x
=
a
.
x
*
b
.
w
+
a
.
y
*
b
.
z
-
a
.
z
*
b
.
y
+
a
.
w
*
b
.
x
;
this
.
y
=-
a
.
x
*
b
.
z
+
a
.
y
*
b
.
w
+
a
.
z
*
b
.
x
+
a
.
w
*
b
.
y
;
this
.
z
=
a
.
x
*
b
.
y
-
a
.
y
*
b
.
x
+
a
.
z
*
b
.
w
+
a
.
w
*
b
.
z
;
this
.
w
=-
a
.
x
*
b
.
x
-
a
.
y
*
b
.
y
-
a
.
z
*
b
.
z
+
a
.
w
*
b
.
w
;
return
this
},
multiplySelf
:
function
(
a
){
var
b
=
this
.
x
,
c
=
this
.
y
,
d
=
this
.
z
,
e
=
this
.
w
,
f
=
a
.
x
,
g
=
a
.
y
,
h
=
a
.
z
,
a
=
a
.
w
;
this
.
x
=
b
*
a
+
e
*
f
+
c
*
h
-
d
*
g
;
this
.
y
=
c
*
a
+
e
*
g
+
d
*
f
-
b
*
h
;
this
.
z
=
d
*
a
+
e
*
h
+
b
*
g
-
c
*
f
;
this
.
w
=
e
*
a
-
b
*
f
-
c
*
g
-
d
*
h
;
return
this
},
multiplyVector3
:
function
(
a
,
b
){
b
||
(
b
=
a
);
var
c
=
a
.
x
,
d
=
a
.
y
,
e
=
a
.
z
,
f
=
this
.
x
,
g
=
this
.
y
,
h
=
this
.
z
,
k
=
this
.
w
,
i
=
k
*
c
+
g
*
e
-
h
*
d
,
j
=
k
*
d
+
h
*
c
-
f
*
e
,
l
=
k
*
e
+
f
*
d
-
g
*
c
,
c
=-
f
*
c
-
g
*
d
-
h
*
e
;
b
.
x
=
i
*
k
+
c
*-
f
+
j
*-
h
-
l
*-
g
;
b
.
y
=
j
*
k
+
c
*-
g
+
l
*-
f
-
i
*-
h
;
b
.
z
=
l
*
k
+
c
*-
h
+
i
*-
g
-
j
*-
f
;
return
b
},
clone
:
function
(){
return
new
THREE
.
Quaternion
(
this
.
x
,
this
.
y
,
this
.
z
,
this
.
w
)}};
THREE
.
Quaternion
.
slerp
=
function
(
a
,
b
,
c
,
d
){
var
e
=
a
.
w
*
b
.
w
+
a
.
x
*
b
.
x
+
a
.
y
*
b
.
y
+
a
.
z
*
b
.
z
;
0
>
e
?(
c
.
w
=-
b
.
w
,
c
.
x
=-
b
.
x
,
c
.
y
=-
b
.
y
,
c
.
z
=-
b
.
z
,
e
=-
e
):
c
.
copy
(
b
);
if
(
1
<=
Math
.
abs
(
e
))
return
c
.
w
=
a
.
w
,
c
.
x
=
a
.
x
,
c
.
y
=
a
.
y
,
c
.
z
=
a
.
z
,
c
;
var
f
=
Math
.
acos
(
e
),
e
=
Math
.
sqrt
(
1
-
e
*
e
);
if
(
0.001
>
Math
.
abs
(
e
))
return
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
),
c
;
b
=
Math
.
sin
((
1
-
d
)
*
f
)
/
e
;
d
=
Math
.
sin
(
d
*
f
)
/
e
;
c
.
w
=
a
.
w
*
b
+
c
.
w
*
d
;
c
.
x
=
a
.
x
*
b
+
c
.
x
*
d
;
c
.
y
=
a
.
y
*
b
+
c
.
y
*
d
;
c
.
z
=
a
.
z
*
b
+
c
.
z
*
d
;
return
c
};
THREE
.
Vertex
=
function
(
a
){
this
.
position
=
a
||
new
THREE
.
Vector3
};
THREE
.
Quaternion
.
slerp
=
function
(
a
,
b
,
c
,
d
){
var
e
=
a
.
w
*
b
.
w
+
a
.
x
*
b
.
x
+
a
.
y
*
b
.
y
+
a
.
z
*
b
.
z
;
0
>
e
?(
c
.
w
=-
b
.
w
,
c
.
x
=-
b
.
x
,
c
.
y
=-
b
.
y
,
c
.
z
=-
b
.
z
,
e
=-
e
):
c
.
copy
(
b
);
if
(
1
<=
Math
.
abs
(
e
))
return
c
.
w
=
a
.
w
,
c
.
x
=
a
.
x
,
c
.
y
=
a
.
y
,
c
.
z
=
a
.
z
,
c
;
var
f
=
Math
.
acos
(
e
),
e
=
Math
.
sqrt
(
1
-
e
*
e
);
if
(
0.001
0
>
Math
.
abs
(
e
))
return
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
),
c
;
b
=
Math
.
sin
((
1
-
d
)
*
f
)
/
e
;
d
=
Math
.
sin
(
d
*
f
)
/
e
;
c
.
w
=
a
.
w
*
b
+
c
.
w
*
d
;
c
.
x
=
a
.
x
*
b
+
c
.
x
*
d
;
c
.
y
=
a
.
y
*
b
+
c
.
y
*
d
;
c
.
z
=
a
.
z
*
b
+
c
.
z
*
d
;
return
c
};
THREE
.
Vertex
=
function
(
a
){
this
.
position
=
a
||
new
THREE
.
Vector3
};
THREE
.
Vertex
.
prototype
=
{
constructor
:
THREE
.
Vertex
,
clone
:
function
(){
return
new
THREE
.
Vertex
(
this
.
position
.
clone
())}};
THREE
.
Face3
=
function
(
a
,
b
,
c
,
d
,
e
,
f
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
normal
=
d
instanceof
THREE
.
Vector3
?
d
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
d
instanceof
Array
?
d
:[];
this
.
color
=
e
instanceof
THREE
.
Color
?
e
:
new
THREE
.
Color
;
this
.
vertexColors
=
e
instanceof
Array
?
e
:[];
this
.
vertexTangents
=
[];
this
.
materialIndex
=
f
;
this
.
centroid
=
new
THREE
.
Vector3
};
THREE
.
Face3
.
prototype
=
{
constructor
:
THREE
.
Face3
,
clone
:
function
(){
var
a
=
new
THREE
.
Face3
(
this
.
a
,
this
.
b
,
this
.
c
);
a
.
normal
.
copy
(
this
.
normal
);
a
.
color
.
copy
(
this
.
color
);
a
.
centroid
.
copy
(
this
.
centroid
);
a
.
materialIndex
=
this
.
materialIndex
;
var
b
,
c
;
for
(
b
=
0
,
c
=
this
.
vertexNormals
.
length
;
b
<
c
;
b
++
)
a
.
vertexNormals
[
b
]
=
this
.
vertexNormals
[
b
].
clone
();
for
(
b
=
0
,
c
=
this
.
vertexColors
.
length
;
b
<
c
;
b
++
)
a
.
vertexColors
[
b
]
=
this
.
vertexColors
[
b
].
clone
();
for
(
b
=
0
,
c
=
this
.
vertexTangents
.
length
;
b
<
c
;
b
++
)
a
.
vertexTangents
[
b
]
=
this
.
vertexTangents
[
b
].
clone
();
return
a
}};
THREE
.
Face4
=
function
(
a
,
b
,
c
,
d
,
e
,
f
,
g
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
d
=
d
;
this
.
normal
=
e
instanceof
THREE
.
Vector3
?
e
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
e
instanceof
Array
?
e
:[];
this
.
color
=
f
instanceof
THREE
.
Color
?
f
:
new
THREE
.
Color
;
this
.
vertexColors
=
f
instanceof
Array
?
f
:[];
this
.
vertexTangents
=
[];
this
.
materialIndex
=
g
;
this
.
centroid
=
new
THREE
.
Vector3
};
...
...
build/custom/ThreeExtras.js
浏览文件 @
3c98b094
此差异已折叠。
点击以展开。
build/custom/ThreeSVG.js
浏览文件 @
3c98b094
...
...
@@ -79,7 +79,7 @@ this.x=a.x*d;this.y=a.y*d;this.z=a.z*d;this.w=Math.cos(c);return this},setFromRo
this
.
normalize
();
return
this
},
calculateW
:
function
(){
this
.
w
=-
Math
.
sqrt
(
Math
.
abs
(
1
-
this
.
x
*
this
.
x
-
this
.
y
*
this
.
y
-
this
.
z
*
this
.
z
));
return
this
},
inverse
:
function
(){
this
.
x
*=-
1
;
this
.
y
*=-
1
;
this
.
z
*=-
1
;
return
this
},
length
:
function
(){
return
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
+
this
.
z
*
this
.
z
+
this
.
w
*
this
.
w
)},
normalize
:
function
(){
var
a
=
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
+
this
.
z
*
this
.
z
+
this
.
w
*
this
.
w
);
0
===
a
?
this
.
w
=
this
.
z
=
this
.
y
=
this
.
x
=
0
:(
a
=
1
/
a
,
this
.
x
*=
a
,
this
.
y
*=
a
,
this
.
z
*=
a
,
this
.
w
*=
a
);
return
this
},
multiply
:
function
(
a
,
b
){
this
.
x
=
a
.
x
*
b
.
w
+
a
.
y
*
b
.
z
-
a
.
z
*
b
.
y
+
a
.
w
*
b
.
x
;
this
.
y
=-
a
.
x
*
b
.
z
+
a
.
y
*
b
.
w
+
a
.
z
*
b
.
x
+
a
.
w
*
b
.
y
;
this
.
z
=
a
.
x
*
b
.
y
-
a
.
y
*
b
.
x
+
a
.
z
*
b
.
w
+
a
.
w
*
b
.
z
;
this
.
w
=-
a
.
x
*
b
.
x
-
a
.
y
*
b
.
y
-
a
.
z
*
b
.
z
+
a
.
w
*
b
.
w
;
return
this
},
multiplySelf
:
function
(
a
){
var
b
=
this
.
x
,
c
=
this
.
y
,
d
=
this
.
z
,
e
=
this
.
w
,
f
=
a
.
x
,
g
=
a
.
y
,
h
=
a
.
z
,
a
=
a
.
w
;
this
.
x
=
b
*
a
+
e
*
f
+
c
*
h
-
d
*
g
;
this
.
y
=
c
*
a
+
e
*
g
+
d
*
f
-
b
*
h
;
this
.
z
=
d
*
a
+
e
*
h
+
b
*
g
-
c
*
f
;
this
.
w
=
e
*
a
-
b
*
f
-
c
*
g
-
d
*
h
;
return
this
},
multiplyVector3
:
function
(
a
,
b
){
b
||
(
b
=
a
);
var
c
=
a
.
x
,
d
=
a
.
y
,
e
=
a
.
z
,
f
=
this
.
x
,
g
=
this
.
y
,
h
=
this
.
z
,
j
=
this
.
w
,
i
=
j
*
c
+
g
*
e
-
h
*
d
,
k
=
j
*
d
+
h
*
c
-
f
*
e
,
l
=
j
*
e
+
f
*
d
-
g
*
c
,
c
=-
f
*
c
-
g
*
d
-
h
*
e
;
b
.
x
=
i
*
j
+
c
*-
f
+
k
*-
h
-
l
*-
g
;
b
.
y
=
k
*
j
+
c
*-
g
+
l
*-
f
-
i
*-
h
;
b
.
z
=
l
*
j
+
c
*-
h
+
i
*-
g
-
k
*-
f
;
return
b
},
clone
:
function
(){
return
new
THREE
.
Quaternion
(
this
.
x
,
this
.
y
,
this
.
z
,
this
.
w
)}};
THREE
.
Quaternion
.
slerp
=
function
(
a
,
b
,
c
,
d
){
var
e
=
a
.
w
*
b
.
w
+
a
.
x
*
b
.
x
+
a
.
y
*
b
.
y
+
a
.
z
*
b
.
z
;
0
>
e
?(
c
.
w
=-
b
.
w
,
c
.
x
=-
b
.
x
,
c
.
y
=-
b
.
y
,
c
.
z
=-
b
.
z
,
e
=-
e
):
c
.
copy
(
b
);
if
(
1
<=
Math
.
abs
(
e
))
return
c
.
w
=
a
.
w
,
c
.
x
=
a
.
x
,
c
.
y
=
a
.
y
,
c
.
z
=
a
.
z
,
c
;
var
f
=
Math
.
acos
(
e
),
e
=
Math
.
sqrt
(
1
-
e
*
e
);
if
(
0.001
>
Math
.
abs
(
e
))
return
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
),
c
;
b
=
Math
.
sin
((
1
-
d
)
*
f
)
/
e
;
d
=
Math
.
sin
(
d
*
f
)
/
e
;
c
.
w
=
a
.
w
*
b
+
c
.
w
*
d
;
c
.
x
=
a
.
x
*
b
+
c
.
x
*
d
;
c
.
y
=
a
.
y
*
b
+
c
.
y
*
d
;
c
.
z
=
a
.
z
*
b
+
c
.
z
*
d
;
return
c
};
THREE
.
Vertex
=
function
(
a
){
this
.
position
=
a
||
new
THREE
.
Vector3
};
THREE
.
Quaternion
.
slerp
=
function
(
a
,
b
,
c
,
d
){
var
e
=
a
.
w
*
b
.
w
+
a
.
x
*
b
.
x
+
a
.
y
*
b
.
y
+
a
.
z
*
b
.
z
;
0
>
e
?(
c
.
w
=-
b
.
w
,
c
.
x
=-
b
.
x
,
c
.
y
=-
b
.
y
,
c
.
z
=-
b
.
z
,
e
=-
e
):
c
.
copy
(
b
);
if
(
1
<=
Math
.
abs
(
e
))
return
c
.
w
=
a
.
w
,
c
.
x
=
a
.
x
,
c
.
y
=
a
.
y
,
c
.
z
=
a
.
z
,
c
;
var
f
=
Math
.
acos
(
e
),
e
=
Math
.
sqrt
(
1
-
e
*
e
);
if
(
0.001
0
>
Math
.
abs
(
e
))
return
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
),
c
;
b
=
Math
.
sin
((
1
-
d
)
*
f
)
/
e
;
d
=
Math
.
sin
(
d
*
f
)
/
e
;
c
.
w
=
a
.
w
*
b
+
c
.
w
*
d
;
c
.
x
=
a
.
x
*
b
+
c
.
x
*
d
;
c
.
y
=
a
.
y
*
b
+
c
.
y
*
d
;
c
.
z
=
a
.
z
*
b
+
c
.
z
*
d
;
return
c
};
THREE
.
Vertex
=
function
(
a
){
this
.
position
=
a
||
new
THREE
.
Vector3
};
THREE
.
Vertex
.
prototype
=
{
constructor
:
THREE
.
Vertex
,
clone
:
function
(){
return
new
THREE
.
Vertex
(
this
.
position
.
clone
())}};
THREE
.
Face3
=
function
(
a
,
b
,
c
,
d
,
e
,
f
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
normal
=
d
instanceof
THREE
.
Vector3
?
d
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
d
instanceof
Array
?
d
:[];
this
.
color
=
e
instanceof
THREE
.
Color
?
e
:
new
THREE
.
Color
;
this
.
vertexColors
=
e
instanceof
Array
?
e
:[];
this
.
vertexTangents
=
[];
this
.
materialIndex
=
f
;
this
.
centroid
=
new
THREE
.
Vector3
};
THREE
.
Face3
.
prototype
=
{
constructor
:
THREE
.
Face3
,
clone
:
function
(){
var
a
=
new
THREE
.
Face3
(
this
.
a
,
this
.
b
,
this
.
c
);
a
.
normal
.
copy
(
this
.
normal
);
a
.
color
.
copy
(
this
.
color
);
a
.
centroid
.
copy
(
this
.
centroid
);
a
.
materialIndex
=
this
.
materialIndex
;
var
b
,
c
;
for
(
b
=
0
,
c
=
this
.
vertexNormals
.
length
;
b
<
c
;
b
++
)
a
.
vertexNormals
[
b
]
=
this
.
vertexNormals
[
b
].
clone
();
for
(
b
=
0
,
c
=
this
.
vertexColors
.
length
;
b
<
c
;
b
++
)
a
.
vertexColors
[
b
]
=
this
.
vertexColors
[
b
].
clone
();
for
(
b
=
0
,
c
=
this
.
vertexTangents
.
length
;
b
<
c
;
b
++
)
a
.
vertexTangents
[
b
]
=
this
.
vertexTangents
[
b
].
clone
();
return
a
}};
THREE
.
Face4
=
function
(
a
,
b
,
c
,
d
,
e
,
f
,
g
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
d
=
d
;
this
.
normal
=
e
instanceof
THREE
.
Vector3
?
e
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
e
instanceof
Array
?
e
:[];
this
.
color
=
f
instanceof
THREE
.
Color
?
f
:
new
THREE
.
Color
;
this
.
vertexColors
=
f
instanceof
Array
?
f
:[];
this
.
vertexTangents
=
[];
this
.
materialIndex
=
g
;
this
.
centroid
=
new
THREE
.
Vector3
};
...
...
@@ -95,7 +95,7 @@ d;c++){e=this.faces[c];e.__originalFaceNormal?e.__originalFaceNormal.copy(e.norm
this
.
morphNormals
[
a
].
faceNormals
=
[];
this
.
morphNormals
[
a
].
vertexNormals
=
[];
var
g
=
this
.
morphNormals
[
a
].
faceNormals
,
h
=
this
.
morphNormals
[
a
].
vertexNormals
,
j
,
i
;
for
(
c
=
0
,
d
=
this
.
faces
.
length
;
c
<
d
;
c
++
)
e
=
this
.
faces
[
c
],
j
=
new
THREE
.
Vector3
,
i
=
e
instanceof
THREE
.
Face3
?{
a
:
new
THREE
.
Vector3
,
b
:
new
THREE
.
Vector3
,
c
:
new
THREE
.
Vector3
}:{
a
:
new
THREE
.
Vector3
,
b
:
new
THREE
.
Vector3
,
c
:
new
THREE
.
Vector3
,
d
:
new
THREE
.
Vector3
},
g
.
push
(
j
),
h
.
push
(
i
)}
g
=
this
.
morphNormals
[
a
];
f
.
vertices
=
this
.
morphTargets
[
a
].
vertices
;
f
.
computeFaceNormals
();
f
.
computeVertexNormals
();
for
(
c
=
0
,
d
=
this
.
faces
.
length
;
c
<
d
;
c
++
)
e
=
this
.
faces
[
c
],
j
=
g
.
faceNormals
[
c
],
i
=
g
.
vertexNormals
[
c
],
j
.
copy
(
e
.
normal
),
e
instanceof
THREE
.
Face3
?(
i
.
a
.
copy
(
e
.
vertexNormals
[
0
]),
i
.
b
.
copy
(
e
.
vertexNormals
[
1
]),
i
.
c
.
copy
(
e
.
vertexNormals
[
2
])):(
i
.
a
.
copy
(
e
.
vertexNormals
[
0
]),
i
.
b
.
copy
(
e
.
vertexNormals
[
1
]),
i
.
c
.
copy
(
e
.
vertexNormals
[
2
]),
i
.
d
.
copy
(
e
.
vertexNormals
[
3
]))}
for
(
c
=
0
,
d
=
this
.
faces
.
length
;
c
<
d
;
c
++
)
e
=
this
.
faces
[
c
],
e
.
normal
=
e
.
__originalFaceNormal
,
e
.
vertexNormals
=
e
.
__originalVertexNormals
},
computeTangents
:
function
(){
function
a
(
a
,
b
,
c
,
d
,
e
,
f
,
v
){
h
=
a
.
vertices
[
b
].
position
;
j
=
a
.
vertices
[
c
].
position
;
i
=
a
.
vertices
[
d
].
position
;
k
=
g
[
e
];
l
=
g
[
f
];
n
=
g
[
v
];
m
=
j
.
x
-
h
.
x
;
o
=
i
.
x
-
h
.
x
;
p
=
j
.
y
-
h
.
y
;
u
=
i
.
y
-
h
.
y
;
H
=
j
.
z
-
h
.
z
;
w
=
i
.
z
-
h
.
z
;
C
=
l
.
u
-
k
.
u
;
s
=
n
.
u
-
k
.
u
;
t
=
l
.
v
-
k
.
v
;
y
=
n
.
v
-
k
.
v
;
x
=
1
/
(
C
*
y
-
s
*
t
);
E
.
set
((
y
*
m
-
t
*
o
)
*
x
,(
y
*
p
-
t
*
u
)
*
x
,(
y
*
H
-
t
*
w
)
*
x
);
A
.
set
((
C
*
o
-
s
*
m
)
*
x
,(
C
*
u
-
s
*
p
)
*
x
,(
C
*
w
-
s
*
H
)
*
x
);
D
[
b
].
addSelf
(
E
);
D
[
c
].
addSelf
(
E
);
D
[
d
].
addSelf
(
E
);
B
[
b
].
addSelf
(
A
);
B
[
c
].
addSelf
(
A
);
B
[
d
].
addSelf
(
A
)}
var
b
,
c
,
d
,
e
,
f
,
g
,
h
,
j
,
i
,
k
,
l
,
n
,
m
,
o
,
p
,
u
,
H
,
w
,
C
,
s
,
t
,
y
,
x
,
z
,
D
=
[],
B
=
[],
E
=
new
THREE
.
Vector3
,
A
=
new
THREE
.
Vector3
,
L
=
new
THREE
.
Vector3
,
P
=
new
THREE
.
Vector3
,
M
=
new
THREE
.
Vector3
;
for
(
b
=
0
,
c
=
this
.
vertices
.
length
;
b
<
c
;
b
++
)
D
[
b
]
=
new
THREE
.
Vector3
,
B
[
b
]
=
new
THREE
.
Vector3
;
for
(
b
=
0
,
c
=
this
.
faces
.
length
;
b
<
c
;
b
++
)
f
=
this
.
faces
[
b
],
g
=
this
.
faceVertexUvs
[
0
][
b
],
f
instanceof
THREE
.
Face3
?
a
(
this
,
f
.
a
,
f
.
b
,
f
.
c
,
0
,
1
,
2
):
f
instanceof
THREE
.
Face4
&&
(
a
(
this
,
f
.
a
,
f
.
b
,
f
.
c
,
0
,
1
,
2
),
a
(
this
,
f
.
a
,
f
.
b
,
f
.
d
,
0
,
1
,
3
));
var
N
=
[
"
a
"
,
"
b
"
,
"
c
"
,
"
d
"
];
for
(
b
=
0
,
c
=
this
.
faces
.
length
;
b
<
c
;
b
++
){
f
=
this
.
faces
[
b
];
for
(
d
=
0
;
d
<
f
.
vertexNormals
.
length
;
d
++
)
M
.
copy
(
f
.
vertexNormals
[
d
]),
e
=
f
[
N
[
d
]],
L
=
new
THREE
.
Vector3
,
P
=
new
THREE
.
Vector3
,
M
=
new
THREE
.
Vector3
;
for
(
b
=
0
,
c
=
this
.
vertices
.
length
;
b
<
c
;
b
++
)
D
[
b
]
=
new
THREE
.
Vector3
,
B
[
b
]
=
new
THREE
.
Vector3
;
for
(
b
=
0
,
c
=
this
.
faces
.
length
;
b
<
c
;
b
++
)
f
=
this
.
faces
[
b
],
g
=
this
.
faceVertexUvs
[
0
][
b
],
f
instanceof
THREE
.
Face3
?
a
(
this
,
f
.
a
,
f
.
b
,
f
.
c
,
0
,
1
,
2
):
f
instanceof
THREE
.
Face4
&&
(
a
(
this
,
f
.
a
,
f
.
b
,
f
.
d
,
0
,
1
,
3
),
a
(
this
,
f
.
b
,
f
.
c
,
f
.
d
,
1
,
2
,
3
));
var
N
=
[
"
a
"
,
"
b
"
,
"
c
"
,
"
d
"
];
for
(
b
=
0
,
c
=
this
.
faces
.
length
;
b
<
c
;
b
++
){
f
=
this
.
faces
[
b
];
for
(
d
=
0
;
d
<
f
.
vertexNormals
.
length
;
d
++
)
M
.
copy
(
f
.
vertexNormals
[
d
]),
e
=
f
[
N
[
d
]],
z
=
D
[
e
],
L
.
copy
(
z
),
L
.
subSelf
(
M
.
multiplyScalar
(
M
.
dot
(
z
))).
normalize
(),
P
.
cross
(
f
.
vertexNormals
[
d
],
z
),
e
=
P
.
dot
(
B
[
e
]),
e
=
0
>
e
?
-
1
:
1
,
f
.
vertexTangents
[
d
]
=
new
THREE
.
Vector4
(
L
.
x
,
L
.
y
,
L
.
z
,
e
)}
this
.
hasTangents
=!
0
},
computeBoundingBox
:
function
(){
if
(
!
this
.
boundingBox
)
this
.
boundingBox
=
{
min
:
new
THREE
.
Vector3
,
max
:
new
THREE
.
Vector3
};
if
(
0
<
this
.
vertices
.
length
){
var
a
;
a
=
this
.
vertices
[
0
].
position
;
this
.
boundingBox
.
min
.
copy
(
a
);
this
.
boundingBox
.
max
.
copy
(
a
);
for
(
var
b
=
this
.
boundingBox
.
min
,
c
=
this
.
boundingBox
.
max
,
d
=
1
,
e
=
this
.
vertices
.
length
;
d
<
e
;
d
++
){
a
=
this
.
vertices
[
d
].
position
;
if
(
a
.
x
<
b
.
x
)
b
.
x
=
a
.
x
;
else
if
(
a
.
x
>
c
.
x
)
c
.
x
=
a
.
x
;
if
(
a
.
y
<
b
.
y
)
b
.
y
=
a
.
y
;
else
if
(
a
.
y
>
c
.
y
)
c
.
y
=
a
.
y
;
if
(
a
.
z
<
b
.
z
)
b
.
z
=
a
.
z
;
else
if
(
a
.
z
>
c
.
z
)
c
.
z
=
a
.
z
}}
else
this
.
boundingBox
.
min
.
set
(
0
,
0
,
0
),
this
.
boundingBox
.
max
.
set
(
0
,
0
,
0
)},
computeBoundingSphere
:
function
(){
if
(
!
this
.
boundingSphere
)
this
.
boundingSphere
=
{
radius
:
0
};
for
(
var
a
,
b
=
0
,
c
=
0
,
d
=
this
.
vertices
.
length
;
c
<
d
;
c
++
)
a
=
this
.
vertices
[
c
].
position
.
length
(),
a
>
b
&&
(
b
=
a
);
this
.
boundingSphere
.
radius
=
b
},
mergeVertices
:
function
(){
var
a
=
{},
b
=
[],
c
=
[],
d
,
e
=
Math
.
pow
(
10
,
4
),
f
,
g
;
for
(
f
=
0
,
g
=
this
.
vertices
.
length
;
f
<
g
;
f
++
)
d
=
this
.
vertices
[
f
].
position
,
d
=
[
Math
.
round
(
d
.
x
*
e
),
Math
.
round
(
d
.
y
*
e
),
Math
.
round
(
d
.
z
*
e
)].
join
(
"
_
"
),
void
0
===
a
[
d
]?(
a
[
d
]
=
f
,
b
.
push
(
this
.
vertices
[
f
]),
c
[
f
]
=
b
.
length
-
1
):
c
[
f
]
=
c
[
a
[
d
]];
for
(
f
=
0
,
g
=
this
.
faces
.
length
;
f
<
g
;
f
++
)
if
(
a
=
this
.
faces
[
f
],
a
instanceof
THREE
.
Face3
)
a
.
a
=
c
[
a
.
a
],
a
.
b
=
c
[
a
.
b
],
a
.
c
=
c
[
a
.
c
];
else
if
(
a
instanceof
THREE
.
Face4
)
a
.
a
=
c
[
a
.
a
],
a
.
b
=
c
[
a
.
b
],
a
.
c
=
c
[
a
.
c
],
a
.
d
=
c
[
a
.
d
];
this
.
vertices
=
b
}};
THREE
.
GeometryCount
=
0
;
...
...
build/custom/ThreeWebGL.js
浏览文件 @
3c98b094
...
...
@@ -80,7 +80,7 @@ this.x=a.x*d;this.y=a.y*d;this.z=a.z*d;this.w=Math.cos(c);return this},setFromRo
this
.
normalize
();
return
this
},
calculateW
:
function
(){
this
.
w
=-
Math
.
sqrt
(
Math
.
abs
(
1
-
this
.
x
*
this
.
x
-
this
.
y
*
this
.
y
-
this
.
z
*
this
.
z
));
return
this
},
inverse
:
function
(){
this
.
x
*=-
1
;
this
.
y
*=-
1
;
this
.
z
*=-
1
;
return
this
},
length
:
function
(){
return
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
+
this
.
z
*
this
.
z
+
this
.
w
*
this
.
w
)},
normalize
:
function
(){
var
a
=
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
+
this
.
z
*
this
.
z
+
this
.
w
*
this
.
w
);
0
===
a
?
this
.
w
=
this
.
z
=
this
.
y
=
this
.
x
=
0
:(
a
=
1
/
a
,
this
.
x
*=
a
,
this
.
y
*=
a
,
this
.
z
*=
a
,
this
.
w
*=
a
);
return
this
},
multiply
:
function
(
a
,
b
){
this
.
x
=
a
.
x
*
b
.
w
+
a
.
y
*
b
.
z
-
a
.
z
*
b
.
y
+
a
.
w
*
b
.
x
;
this
.
y
=-
a
.
x
*
b
.
z
+
a
.
y
*
b
.
w
+
a
.
z
*
b
.
x
+
a
.
w
*
b
.
y
;
this
.
z
=
a
.
x
*
b
.
y
-
a
.
y
*
b
.
x
+
a
.
z
*
b
.
w
+
a
.
w
*
b
.
z
;
this
.
w
=-
a
.
x
*
b
.
x
-
a
.
y
*
b
.
y
-
a
.
z
*
b
.
z
+
a
.
w
*
b
.
w
;
return
this
},
multiplySelf
:
function
(
a
){
var
b
=
this
.
x
,
c
=
this
.
y
,
d
=
this
.
z
,
f
=
this
.
w
,
g
=
a
.
x
,
i
=
a
.
y
,
h
=
a
.
z
,
a
=
a
.
w
;
this
.
x
=
b
*
a
+
f
*
g
+
c
*
h
-
d
*
i
;
this
.
y
=
c
*
a
+
f
*
i
+
d
*
g
-
b
*
h
;
this
.
z
=
d
*
a
+
f
*
h
+
b
*
i
-
c
*
g
;
this
.
w
=
f
*
a
-
b
*
g
-
c
*
i
-
d
*
h
;
return
this
},
multiplyVector3
:
function
(
a
,
b
){
b
||
(
b
=
a
);
var
c
=
a
.
x
,
d
=
a
.
y
,
f
=
a
.
z
,
g
=
this
.
x
,
i
=
this
.
y
,
h
=
this
.
z
,
k
=
this
.
w
,
j
=
k
*
c
+
i
*
f
-
h
*
d
,
m
=
k
*
d
+
h
*
c
-
g
*
f
,
n
=
k
*
f
+
g
*
d
-
i
*
c
,
c
=-
g
*
c
-
i
*
d
-
h
*
f
;
b
.
x
=
j
*
k
+
c
*-
g
+
m
*-
h
-
n
*-
i
;
b
.
y
=
m
*
k
+
c
*-
i
+
n
*-
g
-
j
*-
h
;
b
.
z
=
n
*
k
+
c
*-
h
+
j
*-
i
-
m
*-
g
;
return
b
},
clone
:
function
(){
return
new
THREE
.
Quaternion
(
this
.
x
,
this
.
y
,
this
.
z
,
this
.
w
)}};
THREE
.
Quaternion
.
slerp
=
function
(
a
,
b
,
c
,
d
){
var
f
=
a
.
w
*
b
.
w
+
a
.
x
*
b
.
x
+
a
.
y
*
b
.
y
+
a
.
z
*
b
.
z
;
0
>
f
?(
c
.
w
=-
b
.
w
,
c
.
x
=-
b
.
x
,
c
.
y
=-
b
.
y
,
c
.
z
=-
b
.
z
,
f
=-
f
):
c
.
copy
(
b
);
if
(
1
<=
Math
.
abs
(
f
))
return
c
.
w
=
a
.
w
,
c
.
x
=
a
.
x
,
c
.
y
=
a
.
y
,
c
.
z
=
a
.
z
,
c
;
var
g
=
Math
.
acos
(
f
),
f
=
Math
.
sqrt
(
1
-
f
*
f
);
if
(
0.001
>
Math
.
abs
(
f
))
return
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
),
c
;
b
=
Math
.
sin
((
1
-
d
)
*
g
)
/
f
;
d
=
Math
.
sin
(
d
*
g
)
/
f
;
c
.
w
=
a
.
w
*
b
+
c
.
w
*
d
;
c
.
x
=
a
.
x
*
b
+
c
.
x
*
d
;
c
.
y
=
a
.
y
*
b
+
c
.
y
*
d
;
c
.
z
=
a
.
z
*
b
+
c
.
z
*
d
;
return
c
};
THREE
.
Vertex
=
function
(
a
){
this
.
position
=
a
||
new
THREE
.
Vector3
};
THREE
.
Quaternion
.
slerp
=
function
(
a
,
b
,
c
,
d
){
var
f
=
a
.
w
*
b
.
w
+
a
.
x
*
b
.
x
+
a
.
y
*
b
.
y
+
a
.
z
*
b
.
z
;
0
>
f
?(
c
.
w
=-
b
.
w
,
c
.
x
=-
b
.
x
,
c
.
y
=-
b
.
y
,
c
.
z
=-
b
.
z
,
f
=-
f
):
c
.
copy
(
b
);
if
(
1
<=
Math
.
abs
(
f
))
return
c
.
w
=
a
.
w
,
c
.
x
=
a
.
x
,
c
.
y
=
a
.
y
,
c
.
z
=
a
.
z
,
c
;
var
g
=
Math
.
acos
(
f
),
f
=
Math
.
sqrt
(
1
-
f
*
f
);
if
(
0.001
0
>
Math
.
abs
(
f
))
return
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
),
c
;
b
=
Math
.
sin
((
1
-
d
)
*
g
)
/
f
;
d
=
Math
.
sin
(
d
*
g
)
/
f
;
c
.
w
=
a
.
w
*
b
+
c
.
w
*
d
;
c
.
x
=
a
.
x
*
b
+
c
.
x
*
d
;
c
.
y
=
a
.
y
*
b
+
c
.
y
*
d
;
c
.
z
=
a
.
z
*
b
+
c
.
z
*
d
;
return
c
};
THREE
.
Vertex
=
function
(
a
){
this
.
position
=
a
||
new
THREE
.
Vector3
};
THREE
.
Vertex
.
prototype
=
{
constructor
:
THREE
.
Vertex
,
clone
:
function
(){
return
new
THREE
.
Vertex
(
this
.
position
.
clone
())}};
THREE
.
Face3
=
function
(
a
,
b
,
c
,
d
,
f
,
g
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
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
.
materialIndex
=
g
;
this
.
centroid
=
new
THREE
.
Vector3
};
THREE
.
Face3
.
prototype
=
{
constructor
:
THREE
.
Face3
,
clone
:
function
(){
var
a
=
new
THREE
.
Face3
(
this
.
a
,
this
.
b
,
this
.
c
);
a
.
normal
.
copy
(
this
.
normal
);
a
.
color
.
copy
(
this
.
color
);
a
.
centroid
.
copy
(
this
.
centroid
);
a
.
materialIndex
=
this
.
materialIndex
;
var
b
,
c
;
for
(
b
=
0
,
c
=
this
.
vertexNormals
.
length
;
b
<
c
;
b
++
)
a
.
vertexNormals
[
b
]
=
this
.
vertexNormals
[
b
].
clone
();
for
(
b
=
0
,
c
=
this
.
vertexColors
.
length
;
b
<
c
;
b
++
)
a
.
vertexColors
[
b
]
=
this
.
vertexColors
[
b
].
clone
();
for
(
b
=
0
,
c
=
this
.
vertexTangents
.
length
;
b
<
c
;
b
++
)
a
.
vertexTangents
[
b
]
=
this
.
vertexTangents
[
b
].
clone
();
return
a
}};
THREE
.
Face4
=
function
(
a
,
b
,
c
,
d
,
f
,
g
,
i
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
d
=
d
;
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
.
materialIndex
=
i
;
this
.
centroid
=
new
THREE
.
Vector3
};
...
...
@@ -96,7 +96,7 @@ d;c++){f=this.faces[c];f.__originalFaceNormal?f.__originalFaceNormal.copy(f.norm
this
.
morphNormals
[
a
].
faceNormals
=
[];
this
.
morphNormals
[
a
].
vertexNormals
=
[];
var
i
=
this
.
morphNormals
[
a
].
faceNormals
,
h
=
this
.
morphNormals
[
a
].
vertexNormals
,
k
,
j
;
for
(
c
=
0
,
d
=
this
.
faces
.
length
;
c
<
d
;
c
++
)
f
=
this
.
faces
[
c
],
k
=
new
THREE
.
Vector3
,
j
=
f
instanceof
THREE
.
Face3
?{
a
:
new
THREE
.
Vector3
,
b
:
new
THREE
.
Vector3
,
c
:
new
THREE
.
Vector3
}:{
a
:
new
THREE
.
Vector3
,
b
:
new
THREE
.
Vector3
,
c
:
new
THREE
.
Vector3
,
d
:
new
THREE
.
Vector3
},
i
.
push
(
k
),
h
.
push
(
j
)}
i
=
this
.
morphNormals
[
a
];
g
.
vertices
=
this
.
morphTargets
[
a
].
vertices
;
g
.
computeFaceNormals
();
g
.
computeVertexNormals
();
for
(
c
=
0
,
d
=
this
.
faces
.
length
;
c
<
d
;
c
++
)
f
=
this
.
faces
[
c
],
k
=
i
.
faceNormals
[
c
],
j
=
i
.
vertexNormals
[
c
],
k
.
copy
(
f
.
normal
),
f
instanceof
THREE
.
Face3
?(
j
.
a
.
copy
(
f
.
vertexNormals
[
0
]),
j
.
b
.
copy
(
f
.
vertexNormals
[
1
]),
j
.
c
.
copy
(
f
.
vertexNormals
[
2
])):(
j
.
a
.
copy
(
f
.
vertexNormals
[
0
]),
j
.
b
.
copy
(
f
.
vertexNormals
[
1
]),
j
.
c
.
copy
(
f
.
vertexNormals
[
2
]),
j
.
d
.
copy
(
f
.
vertexNormals
[
3
]))}
for
(
c
=
0
,
d
=
this
.
faces
.
length
;
c
<
d
;
c
++
)
f
=
this
.
faces
[
c
],
f
.
normal
=
f
.
__originalFaceNormal
,
f
.
vertexNormals
=
f
.
__originalVertexNormals
},
computeTangents
:
function
(){
function
a
(
a
,
b
,
c
,
d
,
f
,
g
,
J
){
h
=
a
.
vertices
[
b
].
position
;
k
=
a
.
vertices
[
c
].
position
;
j
=
a
.
vertices
[
d
].
position
;
m
=
i
[
f
];
n
=
i
[
g
];
l
=
i
[
J
];
u
=
k
.
x
-
h
.
x
;
r
=
j
.
x
-
h
.
x
;
o
=
k
.
y
-
h
.
y
;
t
=
j
.
y
-
h
.
y
;
z
=
k
.
z
-
h
.
z
;
w
=
j
.
z
-
h
.
z
;
P
=
n
.
u
-
m
.
u
;
A
=
l
.
u
-
m
.
u
;
q
=
n
.
v
-
m
.
v
;
G
=
l
.
v
-
m
.
v
;
H
=
1
/
(
P
*
G
-
A
*
q
);
N
.
set
((
G
*
u
-
q
*
r
)
*
H
,(
G
*
o
-
q
*
t
)
*
H
,(
G
*
z
-
q
*
w
)
*
H
);
ja
.
set
((
P
*
r
-
A
*
u
)
*
H
,(
P
*
t
-
A
*
o
)
*
H
,(
P
*
w
-
A
*
z
)
*
H
);
I
[
b
].
addSelf
(
N
);
I
[
c
].
addSelf
(
N
);
I
[
d
].
addSelf
(
N
);
K
[
b
].
addSelf
(
ja
);
K
[
c
].
addSelf
(
ja
);
K
[
d
].
addSelf
(
ja
)}
var
b
,
c
,
d
,
f
,
g
,
i
,
h
,
k
,
j
,
m
,
n
,
l
,
u
,
r
,
o
,
t
,
z
,
w
,
P
,
A
,
q
,
G
,
H
,
M
,
I
=
[],
K
=
[],
N
=
new
THREE
.
Vector3
,
ja
=
new
THREE
.
Vector3
,
oa
=
new
THREE
.
Vector3
,
ka
=
new
THREE
.
Vector3
,
Y
=
new
THREE
.
Vector3
;
for
(
b
=
0
,
c
=
this
.
vertices
.
length
;
b
<
c
;
b
++
)
I
[
b
]
=
new
THREE
.
Vector3
,
K
[
b
]
=
new
THREE
.
Vector3
;
for
(
b
=
0
,
c
=
this
.
faces
.
length
;
b
<
c
;
b
++
)
g
=
this
.
faces
[
b
],
i
=
this
.
faceVertexUvs
[
0
][
b
],
g
instanceof
THREE
.
Face3
?
a
(
this
,
g
.
a
,
g
.
b
,
g
.
c
,
0
,
1
,
2
):
g
instanceof
THREE
.
Face4
&&
(
a
(
this
,
g
.
a
,
g
.
b
,
g
.
c
,
0
,
1
,
2
),
a
(
this
,
g
.
a
,
g
.
b
,
g
.
d
,
0
,
1
,
3
));
var
S
=
[
"
a
"
,
"
b
"
,
"
c
"
,
"
d
"
];
for
(
b
=
0
,
c
=
this
.
faces
.
length
;
b
<
c
;
b
++
){
g
=
this
.
faces
[
b
];
for
(
d
=
0
;
d
<
g
.
vertexNormals
.
length
;
d
++
)
Y
.
copy
(
g
.
vertexNormals
[
d
]),
f
=
g
[
S
[
d
]],
oa
=
new
THREE
.
Vector3
,
ka
=
new
THREE
.
Vector3
,
Y
=
new
THREE
.
Vector3
;
for
(
b
=
0
,
c
=
this
.
vertices
.
length
;
b
<
c
;
b
++
)
I
[
b
]
=
new
THREE
.
Vector3
,
K
[
b
]
=
new
THREE
.
Vector3
;
for
(
b
=
0
,
c
=
this
.
faces
.
length
;
b
<
c
;
b
++
)
g
=
this
.
faces
[
b
],
i
=
this
.
faceVertexUvs
[
0
][
b
],
g
instanceof
THREE
.
Face3
?
a
(
this
,
g
.
a
,
g
.
b
,
g
.
c
,
0
,
1
,
2
):
g
instanceof
THREE
.
Face4
&&
(
a
(
this
,
g
.
a
,
g
.
b
,
g
.
d
,
0
,
1
,
3
),
a
(
this
,
g
.
b
,
g
.
c
,
g
.
d
,
1
,
2
,
3
));
var
S
=
[
"
a
"
,
"
b
"
,
"
c
"
,
"
d
"
];
for
(
b
=
0
,
c
=
this
.
faces
.
length
;
b
<
c
;
b
++
){
g
=
this
.
faces
[
b
];
for
(
d
=
0
;
d
<
g
.
vertexNormals
.
length
;
d
++
)
Y
.
copy
(
g
.
vertexNormals
[
d
]),
f
=
g
[
S
[
d
]],
M
=
I
[
f
],
oa
.
copy
(
M
),
oa
.
subSelf
(
Y
.
multiplyScalar
(
Y
.
dot
(
M
))).
normalize
(),
ka
.
cross
(
g
.
vertexNormals
[
d
],
M
),
f
=
ka
.
dot
(
K
[
f
]),
f
=
0
>
f
?
-
1
:
1
,
g
.
vertexTangents
[
d
]
=
new
THREE
.
Vector4
(
oa
.
x
,
oa
.
y
,
oa
.
z
,
f
)}
this
.
hasTangents
=!
0
},
computeBoundingBox
:
function
(){
if
(
!
this
.
boundingBox
)
this
.
boundingBox
=
{
min
:
new
THREE
.
Vector3
,
max
:
new
THREE
.
Vector3
};
if
(
0
<
this
.
vertices
.
length
){
var
a
;
a
=
this
.
vertices
[
0
].
position
;
this
.
boundingBox
.
min
.
copy
(
a
);
this
.
boundingBox
.
max
.
copy
(
a
);
for
(
var
b
=
this
.
boundingBox
.
min
,
c
=
this
.
boundingBox
.
max
,
d
=
1
,
f
=
this
.
vertices
.
length
;
d
<
f
;
d
++
){
a
=
this
.
vertices
[
d
].
position
;
if
(
a
.
x
<
b
.
x
)
b
.
x
=
a
.
x
;
else
if
(
a
.
x
>
c
.
x
)
c
.
x
=
a
.
x
;
if
(
a
.
y
<
b
.
y
)
b
.
y
=
a
.
y
;
else
if
(
a
.
y
>
c
.
y
)
c
.
y
=
a
.
y
;
if
(
a
.
z
<
b
.
z
)
b
.
z
=
a
.
z
;
else
if
(
a
.
z
>
c
.
z
)
c
.
z
=
a
.
z
}}
else
this
.
boundingBox
.
min
.
set
(
0
,
0
,
0
),
this
.
boundingBox
.
max
.
set
(
0
,
0
,
0
)},
computeBoundingSphere
:
function
(){
if
(
!
this
.
boundingSphere
)
this
.
boundingSphere
=
{
radius
:
0
};
for
(
var
a
,
b
=
0
,
c
=
0
,
d
=
this
.
vertices
.
length
;
c
<
d
;
c
++
)
a
=
this
.
vertices
[
c
].
position
.
length
(),
a
>
b
&&
(
b
=
a
);
this
.
boundingSphere
.
radius
=
b
},
mergeVertices
:
function
(){
var
a
=
{},
b
=
[],
c
=
[],
d
,
f
=
Math
.
pow
(
10
,
4
),
g
,
i
;
for
(
g
=
0
,
i
=
this
.
vertices
.
length
;
g
<
i
;
g
++
)
d
=
this
.
vertices
[
g
].
position
,
d
=
[
Math
.
round
(
d
.
x
*
f
),
Math
.
round
(
d
.
y
*
f
),
Math
.
round
(
d
.
z
*
f
)].
join
(
"
_
"
),
void
0
===
a
[
d
]?(
a
[
d
]
=
g
,
b
.
push
(
this
.
vertices
[
g
]),
c
[
g
]
=
b
.
length
-
1
):
c
[
g
]
=
c
[
a
[
d
]];
for
(
g
=
0
,
i
=
this
.
faces
.
length
;
g
<
i
;
g
++
)
if
(
a
=
this
.
faces
[
g
],
a
instanceof
THREE
.
Face3
)
a
.
a
=
c
[
a
.
a
],
a
.
b
=
c
[
a
.
b
],
a
.
c
=
c
[
a
.
c
];
else
if
(
a
instanceof
THREE
.
Face4
)
a
.
a
=
c
[
a
.
a
],
a
.
b
=
c
[
a
.
b
],
a
.
c
=
c
[
a
.
c
],
a
.
d
=
c
[
a
.
d
];
this
.
vertices
=
b
}};
THREE
.
GeometryCount
=
0
;
...
...
@@ -346,7 +346,7 @@ b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.NEAREST);0>=b.getParameter(b
"
color
"
);
l
.
scale
=
b
.
getUniformLocation
(
m
,
"
scale
"
);
l
.
rotation
=
b
.
getUniformLocation
(
m
,
"
rotation
"
);
l
.
screenPosition
=
b
.
getUniformLocation
(
m
,
"
screenPosition
"
);
u
=!
1
};
this
.
render
=
function
(
a
,
d
,
f
,
z
){
var
a
=
a
.
__webglFlares
,
w
=
a
.
length
;
if
(
w
){
var
P
=
new
THREE
.
Vector3
,
A
=
z
/
f
,
q
=
0.5
*
f
,
G
=
0.5
*
z
,
H
=
16
/
z
,
M
=
new
THREE
.
Vector2
(
H
*
A
,
H
),
I
=
new
THREE
.
Vector3
(
1
,
1
,
0
),
K
=
new
THREE
.
Vector2
(
1
,
1
),
N
=
l
,
H
=
n
;
b
.
useProgram
(
m
);
u
||
(
b
.
enableVertexAttribArray
(
n
.
vertex
),
b
.
enableVertexAttribArray
(
n
.
uv
),
u
=!
0
);
b
.
uniform1i
(
N
.
occlusionMap
,
0
);
b
.
uniform1i
(
N
.
map
,
1
);
b
.
bindBuffer
(
b
.
ARRAY_BUFFER
,
g
);
b
.
vertexAttribPointer
(
H
.
vertex
,
2
,
b
.
FLOAT
,
!
1
,
16
,
0
);
b
.
vertexAttribPointer
(
H
.
uv
,
2
,
b
.
FLOAT
,
!
1
,
16
,
8
);
b
.
bindBuffer
(
b
.
ELEMENT_ARRAY_BUFFER
,
i
);
b
.
disable
(
b
.
CULL_FACE
);
b
.
depthMask
(
!
1
);
var
ja
,
oa
,
ka
,
Y
,
S
;
for
(
ja
=
0
;
ja
<
w
;
ja
++
)
if
(
H
=
16
/
z
,
M
.
set
(
H
*
A
,
H
),
Y
=
a
[
ja
],
P
.
set
(
Y
.
matrixWorld
.
n14
,
Y
.
matrixWorld
.
n24
,
Y
.
matrixWorld
.
n34
),
d
.
matrixWorldInverse
.
multiplyVector3
(
P
),
d
.
projectionMatrix
.
multiplyVector3
(
P
),
I
.
copy
(
P
),
K
.
x
=
I
.
x
*
q
+
q
,
K
.
y
=
I
.
y
*
G
+
G
,
j
||
0
<
K
.
x
&&
K
.
x
<
f
&&
0
<
K
.
y
&&
K
.
y
<
z
){
b
.
activeTexture
(
b
.
TEXTURE1
);
b
.
bindTexture
(
b
.
TEXTURE_2D
,
h
);
b
.
copyTexImage2D
(
b
.
TEXTURE_2D
,
0
,
b
.
RGB
,
K
.
x
-
8
,
K
.
y
-
8
,
16
,
16
,
0
);
b
.
uniform1i
(
N
.
renderType
,
0
);
b
.
uniform2f
(
N
.
scale
,
M
.
x
,
M
.
y
);
b
.
uniform3f
(
N
.
screenPosition
,
I
.
x
,
I
.
y
,
I
.
z
);
b
.
disable
(
b
.
BLEND
);
b
.
enable
(
b
.
DEPTH_TEST
);
b
.
drawElements
(
b
.
TRIANGLES
,
6
,
b
.
UNSIGNED_SHORT
,
0
);
b
.
activeTexture
(
b
.
TEXTURE0
);
b
.
bindTexture
(
b
.
TEXTURE_2D
,
k
);
b
.
copyTexImage2D
(
b
.
TEXTURE_2D
,
0
,
b
.
RGBA
,
K
.
x
-
8
,
K
.
y
-
8
,
16
,
16
,
0
);
b
.
uniform1i
(
N
.
renderType
,
1
);
b
.
disable
(
b
.
DEPTH_TEST
);
b
.
activeTexture
(
b
.
TEXTURE1
);
b
.
bindTexture
(
b
.
TEXTURE_2D
,
h
);
b
.
drawElements
(
b
.
TRIANGLES
,
6
,
b
.
UNSIGNED_SHORT
,
0
);
Y
.
positionScreen
.
copy
(
I
);
Y
.
customUpdateCallback
?
Y
.
customUpdateCallback
(
Y
):
Y
.
updateLensFlares
();
b
.
uniform1i
(
N
.
renderType
,
2
);
b
.
enable
(
b
.
BLEND
);
for
(
oa
=
0
,
ka
=
Y
.
lensFlares
.
length
;
oa
<
ka
;
oa
++
)
if
(
S
=
Y
.
lensFlares
[
oa
],
0.001
<
S
.
opacity
&&
0.001
<
S
.
scale
)
I
.
x
=
S
.
x
,
I
.
y
=
S
.
y
,
I
.
z
=
S
.
z
,
H
=
S
.
size
*
S
.
scale
/
z
,
M
.
x
=
H
*
A
,
M
.
y
=
H
,
b
.
uniform3f
(
N
.
screenPosition
,
I
.
x
,
I
.
y
,
I
.
z
),
b
.
uniform2f
(
N
.
scale
,
M
.
x
,
M
.
y
),
b
.
uniform1f
(
N
.
rotation
,
S
.
rotation
),
b
.
uniform1f
(
N
.
opacity
,
S
.
opacity
),
b
.
uniform3f
(
N
.
color
,
h
);
b
.
drawElements
(
b
.
TRIANGLES
,
6
,
b
.
UNSIGNED_SHORT
,
0
);
Y
.
positionScreen
.
copy
(
I
);
Y
.
customUpdateCallback
?
Y
.
customUpdateCallback
(
Y
):
Y
.
updateLensFlares
();
b
.
uniform1i
(
N
.
renderType
,
2
);
b
.
enable
(
b
.
BLEND
);
for
(
oa
=
0
,
ka
=
Y
.
lensFlares
.
length
;
oa
<
ka
;
oa
++
)
if
(
S
=
Y
.
lensFlares
[
oa
],
0.001
0
<
S
.
opacity
&&
0.0010
<
S
.
scale
)
I
.
x
=
S
.
x
,
I
.
y
=
S
.
y
,
I
.
z
=
S
.
z
,
H
=
S
.
size
*
S
.
scale
/
z
,
M
.
x
=
H
*
A
,
M
.
y
=
H
,
b
.
uniform3f
(
N
.
screenPosition
,
I
.
x
,
I
.
y
,
I
.
z
),
b
.
uniform2f
(
N
.
scale
,
M
.
x
,
M
.
y
),
b
.
uniform1f
(
N
.
rotation
,
S
.
rotation
),
b
.
uniform1f
(
N
.
opacity
,
S
.
opacity
),
b
.
uniform3f
(
N
.
color
,
S
.
color
.
r
,
S
.
color
.
g
,
S
.
color
.
b
),
c
.
setBlending
(
S
.
blending
,
S
.
blendEquation
,
S
.
blendSrc
,
S
.
blendDst
),
c
.
setTexture
(
S
.
texture
,
1
),
b
.
drawElements
(
b
.
TRIANGLES
,
6
,
b
.
UNSIGNED_SHORT
,
0
)}
b
.
enable
(
b
.
CULL_FACE
);
b
.
enable
(
b
.
DEPTH_TEST
);
b
.
depthMask
(
!
0
)}}};
THREE
.
ShadowMapPlugin
=
function
(){
var
a
,
b
,
c
,
d
,
f
=
new
THREE
.
Frustum
,
g
=
new
THREE
.
Matrix4
,
i
=
new
THREE
.
Vector3
,
h
=
new
THREE
.
Vector3
;
this
.
init
=
function
(
f
){
a
=
f
.
context
;
b
=
f
;
var
f
=
THREE
.
ShaderLib
.
depthRGBA
,
g
=
THREE
.
UniformsUtils
.
clone
(
f
.
uniforms
);
c
=
new
THREE
.
ShaderMaterial
({
fragmentShader
:
f
.
fragmentShader
,
vertexShader
:
f
.
vertexShader
,
uniforms
:
g
});
d
=
new
THREE
.
ShaderMaterial
({
fragmentShader
:
f
.
fragmentShader
,
vertexShader
:
f
.
vertexShader
,
uniforms
:
g
,
morphTargets
:
!
0
});
c
.
_shadowPass
=!
0
;
d
.
_shadowPass
=!
0
};
this
.
render
=
function
(
a
,
c
){
b
.
shadowMapEnabled
&&
b
.
shadowMapAutoUpdate
&&
this
.
update
(
a
,
c
)};
this
.
update
=
function
(
k
,
j
){
var
m
,
n
,
l
,
u
,
r
,
o
,
t
,
z
,
w
,
P
=
[];
u
=
0
;
a
.
clearColor
(
1
,
1
,
1
,
1
);
a
.
disable
(
a
.
BLEND
);
b
.
shadowMapCullFrontFaces
&&
a
.
cullFace
(
a
.
FRONT
);
b
.
setDepthTest
(
!
0
);
for
(
m
=
0
,
n
=
k
.
__lights
.
length
;
m
<
n
;
m
++
)
if
(
l
=
k
.
__lights
[
m
],
l
.
castShadow
)
if
(
l
instanceof
THREE
.
DirectionalLight
&&
l
.
shadowCascade
)
for
(
r
=
0
;
r
<
l
.
shadowCascadeCount
;
r
++
){
var
A
;
if
(
l
.
shadowCascadeArray
[
r
])
A
=
l
.
shadowCascadeArray
[
r
];
else
{
w
=
l
;
t
=
r
;
A
=
new
THREE
.
DirectionalLight
;
A
.
isVirtual
=
...
...
src/core/Geometry.js
浏览文件 @
3c98b094
...
...
@@ -437,8 +437,8 @@ THREE.Geometry.prototype = {
}
else
if
(
face
instanceof
THREE
.
Face4
)
{
handleTriangle
(
this
,
face
.
a
,
face
.
b
,
face
.
c
,
0
,
1
,
2
);
handleTriangle
(
this
,
face
.
a
,
face
.
b
,
face
.
d
,
0
,
1
,
3
);
handleTriangle
(
this
,
face
.
b
,
face
.
c
,
face
.
d
,
1
,
2
,
3
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录