Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
e4b75f1c
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,发现更多精彩内容 >>
提交
e4b75f1c
编写于
6月 03, 2011
作者:
A
alteredq
浏览文件
操作
浏览文件
下载
差异文件
Merged greggman's offset camera pull request.
上级
d2cbf83d
0d66e46e
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
638 addition
and
12 deletion
+638
-12
build/Three.js
build/Three.js
+3
-1
build/custom/ThreeCanvas.js
build/custom/ThreeCanvas.js
+6
-4
build/custom/ThreeDOM.js
build/custom/ThreeDOM.js
+4
-2
build/custom/ThreeSVG.js
build/custom/ThreeSVG.js
+4
-2
build/custom/ThreeWebGL.js
build/custom/ThreeWebGL.js
+3
-1
examples/webgl_multiple_canvases_complex.html
examples/webgl_multiple_canvases_complex.html
+264
-0
examples/webgl_multiple_canvases_grid.html
examples/webgl_multiple_canvases_grid.html
+280
-0
src/cameras/Camera.js
src/cameras/Camera.js
+73
-1
utils/build_all.bat
utils/build_all.bat
+1
-1
未找到文件。
build/Three.js
浏览文件 @
e4b75f1c
...
@@ -70,7 +70,9 @@ THREE.Spline=function(b){function c(b,e,c,f,j,g,k){b=(c-b)*0.5;f=(f-e)*0.5;retur
...
@@ -70,7 +70,9 @@ THREE.Spline=function(b){function c(b,e,c,f,j,g,k){b=(c-b)*0.5;f=(f-e)*0.5;retur
t
=
this
.
points
[
e
[
2
]];
u
=
this
.
points
[
e
[
3
]];
m
=
k
*
k
;
n
=
k
*
m
;
f
.
x
=
c
(
p
.
x
,
o
.
x
,
t
.
x
,
u
.
x
,
k
,
m
,
n
);
f
.
y
=
c
(
p
.
y
,
o
.
y
,
t
.
y
,
u
.
y
,
k
,
m
,
n
);
f
.
z
=
c
(
p
.
z
,
o
.
z
,
t
.
z
,
u
.
z
,
k
,
m
,
n
);
return
f
};
this
.
getControlPointsArray
=
function
(){
var
b
,
e
,
c
=
this
.
points
.
length
,
f
=
[];
for
(
b
=
0
;
b
<
c
;
b
++
)
e
=
this
.
points
[
b
],
f
[
b
]
=
[
e
.
x
,
e
.
y
,
e
.
z
];
return
f
};
this
.
getLength
=
function
(
b
){
var
e
,
c
,
f
=
e
=
e
=
0
,
j
=
new
THREE
.
Vector3
,
g
=
new
THREE
.
Vector3
,
k
=
[],
m
=
0
;
k
[
0
]
=
0
;
b
||
(
b
=
100
);
c
=
this
.
points
.
length
*
b
;
j
.
copy
(
this
.
points
[
0
]);
for
(
b
=
1
;
b
<
c
;
b
++
)
e
=
b
/
c
,
position
=
this
.
getPoint
(
e
),
g
.
copy
(
position
),
t
=
this
.
points
[
e
[
2
]];
u
=
this
.
points
[
e
[
3
]];
m
=
k
*
k
;
n
=
k
*
m
;
f
.
x
=
c
(
p
.
x
,
o
.
x
,
t
.
x
,
u
.
x
,
k
,
m
,
n
);
f
.
y
=
c
(
p
.
y
,
o
.
y
,
t
.
y
,
u
.
y
,
k
,
m
,
n
);
f
.
z
=
c
(
p
.
z
,
o
.
z
,
t
.
z
,
u
.
z
,
k
,
m
,
n
);
return
f
};
this
.
getControlPointsArray
=
function
(){
var
b
,
e
,
c
=
this
.
points
.
length
,
f
=
[];
for
(
b
=
0
;
b
<
c
;
b
++
)
e
=
this
.
points
[
b
],
f
[
b
]
=
[
e
.
x
,
e
.
y
,
e
.
z
];
return
f
};
this
.
getLength
=
function
(
b
){
var
e
,
c
,
f
=
e
=
e
=
0
,
j
=
new
THREE
.
Vector3
,
g
=
new
THREE
.
Vector3
,
k
=
[],
m
=
0
;
k
[
0
]
=
0
;
b
||
(
b
=
100
);
c
=
this
.
points
.
length
*
b
;
j
.
copy
(
this
.
points
[
0
]);
for
(
b
=
1
;
b
<
c
;
b
++
)
e
=
b
/
c
,
position
=
this
.
getPoint
(
e
),
g
.
copy
(
position
),
m
+=
g
.
distanceTo
(
j
),
j
.
copy
(
position
),
e
*=
this
.
points
.
length
-
1
,
e
=
Math
.
floor
(
e
),
e
!=
f
&&
(
k
[
e
]
=
m
,
f
=
e
);
k
[
k
.
length
]
=
m
;
return
{
chunks
:
k
,
total
:
m
}};
this
.
reparametrizeByArcLength
=
function
(
b
){
var
e
,
c
,
f
,
j
,
g
,
k
,
m
=
[],
n
=
new
THREE
.
Vector3
,
p
=
this
.
getLength
();
m
.
push
(
n
.
copy
(
this
.
points
[
0
]).
clone
());
for
(
e
=
1
;
e
<
this
.
points
.
length
;
e
++
){
c
=
p
.
chunks
[
e
]
-
p
.
chunks
[
e
-
1
];
k
=
Math
.
ceil
(
b
*
c
/
p
.
total
);
j
=
(
e
-
1
)
/
(
this
.
points
.
length
-
1
);
g
=
e
/
(
this
.
points
.
length
-
1
);
for
(
c
=
1
;
c
<
k
-
1
;
c
++
)
f
=
j
+
c
*
(
1
/
k
)
*
(
g
-
j
),
position
=
this
.
getPoint
(
f
),
m
.
push
(
n
.
copy
(
position
).
clone
());
m
+=
g
.
distanceTo
(
j
),
j
.
copy
(
position
),
e
*=
this
.
points
.
length
-
1
,
e
=
Math
.
floor
(
e
),
e
!=
f
&&
(
k
[
e
]
=
m
,
f
=
e
);
k
[
k
.
length
]
=
m
;
return
{
chunks
:
k
,
total
:
m
}};
this
.
reparametrizeByArcLength
=
function
(
b
){
var
e
,
c
,
f
,
j
,
g
,
k
,
m
=
[],
n
=
new
THREE
.
Vector3
,
p
=
this
.
getLength
();
m
.
push
(
n
.
copy
(
this
.
points
[
0
]).
clone
());
for
(
e
=
1
;
e
<
this
.
points
.
length
;
e
++
){
c
=
p
.
chunks
[
e
]
-
p
.
chunks
[
e
-
1
];
k
=
Math
.
ceil
(
b
*
c
/
p
.
total
);
j
=
(
e
-
1
)
/
(
this
.
points
.
length
-
1
);
g
=
e
/
(
this
.
points
.
length
-
1
);
for
(
c
=
1
;
c
<
k
-
1
;
c
++
)
f
=
j
+
c
*
(
1
/
k
)
*
(
g
-
j
),
position
=
this
.
getPoint
(
f
),
m
.
push
(
n
.
copy
(
position
).
clone
());
m
.
push
(
n
.
copy
(
this
.
points
[
e
]).
clone
())}
this
.
points
=
m
}};
THREE
.
Edge
=
function
(
b
,
c
,
e
,
f
){
this
.
vertices
=
[
b
,
c
];
this
.
vertexIndices
=
[
e
,
f
];
this
.
faces
=
[];
this
.
faceIndices
=
[]};
THREE
.
Camera
=
function
(
b
,
c
,
e
,
f
,
g
){
THREE
.
Object3D
.
call
(
this
);
this
.
fov
=
b
||
50
;
this
.
aspect
=
c
||
1
;
this
.
near
=
e
||
0.1
;
this
.
far
=
f
||
2
E3
;
this
.
target
=
g
||
new
THREE
.
Object3D
;
this
.
useTarget
=!
0
;
this
.
matrixWorldInverse
=
new
THREE
.
Matrix4
;
this
.
projectionMatrix
=
null
;
this
.
updateProjectionMatrix
()};
THREE
.
Camera
.
prototype
=
new
THREE
.
Object3D
;
m
.
push
(
n
.
copy
(
this
.
points
[
e
]).
clone
())}
this
.
points
=
m
}};
THREE
.
Edge
=
function
(
b
,
c
,
e
,
f
){
this
.
vertices
=
[
b
,
c
];
this
.
vertexIndices
=
[
e
,
f
];
this
.
faces
=
[];
this
.
faceIndices
=
[]};
THREE
.
Camera
=
function
(
b
,
c
,
e
,
f
,
g
){
THREE
.
Object3D
.
call
(
this
);
this
.
fov
=
b
||
50
;
this
.
aspect
=
c
||
1
;
this
.
near
=
e
||
0.1
;
this
.
far
=
f
||
2
E3
;
this
.
target
=
g
||
new
THREE
.
Object3D
;
this
.
useTarget
=!
0
;
this
.
matrixWorldInverse
=
new
THREE
.
Matrix4
;
this
.
projectionMatrix
=
null
;
this
.
updateProjectionMatrix
()};
THREE
.
Camera
.
prototype
=
new
THREE
.
Object3D
;
THREE
.
Camera
.
prototype
.
constructor
=
THREE
.
Camera
;
THREE
.
Camera
.
prototype
.
supr
=
THREE
.
Object3D
.
prototype
;
THREE
.
Camera
.
prototype
.
translate
=
function
(
b
,
c
){
this
.
matrix
.
rotateAxis
(
c
);
c
.
multiplyScalar
(
b
);
this
.
position
.
addSelf
(
c
);
this
.
target
.
position
.
addSelf
(
c
)};
THREE
.
Camera
.
prototype
.
updateProjectionMatrix
=
function
(){
this
.
projectionMatrix
=
THREE
.
Matrix4
.
makePerspective
(
this
.
fov
,
this
.
aspect
,
this
.
near
,
this
.
far
)};
THREE
.
Camera
.
prototype
.
constructor
=
THREE
.
Camera
;
THREE
.
Camera
.
prototype
.
supr
=
THREE
.
Object3D
.
prototype
;
THREE
.
Camera
.
prototype
.
translate
=
function
(
b
,
c
){
this
.
matrix
.
rotateAxis
(
c
);
c
.
multiplyScalar
(
b
);
this
.
position
.
addSelf
(
c
);
this
.
target
.
position
.
addSelf
(
c
)};
THREE
.
Camera
.
prototype
.
updateProjectionMatrix
=
function
(){
if
(
this
.
fullWidth
){
var
b
=
this
.
fullWidth
/
this
.
fullHeight
,
c
=
Math
.
tan
(
this
.
fov
*
Math
.
PI
/
360
)
*
this
.
near
,
e
=-
c
,
f
=
b
*
e
,
b
=
Math
.
abs
(
b
*
c
-
f
),
e
=
Math
.
abs
(
c
-
e
);
this
.
projectionMatrix
=
THREE
.
Matrix4
.
makeFrustum
(
f
+
this
.
x
*
b
/
this
.
fullWidth
,
f
+
(
this
.
x
+
this
.
width
)
*
b
/
this
.
fullWidth
,
c
-
(
this
.
y
+
this
.
height
)
*
e
/
this
.
fullHeight
,
c
-
this
.
y
*
e
/
this
.
fullHeight
,
this
.
near
,
this
.
far
)}
else
this
.
projectionMatrix
=
THREE
.
Matrix4
.
makePerspective
(
this
.
fov
,
this
.
aspect
,
this
.
near
,
this
.
far
)};
THREE
.
Camera
.
prototype
.
setViewOffset
=
function
(
b
,
c
,
e
,
f
,
g
,
j
){
this
.
fullWidth
=
b
;
this
.
fullHeight
=
c
;
this
.
x
=
e
;
this
.
y
=
f
;
this
.
width
=
g
;
this
.
height
=
j
;
this
.
updateProjectionMatrix
()};
THREE
.
Camera
.
prototype
.
update
=
function
(
b
,
c
,
e
){
if
(
this
.
useTarget
)
this
.
matrix
.
lookAt
(
this
.
position
,
this
.
target
.
position
,
this
.
up
),
this
.
matrix
.
setPosition
(
this
.
position
),
b
?
this
.
matrixWorld
.
multiply
(
b
,
this
.
matrix
):
this
.
matrixWorld
.
copy
(
this
.
matrix
),
THREE
.
Matrix4
.
makeInvert
(
this
.
matrixWorld
,
this
.
matrixWorldInverse
),
c
=!
0
;
else
if
(
this
.
matrixAutoUpdate
&&
this
.
updateMatrix
(),
c
||
this
.
matrixWorldNeedsUpdate
)
b
?
this
.
matrixWorld
.
multiply
(
b
,
this
.
matrix
):
this
.
matrixWorld
.
copy
(
this
.
matrix
),
this
.
matrixWorldNeedsUpdate
=
THREE
.
Camera
.
prototype
.
update
=
function
(
b
,
c
,
e
){
if
(
this
.
useTarget
)
this
.
matrix
.
lookAt
(
this
.
position
,
this
.
target
.
position
,
this
.
up
),
this
.
matrix
.
setPosition
(
this
.
position
),
b
?
this
.
matrixWorld
.
multiply
(
b
,
this
.
matrix
):
this
.
matrixWorld
.
copy
(
this
.
matrix
),
THREE
.
Matrix4
.
makeInvert
(
this
.
matrixWorld
,
this
.
matrixWorldInverse
),
c
=!
0
;
else
if
(
this
.
matrixAutoUpdate
&&
this
.
updateMatrix
(),
c
||
this
.
matrixWorldNeedsUpdate
)
b
?
this
.
matrixWorld
.
multiply
(
b
,
this
.
matrix
):
this
.
matrixWorld
.
copy
(
this
.
matrix
),
this
.
matrixWorldNeedsUpdate
=
!
1
,
c
=!
0
,
THREE
.
Matrix4
.
makeInvert
(
this
.
matrixWorld
,
this
.
matrixWorldInverse
);
for
(
b
=
0
;
b
<
this
.
children
.
length
;
b
++
)
this
.
children
[
b
].
update
(
this
.
matrixWorld
,
c
,
e
)};
THREE
.
Light
=
function
(
b
){
THREE
.
Object3D
.
call
(
this
);
this
.
color
=
new
THREE
.
Color
(
b
)};
THREE
.
Light
.
prototype
=
new
THREE
.
Object3D
;
THREE
.
Light
.
prototype
.
constructor
=
THREE
.
Light
;
THREE
.
Light
.
prototype
.
supr
=
THREE
.
Object3D
.
prototype
;
THREE
.
AmbientLight
=
function
(
b
){
THREE
.
Light
.
call
(
this
,
b
)};
THREE
.
AmbientLight
.
prototype
=
new
THREE
.
Light
;
!
1
,
c
=!
0
,
THREE
.
Matrix4
.
makeInvert
(
this
.
matrixWorld
,
this
.
matrixWorldInverse
);
for
(
b
=
0
;
b
<
this
.
children
.
length
;
b
++
)
this
.
children
[
b
].
update
(
this
.
matrixWorld
,
c
,
e
)};
THREE
.
Light
=
function
(
b
){
THREE
.
Object3D
.
call
(
this
);
this
.
color
=
new
THREE
.
Color
(
b
)};
THREE
.
Light
.
prototype
=
new
THREE
.
Object3D
;
THREE
.
Light
.
prototype
.
constructor
=
THREE
.
Light
;
THREE
.
Light
.
prototype
.
supr
=
THREE
.
Object3D
.
prototype
;
THREE
.
AmbientLight
=
function
(
b
){
THREE
.
Light
.
call
(
this
,
b
)};
THREE
.
AmbientLight
.
prototype
=
new
THREE
.
Light
;
THREE
.
AmbientLight
.
prototype
.
constructor
=
THREE
.
AmbientLight
;
THREE
.
DirectionalLight
=
function
(
b
,
c
,
e
,
f
){
THREE
.
Light
.
call
(
this
,
b
);
this
.
position
=
new
THREE
.
Vector3
(
0
,
1
,
0
);
this
.
intensity
=
c
||
1
;
this
.
distance
=
e
||
0
;
this
.
castShadow
=
f
!==
void
0
?
f
:
!
1
};
THREE
.
DirectionalLight
.
prototype
=
new
THREE
.
Light
;
THREE
.
DirectionalLight
.
prototype
.
constructor
=
THREE
.
DirectionalLight
;
THREE
.
PointLight
=
function
(
b
,
c
,
e
){
THREE
.
Light
.
call
(
this
,
b
);
this
.
position
=
new
THREE
.
Vector3
;
this
.
intensity
=
c
||
1
;
this
.
distance
=
e
||
0
};
THREE
.
AmbientLight
.
prototype
.
constructor
=
THREE
.
AmbientLight
;
THREE
.
DirectionalLight
=
function
(
b
,
c
,
e
,
f
){
THREE
.
Light
.
call
(
this
,
b
);
this
.
position
=
new
THREE
.
Vector3
(
0
,
1
,
0
);
this
.
intensity
=
c
||
1
;
this
.
distance
=
e
||
0
;
this
.
castShadow
=
f
!==
void
0
?
f
:
!
1
};
THREE
.
DirectionalLight
.
prototype
=
new
THREE
.
Light
;
THREE
.
DirectionalLight
.
prototype
.
constructor
=
THREE
.
DirectionalLight
;
THREE
.
PointLight
=
function
(
b
,
c
,
e
){
THREE
.
Light
.
call
(
this
,
b
);
this
.
position
=
new
THREE
.
Vector3
;
this
.
intensity
=
c
||
1
;
this
.
distance
=
e
||
0
};
...
...
build/custom/ThreeCanvas.js
浏览文件 @
e4b75f1c
...
@@ -66,7 +66,9 @@ if(this.vertices.length>0){this.boundingBox={x:[this.vertices[0].position.x,this
...
@@ -66,7 +66,9 @@ if(this.vertices.length>0){this.boundingBox={x:[this.vertices[0].position.x,this
else
if
(
a
.
position
.
y
>
this
.
boundingBox
.
y
[
1
])
this
.
boundingBox
.
y
[
1
]
=
a
.
position
.
y
;
if
(
a
.
position
.
z
<
this
.
boundingBox
.
z
[
0
])
this
.
boundingBox
.
z
[
0
]
=
a
.
position
.
z
;
else
if
(
a
.
position
.
z
>
this
.
boundingBox
.
z
[
1
])
this
.
boundingBox
.
z
[
1
]
=
a
.
position
.
z
}}},
computeBoundingSphere
:
function
(){
for
(
var
a
=
0
,
b
=
0
,
c
=
this
.
vertices
.
length
;
b
<
c
;
b
++
)
a
=
Math
.
max
(
a
,
this
.
vertices
[
b
].
position
.
length
());
this
.
boundingSphere
=
{
radius
:
a
}},
computeEdgeFaces
:
function
(){
function
a
(
a
,
b
){
return
Math
.
min
(
a
,
b
)
+
"
_
"
+
Math
.
max
(
a
,
b
)}
function
b
(
a
,
b
,
c
){
a
[
b
]
===
else
if
(
a
.
position
.
y
>
this
.
boundingBox
.
y
[
1
])
this
.
boundingBox
.
y
[
1
]
=
a
.
position
.
y
;
if
(
a
.
position
.
z
<
this
.
boundingBox
.
z
[
0
])
this
.
boundingBox
.
z
[
0
]
=
a
.
position
.
z
;
else
if
(
a
.
position
.
z
>
this
.
boundingBox
.
z
[
1
])
this
.
boundingBox
.
z
[
1
]
=
a
.
position
.
z
}}},
computeBoundingSphere
:
function
(){
for
(
var
a
=
0
,
b
=
0
,
c
=
this
.
vertices
.
length
;
b
<
c
;
b
++
)
a
=
Math
.
max
(
a
,
this
.
vertices
[
b
].
position
.
length
());
this
.
boundingSphere
=
{
radius
:
a
}},
computeEdgeFaces
:
function
(){
function
a
(
a
,
b
){
return
Math
.
min
(
a
,
b
)
+
"
_
"
+
Math
.
max
(
a
,
b
)}
function
b
(
a
,
b
,
c
){
a
[
b
]
===
void
0
?(
a
[
b
]
=
{
set
:{},
array
:[]},
a
[
b
].
set
[
c
]
=
1
,
a
[
b
].
array
.
push
(
c
)):
a
[
b
].
set
[
c
]
===
void
0
&&
(
a
[
b
].
set
[
c
]
=
1
,
a
[
b
].
array
.
push
(
c
))}
var
c
,
d
,
e
,
g
,
f
,
h
=
{};
c
=
0
;
for
(
d
=
this
.
faces
.
length
;
c
<
d
;
c
++
)
f
=
this
.
faces
[
c
],
f
instanceof
THREE
.
Face3
?(
e
=
a
(
f
.
a
,
f
.
b
),
b
(
h
,
e
,
c
),
e
=
a
(
f
.
b
,
f
.
c
),
b
(
h
,
e
,
c
),
e
=
a
(
f
.
a
,
f
.
c
),
b
(
h
,
e
,
c
)):
f
instanceof
THREE
.
Face4
&&
(
e
=
a
(
f
.
b
,
f
.
d
),
b
(
h
,
e
,
c
),
e
=
a
(
f
.
a
,
f
.
b
),
b
(
h
,
e
,
c
),
e
=
a
(
f
.
a
,
f
.
d
),
b
(
h
,
e
,
c
),
e
=
a
(
f
.
b
,
f
.
c
),
b
(
h
,
e
,
c
),
e
=
a
(
f
.
c
,
f
.
d
),
b
(
h
,
e
,
c
));
c
=
0
;
for
(
d
=
this
.
edges
.
length
;
c
<
d
;
c
++
){
f
=
this
.
edges
[
c
];
e
=
f
.
vertexIndices
[
0
];
g
=
f
.
vertexIndices
[
1
];
void
0
?(
a
[
b
]
=
{
set
:{},
array
:[]},
a
[
b
].
set
[
c
]
=
1
,
a
[
b
].
array
.
push
(
c
)):
a
[
b
].
set
[
c
]
===
void
0
&&
(
a
[
b
].
set
[
c
]
=
1
,
a
[
b
].
array
.
push
(
c
))}
var
c
,
d
,
e
,
g
,
f
,
h
=
{};
c
=
0
;
for
(
d
=
this
.
faces
.
length
;
c
<
d
;
c
++
)
f
=
this
.
faces
[
c
],
f
instanceof
THREE
.
Face3
?(
e
=
a
(
f
.
a
,
f
.
b
),
b
(
h
,
e
,
c
),
e
=
a
(
f
.
b
,
f
.
c
),
b
(
h
,
e
,
c
),
e
=
a
(
f
.
a
,
f
.
c
),
b
(
h
,
e
,
c
)):
f
instanceof
THREE
.
Face4
&&
(
e
=
a
(
f
.
b
,
f
.
d
),
b
(
h
,
e
,
c
),
e
=
a
(
f
.
a
,
f
.
b
),
b
(
h
,
e
,
c
),
e
=
a
(
f
.
a
,
f
.
d
),
b
(
h
,
e
,
c
),
e
=
a
(
f
.
b
,
f
.
c
),
b
(
h
,
e
,
c
),
e
=
a
(
f
.
c
,
f
.
d
),
b
(
h
,
e
,
c
));
c
=
0
;
for
(
d
=
this
.
edges
.
length
;
c
<
d
;
c
++
){
f
=
this
.
edges
[
c
];
e
=
f
.
vertexIndices
[
0
];
g
=
f
.
vertexIndices
[
1
];
f
.
faceIndices
=
h
[
a
(
e
,
g
)].
array
;
for
(
e
=
0
;
e
<
f
.
faceIndices
.
length
;
e
++
)
g
=
f
.
faceIndices
[
e
],
f
.
faces
.
push
(
this
.
faces
[
g
])}}};
THREE
.
GeometryIdCounter
=
0
;
THREE
.
Camera
=
function
(
a
,
b
,
c
,
d
,
e
){
THREE
.
Object3D
.
call
(
this
);
this
.
fov
=
a
||
50
;
this
.
aspect
=
b
||
1
;
this
.
near
=
c
||
0.1
;
this
.
far
=
d
||
2
E3
;
this
.
target
=
e
||
new
THREE
.
Object3D
;
this
.
useTarget
=!
0
;
this
.
matrixWorldInverse
=
new
THREE
.
Matrix4
;
this
.
projectionMatrix
=
null
;
this
.
updateProjectionMatrix
()};
THREE
.
Camera
.
prototype
=
new
THREE
.
Object3D
;
THREE
.
Camera
.
prototype
.
constructor
=
THREE
.
Camera
;
f
.
faceIndices
=
h
[
a
(
e
,
g
)].
array
;
for
(
e
=
0
;
e
<
f
.
faceIndices
.
length
;
e
++
)
g
=
f
.
faceIndices
[
e
],
f
.
faces
.
push
(
this
.
faces
[
g
])}}};
THREE
.
GeometryIdCounter
=
0
;
THREE
.
Camera
=
function
(
a
,
b
,
c
,
d
,
e
){
THREE
.
Object3D
.
call
(
this
);
this
.
fov
=
a
||
50
;
this
.
aspect
=
b
||
1
;
this
.
near
=
c
||
0.1
;
this
.
far
=
d
||
2
E3
;
this
.
target
=
e
||
new
THREE
.
Object3D
;
this
.
useTarget
=!
0
;
this
.
matrixWorldInverse
=
new
THREE
.
Matrix4
;
this
.
projectionMatrix
=
null
;
this
.
updateProjectionMatrix
()};
THREE
.
Camera
.
prototype
=
new
THREE
.
Object3D
;
THREE
.
Camera
.
prototype
.
constructor
=
THREE
.
Camera
;
THREE
.
Camera
.
prototype
.
supr
=
THREE
.
Object3D
.
prototype
;
THREE
.
Camera
.
prototype
.
translate
=
function
(
a
,
b
){
this
.
matrix
.
rotateAxis
(
b
);
b
.
multiplyScalar
(
a
);
this
.
position
.
addSelf
(
b
);
this
.
target
.
position
.
addSelf
(
b
)};
THREE
.
Camera
.
prototype
.
updateProjectionMatrix
=
function
(){
this
.
projectionMatrix
=
THREE
.
Matrix4
.
makePerspective
(
this
.
fov
,
this
.
aspect
,
this
.
near
,
this
.
far
)};
THREE
.
Camera
.
prototype
.
supr
=
THREE
.
Object3D
.
prototype
;
THREE
.
Camera
.
prototype
.
translate
=
function
(
a
,
b
){
this
.
matrix
.
rotateAxis
(
b
);
b
.
multiplyScalar
(
a
);
this
.
position
.
addSelf
(
b
);
this
.
target
.
position
.
addSelf
(
b
)};
THREE
.
Camera
.
prototype
.
updateProjectionMatrix
=
function
(){
if
(
this
.
fullWidth
){
var
a
=
this
.
fullWidth
/
this
.
fullHeight
,
b
=
Math
.
tan
(
this
.
fov
*
Math
.
PI
/
360
)
*
this
.
near
,
c
=-
b
,
d
=
a
*
c
,
a
=
Math
.
abs
(
a
*
b
-
d
),
c
=
Math
.
abs
(
b
-
c
);
this
.
projectionMatrix
=
THREE
.
Matrix4
.
makeFrustum
(
d
+
this
.
x
*
a
/
this
.
fullWidth
,
d
+
(
this
.
x
+
this
.
width
)
*
a
/
this
.
fullWidth
,
b
-
(
this
.
y
+
this
.
height
)
*
c
/
this
.
fullHeight
,
b
-
this
.
y
*
c
/
this
.
fullHeight
,
this
.
near
,
this
.
far
)}
else
this
.
projectionMatrix
=
THREE
.
Matrix4
.
makePerspective
(
this
.
fov
,
this
.
aspect
,
this
.
near
,
this
.
far
)};
THREE
.
Camera
.
prototype
.
setViewOffset
=
function
(
a
,
b
,
c
,
d
,
e
,
g
){
this
.
fullWidth
=
a
;
this
.
fullHeight
=
b
;
this
.
x
=
c
;
this
.
y
=
d
;
this
.
width
=
e
;
this
.
height
=
g
;
this
.
updateProjectionMatrix
()};
THREE
.
Camera
.
prototype
.
update
=
function
(
a
,
b
,
c
){
if
(
this
.
useTarget
)
this
.
matrix
.
lookAt
(
this
.
position
,
this
.
target
.
position
,
this
.
up
),
this
.
matrix
.
setPosition
(
this
.
position
),
a
?
this
.
matrixWorld
.
multiply
(
a
,
this
.
matrix
):
this
.
matrixWorld
.
copy
(
this
.
matrix
),
THREE
.
Matrix4
.
makeInvert
(
this
.
matrixWorld
,
this
.
matrixWorldInverse
),
b
=!
0
;
else
if
(
this
.
matrixAutoUpdate
&&
this
.
updateMatrix
(),
b
||
this
.
matrixWorldNeedsUpdate
)
a
?
this
.
matrixWorld
.
multiply
(
a
,
this
.
matrix
):
this
.
matrixWorld
.
copy
(
this
.
matrix
),
this
.
matrixWorldNeedsUpdate
=
THREE
.
Camera
.
prototype
.
update
=
function
(
a
,
b
,
c
){
if
(
this
.
useTarget
)
this
.
matrix
.
lookAt
(
this
.
position
,
this
.
target
.
position
,
this
.
up
),
this
.
matrix
.
setPosition
(
this
.
position
),
a
?
this
.
matrixWorld
.
multiply
(
a
,
this
.
matrix
):
this
.
matrixWorld
.
copy
(
this
.
matrix
),
THREE
.
Matrix4
.
makeInvert
(
this
.
matrixWorld
,
this
.
matrixWorldInverse
),
b
=!
0
;
else
if
(
this
.
matrixAutoUpdate
&&
this
.
updateMatrix
(),
b
||
this
.
matrixWorldNeedsUpdate
)
a
?
this
.
matrixWorld
.
multiply
(
a
,
this
.
matrix
):
this
.
matrixWorld
.
copy
(
this
.
matrix
),
this
.
matrixWorldNeedsUpdate
=
!
1
,
b
=!
0
,
THREE
.
Matrix4
.
makeInvert
(
this
.
matrixWorld
,
this
.
matrixWorldInverse
);
for
(
a
=
0
;
a
<
this
.
children
.
length
;
a
++
)
this
.
children
[
a
].
update
(
this
.
matrixWorld
,
b
,
c
)};
THREE
.
Light
=
function
(
a
){
THREE
.
Object3D
.
call
(
this
);
this
.
color
=
new
THREE
.
Color
(
a
)};
THREE
.
Light
.
prototype
=
new
THREE
.
Object3D
;
THREE
.
Light
.
prototype
.
constructor
=
THREE
.
Light
;
THREE
.
Light
.
prototype
.
supr
=
THREE
.
Object3D
.
prototype
;
THREE
.
AmbientLight
=
function
(
a
){
THREE
.
Light
.
call
(
this
,
a
)};
THREE
.
AmbientLight
.
prototype
=
new
THREE
.
Light
;
!
1
,
b
=!
0
,
THREE
.
Matrix4
.
makeInvert
(
this
.
matrixWorld
,
this
.
matrixWorldInverse
);
for
(
a
=
0
;
a
<
this
.
children
.
length
;
a
++
)
this
.
children
[
a
].
update
(
this
.
matrixWorld
,
b
,
c
)};
THREE
.
Light
=
function
(
a
){
THREE
.
Object3D
.
call
(
this
);
this
.
color
=
new
THREE
.
Color
(
a
)};
THREE
.
Light
.
prototype
=
new
THREE
.
Object3D
;
THREE
.
Light
.
prototype
.
constructor
=
THREE
.
Light
;
THREE
.
Light
.
prototype
.
supr
=
THREE
.
Object3D
.
prototype
;
THREE
.
AmbientLight
=
function
(
a
){
THREE
.
Light
.
call
(
this
,
a
)};
THREE
.
AmbientLight
.
prototype
=
new
THREE
.
Light
;
THREE
.
AmbientLight
.
prototype
.
constructor
=
THREE
.
AmbientLight
;
THREE
.
DirectionalLight
=
function
(
a
,
b
,
c
,
d
){
THREE
.
Light
.
call
(
this
,
a
);
this
.
position
=
new
THREE
.
Vector3
(
0
,
1
,
0
);
this
.
intensity
=
b
||
1
;
this
.
distance
=
c
||
0
;
this
.
castShadow
=
d
!==
void
0
?
d
:
!
1
};
THREE
.
DirectionalLight
.
prototype
=
new
THREE
.
Light
;
THREE
.
DirectionalLight
.
prototype
.
constructor
=
THREE
.
DirectionalLight
;
THREE
.
PointLight
=
function
(
a
,
b
,
c
){
THREE
.
Light
.
call
(
this
,
a
);
this
.
position
=
new
THREE
.
Vector3
;
this
.
intensity
=
b
||
1
;
this
.
distance
=
c
||
0
};
THREE
.
AmbientLight
.
prototype
.
constructor
=
THREE
.
AmbientLight
;
THREE
.
DirectionalLight
=
function
(
a
,
b
,
c
,
d
){
THREE
.
Light
.
call
(
this
,
a
);
this
.
position
=
new
THREE
.
Vector3
(
0
,
1
,
0
);
this
.
intensity
=
b
||
1
;
this
.
distance
=
c
||
0
;
this
.
castShadow
=
d
!==
void
0
?
d
:
!
1
};
THREE
.
DirectionalLight
.
prototype
=
new
THREE
.
Light
;
THREE
.
DirectionalLight
.
prototype
.
constructor
=
THREE
.
DirectionalLight
;
THREE
.
PointLight
=
function
(
a
,
b
,
c
){
THREE
.
Light
.
call
(
this
,
a
);
this
.
position
=
new
THREE
.
Vector3
;
this
.
intensity
=
b
||
1
;
this
.
distance
=
c
||
0
};
...
@@ -104,7 +106,7 @@ THREE.Scene=function(){THREE.Object3D.call(this);this.matrixAutoUpdate=!1;this.c
...
@@ -104,7 +106,7 @@ THREE.Scene=function(){THREE.Object3D.call(this);this.matrixAutoUpdate=!1;this.c
THREE
.
Scene
.
prototype
.
addChildRecurse
=
function
(
a
){
if
(
a
instanceof
THREE
.
Light
)
this
.
lights
.
indexOf
(
a
)
===-
1
&&
this
.
lights
.
push
(
a
);
else
if
(
a
instanceof
THREE
.
Sound
)
this
.
sounds
.
indexOf
(
a
)
===-
1
&&
this
.
sounds
.
push
(
a
);
else
if
(
!
(
a
instanceof
THREE
.
Camera
||
a
instanceof
THREE
.
Bone
)
&&
this
.
objects
.
indexOf
(
a
)
===-
1
)
this
.
objects
.
push
(
a
),
this
.
__objectsAdded
.
push
(
a
);
for
(
var
b
=
0
;
b
<
a
.
children
.
length
;
b
++
)
this
.
addChildRecurse
(
a
.
children
[
b
])};
THREE
.
Scene
.
prototype
.
addChildRecurse
=
function
(
a
){
if
(
a
instanceof
THREE
.
Light
)
this
.
lights
.
indexOf
(
a
)
===-
1
&&
this
.
lights
.
push
(
a
);
else
if
(
a
instanceof
THREE
.
Sound
)
this
.
sounds
.
indexOf
(
a
)
===-
1
&&
this
.
sounds
.
push
(
a
);
else
if
(
!
(
a
instanceof
THREE
.
Camera
||
a
instanceof
THREE
.
Bone
)
&&
this
.
objects
.
indexOf
(
a
)
===-
1
)
this
.
objects
.
push
(
a
),
this
.
__objectsAdded
.
push
(
a
);
for
(
var
b
=
0
;
b
<
a
.
children
.
length
;
b
++
)
this
.
addChildRecurse
(
a
.
children
[
b
])};
THREE
.
Scene
.
prototype
.
removeChild
=
function
(
a
){
this
.
supr
.
removeChild
.
call
(
this
,
a
);
this
.
removeChildRecurse
(
a
)};
THREE
.
Scene
.
prototype
.
removeChildRecurse
=
function
(
a
){
if
(
a
instanceof
THREE
.
Light
){
var
b
=
this
.
lights
.
indexOf
(
a
);
b
!==-
1
&&
this
.
lights
.
splice
(
b
,
1
)}
else
a
instanceof
THREE
.
Sound
?(
b
=
this
.
sounds
.
indexOf
(
a
),
b
!==-
1
&&
this
.
sounds
.
splice
(
b
,
1
)):
a
instanceof
THREE
.
Camera
||
(
b
=
this
.
objects
.
indexOf
(
a
),
b
!==-
1
&&
(
this
.
objects
.
splice
(
b
,
1
),
this
.
__objectsRemoved
.
push
(
a
)));
for
(
b
=
0
;
b
<
a
.
children
.
length
;
b
++
)
this
.
removeChildRecurse
(
a
.
children
[
b
])};
THREE
.
Scene
.
prototype
.
removeChild
=
function
(
a
){
this
.
supr
.
removeChild
.
call
(
this
,
a
);
this
.
removeChildRecurse
(
a
)};
THREE
.
Scene
.
prototype
.
removeChildRecurse
=
function
(
a
){
if
(
a
instanceof
THREE
.
Light
){
var
b
=
this
.
lights
.
indexOf
(
a
);
b
!==-
1
&&
this
.
lights
.
splice
(
b
,
1
)}
else
a
instanceof
THREE
.
Sound
?(
b
=
this
.
sounds
.
indexOf
(
a
),
b
!==-
1
&&
this
.
sounds
.
splice
(
b
,
1
)):
a
instanceof
THREE
.
Camera
||
(
b
=
this
.
objects
.
indexOf
(
a
),
b
!==-
1
&&
(
this
.
objects
.
splice
(
b
,
1
),
this
.
__objectsRemoved
.
push
(
a
)));
for
(
b
=
0
;
b
<
a
.
children
.
length
;
b
++
)
this
.
removeChildRecurse
(
a
.
children
[
b
])};
THREE
.
Scene
.
prototype
.
addObject
=
THREE
.
Scene
.
prototype
.
addChild
;
THREE
.
Scene
.
prototype
.
removeObject
=
THREE
.
Scene
.
prototype
.
removeChild
;
THREE
.
Scene
.
prototype
.
addLight
=
THREE
.
Scene
.
prototype
.
addChild
;
THREE
.
Scene
.
prototype
.
removeLight
=
THREE
.
Scene
.
prototype
.
removeChild
;
THREE
.
Scene
.
prototype
.
addObject
=
THREE
.
Scene
.
prototype
.
addChild
;
THREE
.
Scene
.
prototype
.
removeObject
=
THREE
.
Scene
.
prototype
.
removeChild
;
THREE
.
Scene
.
prototype
.
addLight
=
THREE
.
Scene
.
prototype
.
addChild
;
THREE
.
Scene
.
prototype
.
removeLight
=
THREE
.
Scene
.
prototype
.
removeChild
;
THREE
.
Projector
=
function
(){
function
a
(){
var
a
=
j
[
h
]
=
j
[
h
]
||
new
THREE
.
RenderableVertex
;
h
++
;
return
a
}
function
b
(
a
,
b
){
return
b
.
z
-
a
.
z
}
function
c
(
a
,
b
){
var
c
=
0
,
d
=
1
,
f
=
a
.
z
+
a
.
w
,
e
=
b
.
z
+
b
.
w
,
g
=-
a
.
z
+
a
.
w
,
h
=-
b
.
z
+
b
.
w
;
return
f
>=
0
&&
e
>=
0
&&
g
>=
0
&&
h
>=
0
?
!
0
:
f
<
0
&&
e
<
0
||
g
<
0
&&
h
<
0
?
!
1
:(
f
<
0
?
c
=
Math
.
max
(
c
,
f
/
(
f
-
e
)):
e
<
0
&&
(
d
=
Math
.
min
(
d
,
f
/
(
f
-
e
))),
g
<
0
?
c
=
Math
.
max
(
c
,
g
/
(
g
-
h
)):
h
<
0
&&
(
d
=
Math
.
min
(
d
,
g
/
(
g
-
h
))),
d
<
c
?
!
1
:(
a
.
lerpSelf
(
b
,
c
),
b
.
lerpSelf
(
a
,
1
-
d
),
!
0
))}
var
d
,
e
,
g
=
[],
f
,
h
,
j
=
[],
k
,
m
,
p
=
[],
l
,
n
=
[],
i
,
q
,
v
=
[],
t
,
G
,
K
=
[],
x
=
new
THREE
.
Vector4
,
B
=
new
THREE
.
Vector4
,
THREE
.
Projector
=
function
(){
function
a
(){
var
a
=
j
[
h
]
=
j
[
h
]
||
new
THREE
.
RenderableVertex
;
h
++
;
return
a
}
function
b
(
a
,
b
){
return
b
.
z
-
a
.
z
}
function
c
(
a
,
b
){
var
c
=
0
,
d
=
1
,
e
=
a
.
z
+
a
.
w
,
f
=
b
.
z
+
b
.
w
,
g
=-
a
.
z
+
a
.
w
,
h
=-
b
.
z
+
b
.
w
;
return
e
>=
0
&&
f
>=
0
&&
g
>=
0
&&
h
>=
0
?
!
0
:
e
<
0
&&
f
<
0
||
g
<
0
&&
h
<
0
?
!
1
:(
e
<
0
?
c
=
Math
.
max
(
c
,
e
/
(
e
-
f
)):
f
<
0
&&
(
d
=
Math
.
min
(
d
,
e
/
(
e
-
f
))),
g
<
0
?
c
=
Math
.
max
(
c
,
g
/
(
g
-
h
)):
h
<
0
&&
(
d
=
Math
.
min
(
d
,
g
/
(
g
-
h
))),
d
<
c
?
!
1
:(
a
.
lerpSelf
(
b
,
c
),
b
.
lerpSelf
(
a
,
1
-
d
),
!
0
))}
var
d
,
e
,
g
=
[],
f
,
h
,
j
=
[],
k
,
m
,
p
=
[],
l
,
n
=
[],
i
,
q
,
v
=
[],
t
,
G
,
K
=
[],
x
=
new
THREE
.
Vector4
,
B
=
new
THREE
.
Vector4
,
o
=
new
THREE
.
Matrix4
,
M
=
new
THREE
.
Matrix4
,
r
=
[
new
THREE
.
Vector4
,
new
THREE
.
Vector4
,
new
THREE
.
Vector4
,
new
THREE
.
Vector4
,
new
THREE
.
Vector4
,
new
THREE
.
Vector4
],
u
=
new
THREE
.
Vector4
,
y
=
new
THREE
.
Vector4
;
this
.
projectVector
=
function
(
a
,
b
){
o
.
multiply
(
b
.
projectionMatrix
,
b
.
matrixWorldInverse
);
o
.
multiplyVector3
(
a
);
return
a
};
this
.
unprojectVector
=
function
(
a
,
b
){
o
.
multiply
(
b
.
matrixWorld
,
THREE
.
Matrix4
.
makeInvert
(
b
.
projectionMatrix
));
o
.
multiplyVector3
(
a
);
return
a
};
this
.
projectObjects
=
function
(
a
,
c
,
f
){
var
c
=
[],
h
,
i
,
l
;
e
=
0
;
i
=
o
=
new
THREE
.
Matrix4
,
M
=
new
THREE
.
Matrix4
,
r
=
[
new
THREE
.
Vector4
,
new
THREE
.
Vector4
,
new
THREE
.
Vector4
,
new
THREE
.
Vector4
,
new
THREE
.
Vector4
,
new
THREE
.
Vector4
],
u
=
new
THREE
.
Vector4
,
y
=
new
THREE
.
Vector4
;
this
.
projectVector
=
function
(
a
,
b
){
o
.
multiply
(
b
.
projectionMatrix
,
b
.
matrixWorldInverse
);
o
.
multiplyVector3
(
a
);
return
a
};
this
.
unprojectVector
=
function
(
a
,
b
){
o
.
multiply
(
b
.
matrixWorld
,
THREE
.
Matrix4
.
makeInvert
(
b
.
projectionMatrix
));
o
.
multiplyVector3
(
a
);
return
a
};
this
.
projectObjects
=
function
(
a
,
c
,
f
){
var
c
=
[],
h
,
i
,
l
;
e
=
0
;
i
=
a
.
objects
;
a
=
0
;
for
(
h
=
i
.
length
;
a
<
h
;
a
++
){
l
=
i
[
a
];
var
k
;
if
(
!
(
k
=!
l
.
visible
))
if
(
k
=
l
instanceof
THREE
.
Mesh
){
a
:{
k
=
void
0
;
for
(
var
j
=
l
.
matrixWorld
,
n
=-
l
.
geometry
.
boundingSphere
.
radius
*
Math
.
max
(
l
.
scale
.
x
,
Math
.
max
(
l
.
scale
.
y
,
l
.
scale
.
z
)),
m
=
0
;
m
<
6
;
m
++
)
if
(
k
=
r
[
m
].
x
*
j
.
n14
+
r
[
m
].
y
*
j
.
n24
+
r
[
m
].
z
*
j
.
n34
+
r
[
m
].
w
,
k
<=
n
){
k
=!
1
;
break
a
}
k
=!
0
}
k
=!
k
}
if
(
!
k
)
k
=
g
[
e
]
=
g
[
e
]
||
new
THREE
.
RenderableObject
,
e
++
,
d
=
k
,
x
.
copy
(
l
.
position
),
o
.
multiplyVector3
(
x
),
d
.
object
=
l
,
d
.
z
=
x
.
z
,
c
.
push
(
d
)}
f
&&
c
.
sort
(
b
);
return
c
};
this
.
projectScene
=
function
(
d
,
e
,
g
){
var
I
=
[],
a
.
objects
;
a
=
0
;
for
(
h
=
i
.
length
;
a
<
h
;
a
++
){
l
=
i
[
a
];
var
k
;
if
(
!
(
k
=!
l
.
visible
))
if
(
k
=
l
instanceof
THREE
.
Mesh
){
a
:{
k
=
void
0
;
for
(
var
j
=
l
.
matrixWorld
,
n
=-
l
.
geometry
.
boundingSphere
.
radius
*
Math
.
max
(
l
.
scale
.
x
,
Math
.
max
(
l
.
scale
.
y
,
l
.
scale
.
z
)),
m
=
0
;
m
<
6
;
m
++
)
if
(
k
=
r
[
m
].
x
*
j
.
n14
+
r
[
m
].
y
*
j
.
n24
+
r
[
m
].
z
*
j
.
n34
+
r
[
m
].
w
,
k
<=
n
){
k
=!
1
;
break
a
}
k
=!
0
}
k
=!
k
}
if
(
!
k
)
k
=
g
[
e
]
=
g
[
e
]
||
new
THREE
.
RenderableObject
,
e
++
,
d
=
k
,
x
.
copy
(
l
.
position
),
o
.
multiplyVector3
(
x
),
d
.
object
=
l
,
d
.
z
=
x
.
z
,
c
.
push
(
d
)}
f
&&
c
.
sort
(
b
);
return
c
};
this
.
projectScene
=
function
(
d
,
e
,
g
){
var
I
=
[],
O
=
e
.
near
,
R
=
e
.
far
,
L
,
D
,
z
,
N
,
w
,
J
,
H
,
S
,
x
,
s
,
E
,
C
,
F
,
T
,
W
,
ca
,
X
;
G
=
q
=
l
=
m
=
0
;
e
.
matrixAutoUpdate
&&
e
.
update
(
void
0
,
!
0
);
d
.
update
(
void
0
,
!
1
,
e
);
o
.
multiply
(
e
.
projectionMatrix
,
e
.
matrixWorldInverse
);
r
[
0
].
set
(
o
.
n41
-
o
.
n11
,
o
.
n42
-
o
.
n12
,
o
.
n43
-
o
.
n13
,
o
.
n44
-
o
.
n14
);
r
[
1
].
set
(
o
.
n41
+
o
.
n11
,
o
.
n42
+
o
.
n12
,
o
.
n43
+
o
.
n13
,
o
.
n44
+
o
.
n14
);
r
[
2
].
set
(
o
.
n41
+
o
.
n21
,
o
.
n42
+
o
.
n22
,
o
.
n43
+
o
.
n23
,
o
.
n44
+
o
.
n24
);
r
[
3
].
set
(
o
.
n41
-
o
.
n21
,
o
.
n42
-
o
.
n22
,
o
.
n43
-
o
.
n23
,
o
.
n44
-
o
.
n24
);
r
[
4
].
set
(
o
.
n41
-
o
.
n31
,
o
.
n42
-
o
.
n32
,
o
.
n43
-
o
.
n33
,
o
.
n44
-
o
.
n34
);
r
[
5
].
set
(
o
.
n41
+
o
.
n31
,
o
.
n42
+
o
.
n32
,
o
.
n43
+
O
=
e
.
near
,
R
=
e
.
far
,
L
,
D
,
z
,
N
,
w
,
J
,
H
,
S
,
x
,
s
,
E
,
C
,
F
,
T
,
W
,
ca
,
X
;
G
=
q
=
l
=
m
=
0
;
e
.
matrixAutoUpdate
&&
e
.
update
(
void
0
,
!
0
);
d
.
update
(
void
0
,
!
1
,
e
);
o
.
multiply
(
e
.
projectionMatrix
,
e
.
matrixWorldInverse
);
r
[
0
].
set
(
o
.
n41
-
o
.
n11
,
o
.
n42
-
o
.
n12
,
o
.
n43
-
o
.
n13
,
o
.
n44
-
o
.
n14
);
r
[
1
].
set
(
o
.
n41
+
o
.
n11
,
o
.
n42
+
o
.
n12
,
o
.
n43
+
o
.
n13
,
o
.
n44
+
o
.
n14
);
r
[
2
].
set
(
o
.
n41
+
o
.
n21
,
o
.
n42
+
o
.
n22
,
o
.
n43
+
o
.
n23
,
o
.
n44
+
o
.
n24
);
r
[
3
].
set
(
o
.
n41
-
o
.
n21
,
o
.
n42
-
o
.
n22
,
o
.
n43
-
o
.
n23
,
o
.
n44
-
o
.
n24
);
r
[
4
].
set
(
o
.
n41
-
o
.
n31
,
o
.
n42
-
o
.
n32
,
o
.
n43
-
o
.
n33
,
o
.
n44
-
o
.
n34
);
r
[
5
].
set
(
o
.
n41
+
o
.
n31
,
o
.
n42
+
o
.
n32
,
o
.
n43
+
...
@@ -121,8 +123,8 @@ var f=this,h=null,j=new THREE.Projector,a=a||{},k=a.canvas!==void 0?a.canvas:doc
...
@@ -121,8 +123,8 @@ var f=this,h=null,j=new THREE.Projector,a=a||{},k=a.canvas!==void 0?a.canvas:doc
faces
:
0
};
this
.
setSize
=
function
(
a
,
b
){
m
=
a
;
p
=
b
;
l
=
m
/
2
;
n
=
p
/
2
;
k
.
width
=
m
;
k
.
height
=
p
;
ka
.
set
(
-
l
,
-
n
,
l
,
n
);
t
=
1
;
G
=
0
;
M
=
o
=
B
=
x
=
K
=
null
};
this
.
setClearColor
=
function
(
a
,
b
){
q
=
a
;
v
=
b
};
this
.
setClearColorHex
=
function
(
a
,
b
){
q
.
setHex
(
a
);
v
=
b
};
this
.
clear
=
function
(){
i
.
setTransform
(
1
,
0
,
0
,
-
1
,
l
,
n
);
if
(
!
da
.
isEmpty
())
da
.
inflate
(
1
),
da
.
minSelf
(
ka
),
q
.
hex
==
0
&&
v
==
0
?
i
.
clearRect
(
da
.
getX
(),
da
.
getY
(),
da
.
getWidth
(),
da
.
getHeight
()):(
c
(
THREE
.
NormalBlending
),
b
(
1
),
i
.
fillStyle
=
"
rgba(
"
+
Math
.
floor
(
q
.
r
*
255
)
+
"
,
"
+
Math
.
floor
(
q
.
g
*
255
)
+
"
,
"
+
Math
.
floor
(
q
.
b
*
faces
:
0
};
this
.
setSize
=
function
(
a
,
b
){
m
=
a
;
p
=
b
;
l
=
m
/
2
;
n
=
p
/
2
;
k
.
width
=
m
;
k
.
height
=
p
;
ka
.
set
(
-
l
,
-
n
,
l
,
n
);
t
=
1
;
G
=
0
;
M
=
o
=
B
=
x
=
K
=
null
};
this
.
setClearColor
=
function
(
a
,
b
){
q
=
a
;
v
=
b
};
this
.
setClearColorHex
=
function
(
a
,
b
){
q
.
setHex
(
a
);
v
=
b
};
this
.
clear
=
function
(){
i
.
setTransform
(
1
,
0
,
0
,
-
1
,
l
,
n
);
if
(
!
da
.
isEmpty
())
da
.
inflate
(
1
),
da
.
minSelf
(
ka
),
q
.
hex
==
0
&&
v
==
0
?
i
.
clearRect
(
da
.
getX
(),
da
.
getY
(),
da
.
getWidth
(),
da
.
getHeight
()):(
c
(
THREE
.
NormalBlending
),
b
(
1
),
i
.
fillStyle
=
"
rgba(
"
+
Math
.
floor
(
q
.
r
*
255
)
+
"
,
"
+
Math
.
floor
(
q
.
g
*
255
)
+
"
,
"
+
Math
.
floor
(
q
.
b
*
255
)
+
"
,
"
+
v
+
"
)
"
,
i
.
fillRect
(
da
.
getX
(),
da
.
getY
(),
da
.
getWidth
(),
da
.
getHeight
())),
da
.
empty
()};
this
.
render
=
function
(
a
,
g
){
function
k
(
a
){
var
b
,
c
,
d
,
e
=
a
.
lights
;
Y
.
setRGB
(
0
,
0
,
0
);
sa
.
setRGB
(
0
,
0
,
0
);
ta
.
setRGB
(
0
,
0
,
0
);
a
=
0
;
for
(
b
=
e
.
length
;
a
<
b
;
a
++
)
c
=
e
[
a
],
d
=
c
.
color
,
c
instanceof
THREE
.
AmbientLight
?(
Y
.
r
+=
d
.
r
,
Y
.
g
+=
d
.
g
,
Y
.
b
+=
d
.
b
):
c
instanceof
THREE
.
DirectionalLight
?(
sa
.
r
+=
d
.
r
,
sa
.
g
+=
d
.
g
,
sa
.
b
+=
d
.
b
):
c
instanceof
THREE
.
PointLight
&&
(
ta
.
r
+=
d
.
r
,
ta
.
g
+=
d
.
g
,
ta
.
b
+=
d
.
b
)}
function
m
(
a
,
b
,
c
,
d
){
var
e
,
f
,
g
,
h
,
i
=
a
.
lights
,
a
=
0
;
for
(
e
=
i
.
length
;
a
<
e
;
a
++
)
f
=
255
)
+
"
,
"
+
v
+
"
)
"
,
i
.
fillRect
(
da
.
getX
(),
da
.
getY
(),
da
.
getWidth
(),
da
.
getHeight
())),
da
.
empty
()};
this
.
render
=
function
(
a
,
g
){
function
k
(
a
){
var
b
,
c
,
d
,
e
=
a
.
lights
;
Y
.
setRGB
(
0
,
0
,
0
);
sa
.
setRGB
(
0
,
0
,
0
);
ta
.
setRGB
(
0
,
0
,
0
);
a
=
0
;
for
(
b
=
e
.
length
;
a
<
b
;
a
++
)
c
=
e
[
a
],
d
=
c
.
color
,
c
instanceof
THREE
.
AmbientLight
?(
Y
.
r
+=
d
.
r
,
Y
.
g
+=
d
.
g
,
Y
.
b
+=
d
.
b
):
c
instanceof
THREE
.
DirectionalLight
?(
sa
.
r
+=
d
.
r
,
sa
.
g
+=
d
.
g
,
sa
.
b
+=
d
.
b
):
c
instanceof
THREE
.
PointLight
&&
(
ta
.
r
+=
d
.
r
,
ta
.
g
+=
d
.
g
,
ta
.
b
+=
d
.
b
)}
function
m
(
a
,
b
,
c
,
d
){
var
e
,
f
,
g
,
h
,
i
=
a
.
lights
,
a
=
0
;
for
(
e
=
i
.
length
;
a
<
e
;
a
++
)
f
=
i
[
a
],
g
=
f
.
color
,
f
instanceof
THREE
.
DirectionalLight
?(
h
=
c
.
dot
(
f
.
position
),
h
<=
0
||
(
h
*=
f
.
intensity
,
d
.
r
+=
g
.
r
*
h
,
d
.
g
+=
g
.
g
*
h
,
d
.
b
+=
g
.
b
*
h
)):
f
instanceof
THREE
.
PointLight
&&
(
h
=
c
.
dot
(
P
.
sub
(
f
.
position
,
b
).
normalize
()),
h
<=
0
||
(
h
*=
f
.
distance
==
0
?
1
:
1
-
Math
.
min
(
b
.
distanceTo
(
f
.
position
)
/
f
.
distance
,
1
),
h
!=
0
&&
(
h
*=
f
.
intensity
,
d
.
r
+=
g
.
r
*
h
,
d
.
g
+=
g
.
g
*
h
,
d
.
b
+=
g
.
b
*
h
)))}
function
p
(
a
,
f
,
g
){
b
(
g
.
opacity
);
c
(
g
.
blending
);
var
h
,
k
,
m
,
j
,
Aa
,
o
;
if
(
g
instanceof
THREE
.
ParticleBasicMaterial
){
if
(
g
.
map
)
j
=
g
.
map
.
image
,
Aa
=
j
.
width
>>
1
,
o
=
j
.
height
>>
1
,
g
=
f
.
scale
.
x
*
i
[
a
],
g
=
f
.
color
,
f
instanceof
THREE
.
DirectionalLight
?(
h
=
c
.
dot
(
f
.
position
),
h
<=
0
||
(
h
*=
f
.
intensity
,
d
.
r
+=
g
.
r
*
h
,
d
.
g
+=
g
.
g
*
h
,
d
.
b
+=
g
.
b
*
h
)):
f
instanceof
THREE
.
PointLight
&&
(
h
=
c
.
dot
(
P
.
sub
(
f
.
position
,
b
).
normalize
()),
h
<=
0
||
(
h
*=
f
.
distance
==
0
?
1
:
1
-
Math
.
min
(
b
.
distanceTo
(
f
.
position
)
/
f
.
distance
,
1
),
h
!=
0
&&
(
h
*=
f
.
intensity
,
d
.
r
+=
g
.
r
*
h
,
d
.
g
+=
g
.
g
*
h
,
d
.
b
+=
g
.
b
*
h
)))}
function
p
(
a
,
f
,
g
){
b
(
g
.
opacity
);
c
(
g
.
blending
);
var
h
,
k
,
m
,
j
,
Aa
,
o
;
if
(
g
instanceof
THREE
.
ParticleBasicMaterial
){
if
(
g
.
map
)
j
=
g
.
map
.
image
,
Aa
=
j
.
width
>>
1
,
o
=
j
.
height
>>
1
,
g
=
f
.
scale
.
x
*
l
,
m
=
f
.
scale
.
y
*
n
,
h
=
g
*
Aa
,
k
=
m
*
o
,
V
.
set
(
a
.
x
-
h
,
a
.
y
-
k
,
a
.
x
+
h
,
a
.
y
+
k
),
ka
.
instersects
(
V
)
&&
(
i
.
save
(),
i
.
translate
(
a
.
x
,
a
.
y
),
i
.
rotate
(
-
f
.
rotation
),
i
.
scale
(
g
,
-
m
),
i
.
translate
(
-
Aa
,
-
o
),
i
.
drawImage
(
j
,
0
,
0
),
i
.
restore
())}
else
g
instanceof
THREE
.
ParticleCanvasMaterial
&&
(
h
=
f
.
scale
.
x
*
l
,
k
=
f
.
scale
.
y
*
n
,
V
.
set
(
a
.
x
-
h
,
a
.
y
-
k
,
a
.
x
+
h
,
a
.
y
+
k
),
ka
.
instersects
(
V
)
&&
(
d
(
g
.
color
),
e
(
g
.
color
),
i
.
save
(),
i
.
translate
(
a
.
x
,
a
.
y
),
i
.
rotate
(
-
f
.
rotation
),
i
.
scale
(
h
,
k
),
g
.
program
(
i
),
i
.
restore
()))}
function
q
(
a
,
f
,
e
,
g
){
b
(
g
.
opacity
);
c
(
g
.
blending
);
i
.
beginPath
();
l
,
m
=
f
.
scale
.
y
*
n
,
h
=
g
*
Aa
,
k
=
m
*
o
,
V
.
set
(
a
.
x
-
h
,
a
.
y
-
k
,
a
.
x
+
h
,
a
.
y
+
k
),
ka
.
instersects
(
V
)
&&
(
i
.
save
(),
i
.
translate
(
a
.
x
,
a
.
y
),
i
.
rotate
(
-
f
.
rotation
),
i
.
scale
(
g
,
-
m
),
i
.
translate
(
-
Aa
,
-
o
),
i
.
drawImage
(
j
,
0
,
0
),
i
.
restore
())}
else
g
instanceof
THREE
.
ParticleCanvasMaterial
&&
(
h
=
f
.
scale
.
x
*
l
,
k
=
f
.
scale
.
y
*
n
,
V
.
set
(
a
.
x
-
h
,
a
.
y
-
k
,
a
.
x
+
h
,
a
.
y
+
k
),
ka
.
instersects
(
V
)
&&
(
d
(
g
.
color
),
e
(
g
.
color
),
i
.
save
(),
i
.
translate
(
a
.
x
,
a
.
y
),
i
.
rotate
(
-
f
.
rotation
),
i
.
scale
(
h
,
k
),
g
.
program
(
i
),
i
.
restore
()))}
function
q
(
a
,
e
,
f
,
g
){
b
(
g
.
opacity
);
c
(
g
.
blending
);
i
.
beginPath
();
i
.
moveTo
(
a
.
positionScreen
.
x
,
a
.
positionScreen
.
y
);
i
.
lineTo
(
f
.
positionScreen
.
x
,
f
.
positionScreen
.
y
);
i
.
closePath
();
if
(
g
instanceof
THREE
.
LineBasicMaterial
){
a
=
g
.
linewidth
;
if
(
B
!=
a
)
i
.
lineWidth
=
B
=
a
;
a
=
g
.
linecap
;
if
(
o
!=
a
)
i
.
lineCap
=
o
=
a
;
a
=
g
.
linejoin
;
if
(
M
!=
a
)
i
.
lineJoin
=
M
=
a
;
d
(
g
.
color
);
i
.
stroke
();
V
.
inflate
(
g
.
linewidth
*
2
)}}
function
t
(
a
,
d
,
e
,
h
,
k
,
i
,
l
,
j
,
n
){
f
.
data
.
vertices
+=
3
;
f
.
data
.
faces
++
;
b
(
j
.
opacity
);
c
(
j
.
blending
);
I
=
a
.
positionScreen
.
x
;
O
=
a
.
positionScreen
.
y
;
R
=
d
.
positionScreen
.
x
;
L
=
d
.
positionScreen
.
y
;
D
=
e
.
positionScreen
.
x
;
i
.
moveTo
(
a
.
positionScreen
.
x
,
a
.
positionScreen
.
y
);
i
.
lineTo
(
e
.
positionScreen
.
x
,
e
.
positionScreen
.
y
);
i
.
closePath
();
if
(
g
instanceof
THREE
.
LineBasicMaterial
){
a
=
g
.
linewidth
;
if
(
B
!=
a
)
i
.
lineWidth
=
B
=
a
;
a
=
g
.
linecap
;
if
(
o
!=
a
)
i
.
lineCap
=
o
=
a
;
a
=
g
.
linejoin
;
if
(
M
!=
a
)
i
.
lineJoin
=
M
=
a
;
d
(
g
.
color
);
i
.
stroke
();
V
.
inflate
(
g
.
linewidth
*
2
)}}
function
t
(
a
,
d
,
e
,
h
,
k
,
i
,
l
,
j
,
n
){
f
.
data
.
vertices
+=
3
;
f
.
data
.
faces
++
;
b
(
j
.
opacity
);
c
(
j
.
blending
);
I
=
a
.
positionScreen
.
x
;
O
=
a
.
positionScreen
.
y
;
R
=
d
.
positionScreen
.
x
;
L
=
d
.
positionScreen
.
y
;
D
=
e
.
positionScreen
.
x
;
z
=
e
.
positionScreen
.
y
;
x
(
I
,
O
,
R
,
L
,
D
,
z
);
if
(
j
instanceof
THREE
.
MeshBasicMaterial
)
if
(
j
.
map
)
j
.
map
.
mapping
instanceof
THREE
.
UVMapping
&&
(
aa
=
l
.
uvs
[
0
],
ga
(
I
,
O
,
R
,
L
,
D
,
z
,
j
.
map
.
image
,
aa
[
h
].
u
,
aa
[
h
].
v
,
aa
[
k
].
u
,
aa
[
k
].
v
,
aa
[
i
].
u
,
aa
[
i
].
v
));
else
if
(
j
.
envMap
){
if
(
j
.
envMap
.
mapping
instanceof
THREE
.
SphericalReflectionMapping
)
a
=
g
.
matrixWorldInverse
,
P
.
copy
(
l
.
vertexNormalsWorld
[
0
]),
Ba
=
(
P
.
x
*
a
.
n11
+
P
.
y
*
a
.
n12
+
P
.
z
*
a
.
n13
)
*
0.5
+
0.5
,
Ca
=-
(
P
.
x
*
a
.
n21
+
P
.
y
*
a
.
n22
+
P
.
z
*
a
.
n23
)
*
0.5
+
0.5
,
P
.
copy
(
l
.
vertexNormalsWorld
[
1
]),
Da
=
(
P
.
x
*
a
.
n11
+
P
.
y
*
a
.
n12
+
P
.
z
*
z
=
e
.
positionScreen
.
y
;
x
(
I
,
O
,
R
,
L
,
D
,
z
);
if
(
j
instanceof
THREE
.
MeshBasicMaterial
)
if
(
j
.
map
)
j
.
map
.
mapping
instanceof
THREE
.
UVMapping
&&
(
aa
=
l
.
uvs
[
0
],
ga
(
I
,
O
,
R
,
L
,
D
,
z
,
j
.
map
.
image
,
aa
[
h
].
u
,
aa
[
h
].
v
,
aa
[
k
].
u
,
aa
[
k
].
v
,
aa
[
i
].
u
,
aa
[
i
].
v
));
else
if
(
j
.
envMap
){
if
(
j
.
envMap
.
mapping
instanceof
THREE
.
SphericalReflectionMapping
)
a
=
g
.
matrixWorldInverse
,
P
.
copy
(
l
.
vertexNormalsWorld
[
0
]),
Ba
=
(
P
.
x
*
a
.
n11
+
P
.
y
*
a
.
n12
+
P
.
z
*
a
.
n13
)
*
0.5
+
0.5
,
Ca
=-
(
P
.
x
*
a
.
n21
+
P
.
y
*
a
.
n22
+
P
.
z
*
a
.
n23
)
*
0.5
+
0.5
,
P
.
copy
(
l
.
vertexNormalsWorld
[
1
]),
Da
=
(
P
.
x
*
a
.
n11
+
P
.
y
*
a
.
n12
+
P
.
z
*
a
.
n13
)
*
0.5
+
0.5
,
Ea
=-
(
P
.
x
*
a
.
n21
+
P
.
y
*
a
.
n22
+
P
.
z
*
a
.
n23
)
*
0.5
+
0.5
,
P
.
copy
(
l
.
vertexNormalsWorld
[
2
]),
Fa
=
(
P
.
x
*
a
.
n11
+
P
.
y
*
a
.
n12
+
P
.
z
*
a
.
n13
)
*
0.5
+
0.5
,
Ga
=-
(
P
.
x
*
a
.
n21
+
P
.
y
*
a
.
n22
+
P
.
z
*
a
.
n23
)
*
0.5
+
0.5
,
ga
(
I
,
O
,
R
,
L
,
D
,
z
,
j
.
envMap
.
image
,
Ba
,
Ca
,
Da
,
Ea
,
Fa
,
Ga
)}
else
j
.
wireframe
?
G
(
j
.
color
,
j
.
wireframeLinewidth
,
j
.
wireframeLinecap
,
j
.
wireframeLinejoin
):
ha
(
j
.
color
);
else
if
(
j
instanceof
THREE
.
MeshLambertMaterial
)
j
.
map
&&!
j
.
wireframe
&&
(
j
.
map
.
mapping
instanceof
THREE
.
UVMapping
&&
(
aa
=
l
.
uvs
[
0
],
ga
(
I
,
O
,
R
,
L
,
D
,
z
,
j
.
map
.
image
,
aa
[
h
].
u
,
aa
[
h
].
v
,
aa
[
k
].
u
,
a
.
n13
)
*
0.5
+
0.5
,
Ea
=-
(
P
.
x
*
a
.
n21
+
P
.
y
*
a
.
n22
+
P
.
z
*
a
.
n23
)
*
0.5
+
0.5
,
P
.
copy
(
l
.
vertexNormalsWorld
[
2
]),
Fa
=
(
P
.
x
*
a
.
n11
+
P
.
y
*
a
.
n12
+
P
.
z
*
a
.
n13
)
*
0.5
+
0.5
,
Ga
=-
(
P
.
x
*
a
.
n21
+
P
.
y
*
a
.
n22
+
P
.
z
*
a
.
n23
)
*
0.5
+
0.5
,
ga
(
I
,
O
,
R
,
L
,
D
,
z
,
j
.
envMap
.
image
,
Ba
,
Ca
,
Da
,
Ea
,
Fa
,
Ga
)}
else
j
.
wireframe
?
G
(
j
.
color
,
j
.
wireframeLinewidth
,
j
.
wireframeLinecap
,
j
.
wireframeLinejoin
):
ha
(
j
.
color
);
else
if
(
j
instanceof
THREE
.
MeshLambertMaterial
)
j
.
map
&&!
j
.
wireframe
&&
(
j
.
map
.
mapping
instanceof
THREE
.
UVMapping
&&
(
aa
=
l
.
uvs
[
0
],
ga
(
I
,
O
,
R
,
L
,
D
,
z
,
j
.
map
.
image
,
aa
[
h
].
u
,
aa
[
h
].
v
,
aa
[
k
].
u
,
aa
[
k
].
v
,
aa
[
i
].
u
,
aa
[
i
].
v
)),
c
(
THREE
.
SubtractiveBlending
)),
ya
?
!
j
.
wireframe
&&
j
.
shading
==
THREE
.
SmoothShading
&&
l
.
vertexNormalsWorld
.
length
==
3
?(
E
.
r
=
C
.
r
=
F
.
r
=
Y
.
r
,
E
.
g
=
C
.
g
=
F
.
g
=
Y
.
g
,
E
.
b
=
C
.
b
=
F
.
b
=
Y
.
b
,
m
(
n
,
l
.
v1
.
positionWorld
,
l
.
vertexNormalsWorld
[
0
],
E
),
m
(
n
,
l
.
v2
.
positionWorld
,
l
.
vertexNormalsWorld
[
1
],
C
),
m
(
n
,
l
.
v3
.
positionWorld
,
l
.
vertexNormalsWorld
[
2
],
F
),
T
.
r
=
(
C
.
r
+
F
.
r
)
*
0.5
,
T
.
g
=
(
C
.
g
+
F
.
g
)
*
0.5
,
T
.
b
=
(
C
.
b
+
F
.
b
)
*
0.5
,
X
=
va
(
E
,
C
,
F
,
T
),
ga
(
I
,
O
,
R
,
L
,
D
,
z
,
X
,
0
,
0
,
1
,
0
,
0
,
1
)):(
ba
.
r
=
Y
.
r
,
ba
.
g
=
Y
.
g
,
ba
.
b
=
Y
.
b
,
m
(
n
,
l
.
centroidWorld
,
l
.
normalWorld
,
ba
),
s
.
r
=
aa
[
k
].
v
,
aa
[
i
].
u
,
aa
[
i
].
v
)),
c
(
THREE
.
SubtractiveBlending
)),
ya
?
!
j
.
wireframe
&&
j
.
shading
==
THREE
.
SmoothShading
&&
l
.
vertexNormalsWorld
.
length
==
3
?(
E
.
r
=
C
.
r
=
F
.
r
=
Y
.
r
,
E
.
g
=
C
.
g
=
F
.
g
=
Y
.
g
,
E
.
b
=
C
.
b
=
F
.
b
=
Y
.
b
,
m
(
n
,
l
.
v1
.
positionWorld
,
l
.
vertexNormalsWorld
[
0
],
E
),
m
(
n
,
l
.
v2
.
positionWorld
,
l
.
vertexNormalsWorld
[
1
],
C
),
m
(
n
,
l
.
v3
.
positionWorld
,
l
.
vertexNormalsWorld
[
2
],
F
),
T
.
r
=
(
C
.
r
+
F
.
r
)
*
0.5
,
T
.
g
=
(
C
.
g
+
F
.
g
)
*
0.5
,
T
.
b
=
(
C
.
b
+
F
.
b
)
*
0.5
,
X
=
va
(
E
,
C
,
F
,
T
),
ga
(
I
,
O
,
R
,
L
,
D
,
z
,
X
,
0
,
0
,
1
,
0
,
0
,
1
)):(
ba
.
r
=
Y
.
r
,
ba
.
g
=
Y
.
g
,
ba
.
b
=
Y
.
b
,
m
(
n
,
l
.
centroidWorld
,
l
.
normalWorld
,
ba
),
s
.
r
=
...
...
build/custom/ThreeDOM.js
浏览文件 @
e4b75f1c
...
@@ -55,7 +55,9 @@ 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;i
...
@@ -55,7 +55,9 @@ 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;i
THREE
.
Face3
=
function
(
a
,
b
,
c
,
d
,
e
,
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
=
e
instanceof
THREE
.
Color
?
e
:
new
THREE
.
Color
;
this
.
vertexColors
=
e
instanceof
Array
?
e
:[];
this
.
vertexTangents
=
[];
this
.
materials
=
g
instanceof
Array
?
g
:[
g
];
this
.
centroid
=
new
THREE
.
Vector3
};
THREE
.
Face3
=
function
(
a
,
b
,
c
,
d
,
e
,
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
=
e
instanceof
THREE
.
Color
?
e
:
new
THREE
.
Color
;
this
.
vertexColors
=
e
instanceof
Array
?
e
:[];
this
.
vertexTangents
=
[];
this
.
materials
=
g
instanceof
Array
?
g
:[
g
];
this
.
centroid
=
new
THREE
.
Vector3
};
THREE
.
Face4
=
function
(
a
,
b
,
c
,
d
,
e
,
g
,
f
){
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
=
g
instanceof
THREE
.
Color
?
g
:
new
THREE
.
Color
;
this
.
vertexColors
=
g
instanceof
Array
?
g
:[];
this
.
vertexTangents
=
[];
this
.
materials
=
f
instanceof
Array
?
f
:[
f
];
this
.
centroid
=
new
THREE
.
Vector3
};
THREE
.
UV
=
function
(
a
,
b
){
this
.
set
(
a
||
0
,
b
||
0
)};
THREE
.
Face4
=
function
(
a
,
b
,
c
,
d
,
e
,
g
,
f
){
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
=
g
instanceof
THREE
.
Color
?
g
:
new
THREE
.
Color
;
this
.
vertexColors
=
g
instanceof
Array
?
g
:[];
this
.
vertexTangents
=
[];
this
.
materials
=
f
instanceof
Array
?
f
:[
f
];
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
.
Camera
=
function
(
a
,
b
,
c
,
d
,
e
){
THREE
.
Object3D
.
call
(
this
);
this
.
fov
=
a
||
50
;
this
.
aspect
=
b
||
1
;
this
.
near
=
c
||
0.1
;
this
.
far
=
d
||
2
E3
;
this
.
target
=
e
||
new
THREE
.
Object3D
;
this
.
useTarget
=!
0
;
this
.
matrixWorldInverse
=
new
THREE
.
Matrix4
;
this
.
projectionMatrix
=
null
;
this
.
updateProjectionMatrix
()};
THREE
.
Camera
.
prototype
=
new
THREE
.
Object3D
;
THREE
.
Camera
.
prototype
.
constructor
=
THREE
.
Camera
;
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
.
Camera
=
function
(
a
,
b
,
c
,
d
,
e
){
THREE
.
Object3D
.
call
(
this
);
this
.
fov
=
a
||
50
;
this
.
aspect
=
b
||
1
;
this
.
near
=
c
||
0.1
;
this
.
far
=
d
||
2
E3
;
this
.
target
=
e
||
new
THREE
.
Object3D
;
this
.
useTarget
=!
0
;
this
.
matrixWorldInverse
=
new
THREE
.
Matrix4
;
this
.
projectionMatrix
=
null
;
this
.
updateProjectionMatrix
()};
THREE
.
Camera
.
prototype
=
new
THREE
.
Object3D
;
THREE
.
Camera
.
prototype
.
constructor
=
THREE
.
Camera
;
THREE
.
Camera
.
prototype
.
supr
=
THREE
.
Object3D
.
prototype
;
THREE
.
Camera
.
prototype
.
translate
=
function
(
a
,
b
){
this
.
matrix
.
rotateAxis
(
b
);
b
.
multiplyScalar
(
a
);
this
.
position
.
addSelf
(
b
);
this
.
target
.
position
.
addSelf
(
b
)};
THREE
.
Camera
.
prototype
.
updateProjectionMatrix
=
function
(){
this
.
projectionMatrix
=
THREE
.
Matrix4
.
makePerspective
(
this
.
fov
,
this
.
aspect
,
this
.
near
,
this
.
far
)};
THREE
.
Camera
.
prototype
.
supr
=
THREE
.
Object3D
.
prototype
;
THREE
.
Camera
.
prototype
.
translate
=
function
(
a
,
b
){
this
.
matrix
.
rotateAxis
(
b
);
b
.
multiplyScalar
(
a
);
this
.
position
.
addSelf
(
b
);
this
.
target
.
position
.
addSelf
(
b
)};
THREE
.
Camera
.
prototype
.
updateProjectionMatrix
=
function
(){
if
(
this
.
fullWidth
){
var
a
=
this
.
fullWidth
/
this
.
fullHeight
,
b
=
Math
.
tan
(
this
.
fov
*
Math
.
PI
/
360
)
*
this
.
near
,
c
=-
b
,
d
=
a
*
c
,
a
=
Math
.
abs
(
a
*
b
-
d
),
c
=
Math
.
abs
(
b
-
c
);
this
.
projectionMatrix
=
THREE
.
Matrix4
.
makeFrustum
(
d
+
this
.
x
*
a
/
this
.
fullWidth
,
d
+
(
this
.
x
+
this
.
width
)
*
a
/
this
.
fullWidth
,
b
-
(
this
.
y
+
this
.
height
)
*
c
/
this
.
fullHeight
,
b
-
this
.
y
*
c
/
this
.
fullHeight
,
this
.
near
,
this
.
far
)}
else
this
.
projectionMatrix
=
THREE
.
Matrix4
.
makePerspective
(
this
.
fov
,
this
.
aspect
,
this
.
near
,
this
.
far
)};
THREE
.
Camera
.
prototype
.
setViewOffset
=
function
(
a
,
b
,
c
,
d
,
e
,
g
){
this
.
fullWidth
=
a
;
this
.
fullHeight
=
b
;
this
.
x
=
c
;
this
.
y
=
d
;
this
.
width
=
e
;
this
.
height
=
g
;
this
.
updateProjectionMatrix
()};
THREE
.
Camera
.
prototype
.
update
=
function
(
a
,
b
,
c
){
if
(
this
.
useTarget
)
this
.
matrix
.
lookAt
(
this
.
position
,
this
.
target
.
position
,
this
.
up
),
this
.
matrix
.
setPosition
(
this
.
position
),
a
?
this
.
matrixWorld
.
multiply
(
a
,
this
.
matrix
):
this
.
matrixWorld
.
copy
(
this
.
matrix
),
THREE
.
Matrix4
.
makeInvert
(
this
.
matrixWorld
,
this
.
matrixWorldInverse
),
b
=!
0
;
else
if
(
this
.
matrixAutoUpdate
&&
this
.
updateMatrix
(),
b
||
this
.
matrixWorldNeedsUpdate
)
a
?
this
.
matrixWorld
.
multiply
(
a
,
this
.
matrix
):
this
.
matrixWorld
.
copy
(
this
.
matrix
),
this
.
matrixWorldNeedsUpdate
=
THREE
.
Camera
.
prototype
.
update
=
function
(
a
,
b
,
c
){
if
(
this
.
useTarget
)
this
.
matrix
.
lookAt
(
this
.
position
,
this
.
target
.
position
,
this
.
up
),
this
.
matrix
.
setPosition
(
this
.
position
),
a
?
this
.
matrixWorld
.
multiply
(
a
,
this
.
matrix
):
this
.
matrixWorld
.
copy
(
this
.
matrix
),
THREE
.
Matrix4
.
makeInvert
(
this
.
matrixWorld
,
this
.
matrixWorldInverse
),
b
=!
0
;
else
if
(
this
.
matrixAutoUpdate
&&
this
.
updateMatrix
(),
b
||
this
.
matrixWorldNeedsUpdate
)
a
?
this
.
matrixWorld
.
multiply
(
a
,
this
.
matrix
):
this
.
matrixWorld
.
copy
(
this
.
matrix
),
this
.
matrixWorldNeedsUpdate
=
!
1
,
b
=!
0
,
THREE
.
Matrix4
.
makeInvert
(
this
.
matrixWorld
,
this
.
matrixWorldInverse
);
for
(
a
=
0
;
a
<
this
.
children
.
length
;
a
++
)
this
.
children
[
a
].
update
(
this
.
matrixWorld
,
b
,
c
)};
THREE
.
ParticleDOMMaterial
=
function
(
a
){
THREE
.
Material
.
call
(
this
);
this
.
domElement
=
a
};
THREE
.
Particle
=
function
(
a
){
THREE
.
Object3D
.
call
(
this
);
this
.
materials
=
a
instanceof
Array
?
a
:[
a
]};
THREE
.
Particle
.
prototype
=
new
THREE
.
Object3D
;
THREE
.
Particle
.
prototype
.
constructor
=
THREE
.
Particle
;
!
1
,
b
=!
0
,
THREE
.
Matrix4
.
makeInvert
(
this
.
matrixWorld
,
this
.
matrixWorldInverse
);
for
(
a
=
0
;
a
<
this
.
children
.
length
;
a
++
)
this
.
children
[
a
].
update
(
this
.
matrixWorld
,
b
,
c
)};
THREE
.
ParticleDOMMaterial
=
function
(
a
){
THREE
.
Material
.
call
(
this
);
this
.
domElement
=
a
};
THREE
.
Particle
=
function
(
a
){
THREE
.
Object3D
.
call
(
this
);
this
.
materials
=
a
instanceof
Array
?
a
:[
a
]};
THREE
.
Particle
.
prototype
=
new
THREE
.
Object3D
;
THREE
.
Particle
.
prototype
.
constructor
=
THREE
.
Particle
;
THREE
.
Bone
=
function
(
a
){
THREE
.
Object3D
.
call
(
this
);
this
.
skin
=
a
;
this
.
skinMatrix
=
new
THREE
.
Matrix4
;
this
.
hasNoneBoneChildren
=!
1
};
THREE
.
Bone
.
prototype
=
new
THREE
.
Object3D
;
THREE
.
Bone
.
prototype
.
constructor
=
THREE
.
Bone
;
THREE
.
Bone
.
prototype
.
supr
=
THREE
.
Object3D
.
prototype
;
THREE
.
Bone
=
function
(
a
){
THREE
.
Object3D
.
call
(
this
);
this
.
skin
=
a
;
this
.
skinMatrix
=
new
THREE
.
Matrix4
;
this
.
hasNoneBoneChildren
=!
1
};
THREE
.
Bone
.
prototype
=
new
THREE
.
Object3D
;
THREE
.
Bone
.
prototype
.
constructor
=
THREE
.
Bone
;
THREE
.
Bone
.
prototype
.
supr
=
THREE
.
Object3D
.
prototype
;
...
@@ -70,7 +72,7 @@ THREE.Scene=function(){THREE.Object3D.call(this);this.matrixAutoUpdate=!1;this.c
...
@@ -70,7 +72,7 @@ THREE.Scene=function(){THREE.Object3D.call(this);this.matrixAutoUpdate=!1;this.c
THREE
.
Scene
.
prototype
.
addChildRecurse
=
function
(
a
){
if
(
a
instanceof
THREE
.
Light
)
this
.
lights
.
indexOf
(
a
)
===-
1
&&
this
.
lights
.
push
(
a
);
else
if
(
a
instanceof
THREE
.
Sound
)
this
.
sounds
.
indexOf
(
a
)
===-
1
&&
this
.
sounds
.
push
(
a
);
else
if
(
!
(
a
instanceof
THREE
.
Camera
||
a
instanceof
THREE
.
Bone
)
&&
this
.
objects
.
indexOf
(
a
)
===-
1
)
this
.
objects
.
push
(
a
),
this
.
__objectsAdded
.
push
(
a
);
for
(
var
b
=
0
;
b
<
a
.
children
.
length
;
b
++
)
this
.
addChildRecurse
(
a
.
children
[
b
])};
THREE
.
Scene
.
prototype
.
addChildRecurse
=
function
(
a
){
if
(
a
instanceof
THREE
.
Light
)
this
.
lights
.
indexOf
(
a
)
===-
1
&&
this
.
lights
.
push
(
a
);
else
if
(
a
instanceof
THREE
.
Sound
)
this
.
sounds
.
indexOf
(
a
)
===-
1
&&
this
.
sounds
.
push
(
a
);
else
if
(
!
(
a
instanceof
THREE
.
Camera
||
a
instanceof
THREE
.
Bone
)
&&
this
.
objects
.
indexOf
(
a
)
===-
1
)
this
.
objects
.
push
(
a
),
this
.
__objectsAdded
.
push
(
a
);
for
(
var
b
=
0
;
b
<
a
.
children
.
length
;
b
++
)
this
.
addChildRecurse
(
a
.
children
[
b
])};
THREE
.
Scene
.
prototype
.
removeChild
=
function
(
a
){
this
.
supr
.
removeChild
.
call
(
this
,
a
);
this
.
removeChildRecurse
(
a
)};
THREE
.
Scene
.
prototype
.
removeChildRecurse
=
function
(
a
){
if
(
a
instanceof
THREE
.
Light
){
var
b
=
this
.
lights
.
indexOf
(
a
);
b
!==-
1
&&
this
.
lights
.
splice
(
b
,
1
)}
else
a
instanceof
THREE
.
Sound
?(
b
=
this
.
sounds
.
indexOf
(
a
),
b
!==-
1
&&
this
.
sounds
.
splice
(
b
,
1
)):
a
instanceof
THREE
.
Camera
||
(
b
=
this
.
objects
.
indexOf
(
a
),
b
!==-
1
&&
(
this
.
objects
.
splice
(
b
,
1
),
this
.
__objectsRemoved
.
push
(
a
)));
for
(
b
=
0
;
b
<
a
.
children
.
length
;
b
++
)
this
.
removeChildRecurse
(
a
.
children
[
b
])};
THREE
.
Scene
.
prototype
.
removeChild
=
function
(
a
){
this
.
supr
.
removeChild
.
call
(
this
,
a
);
this
.
removeChildRecurse
(
a
)};
THREE
.
Scene
.
prototype
.
removeChildRecurse
=
function
(
a
){
if
(
a
instanceof
THREE
.
Light
){
var
b
=
this
.
lights
.
indexOf
(
a
);
b
!==-
1
&&
this
.
lights
.
splice
(
b
,
1
)}
else
a
instanceof
THREE
.
Sound
?(
b
=
this
.
sounds
.
indexOf
(
a
),
b
!==-
1
&&
this
.
sounds
.
splice
(
b
,
1
)):
a
instanceof
THREE
.
Camera
||
(
b
=
this
.
objects
.
indexOf
(
a
),
b
!==-
1
&&
(
this
.
objects
.
splice
(
b
,
1
),
this
.
__objectsRemoved
.
push
(
a
)));
for
(
b
=
0
;
b
<
a
.
children
.
length
;
b
++
)
this
.
removeChildRecurse
(
a
.
children
[
b
])};
THREE
.
Scene
.
prototype
.
addObject
=
THREE
.
Scene
.
prototype
.
addChild
;
THREE
.
Scene
.
prototype
.
removeObject
=
THREE
.
Scene
.
prototype
.
removeChild
;
THREE
.
Scene
.
prototype
.
addLight
=
THREE
.
Scene
.
prototype
.
addChild
;
THREE
.
Scene
.
prototype
.
removeLight
=
THREE
.
Scene
.
prototype
.
removeChild
;
THREE
.
Scene
.
prototype
.
addObject
=
THREE
.
Scene
.
prototype
.
addChild
;
THREE
.
Scene
.
prototype
.
removeObject
=
THREE
.
Scene
.
prototype
.
removeChild
;
THREE
.
Scene
.
prototype
.
addLight
=
THREE
.
Scene
.
prototype
.
addChild
;
THREE
.
Scene
.
prototype
.
removeLight
=
THREE
.
Scene
.
prototype
.
removeChild
;
THREE
.
Projector
=
function
(){
function
a
(){
var
a
=
i
[
h
]
=
i
[
h
]
||
new
THREE
.
RenderableVertex
;
h
++
;
return
a
}
function
b
(
a
,
b
){
return
b
.
z
-
a
.
z
}
function
c
(
a
,
b
){
var
c
=
0
,
d
=
1
,
f
=
a
.
z
+
a
.
w
,
e
=
b
.
z
+
b
.
w
,
g
=-
a
.
z
+
a
.
w
,
h
=-
b
.
z
+
b
.
w
;
return
f
>=
0
&&
e
>=
0
&&
g
>=
0
&&
h
>=
0
?
!
0
:
f
<
0
&&
e
<
0
||
g
<
0
&&
h
<
0
?
!
1
:(
f
<
0
?
c
=
Math
.
max
(
c
,
f
/
(
f
-
e
)):
e
<
0
&&
(
d
=
Math
.
min
(
d
,
f
/
(
f
-
e
))),
g
<
0
?
c
=
Math
.
max
(
c
,
g
/
(
g
-
h
)):
h
<
0
&&
(
d
=
Math
.
min
(
d
,
g
/
(
g
-
h
))),
d
<
c
?
!
1
:(
a
.
lerpSelf
(
b
,
c
),
b
.
lerpSelf
(
a
,
1
-
d
),
!
0
))}
var
d
,
e
,
g
=
[],
f
,
h
,
i
=
[],
k
,
l
,
n
=
[],
j
,
m
=
[],
p
,
q
,
t
=
[],
r
,
H
,
K
=
[],
A
=
new
THREE
.
Vector4
,
v
=
new
THREE
.
Vector4
,
THREE
.
Projector
=
function
(){
function
a
(){
var
a
=
i
[
h
]
=
i
[
h
]
||
new
THREE
.
RenderableVertex
;
h
++
;
return
a
}
function
b
(
a
,
b
){
return
b
.
z
-
a
.
z
}
function
c
(
a
,
b
){
var
c
=
0
,
d
=
1
,
e
=
a
.
z
+
a
.
w
,
f
=
b
.
z
+
b
.
w
,
g
=-
a
.
z
+
a
.
w
,
h
=-
b
.
z
+
b
.
w
;
return
e
>=
0
&&
f
>=
0
&&
g
>=
0
&&
h
>=
0
?
!
0
:
e
<
0
&&
f
<
0
||
g
<
0
&&
h
<
0
?
!
1
:(
e
<
0
?
c
=
Math
.
max
(
c
,
e
/
(
e
-
f
)):
f
<
0
&&
(
d
=
Math
.
min
(
d
,
e
/
(
e
-
f
))),
g
<
0
?
c
=
Math
.
max
(
c
,
g
/
(
g
-
h
)):
h
<
0
&&
(
d
=
Math
.
min
(
d
,
g
/
(
g
-
h
))),
d
<
c
?
!
1
:(
a
.
lerpSelf
(
b
,
c
),
b
.
lerpSelf
(
a
,
1
-
d
),
!
0
))}
var
d
,
e
,
g
=
[],
f
,
h
,
i
=
[],
k
,
l
,
n
=
[],
j
,
m
=
[],
p
,
q
,
t
=
[],
r
,
H
,
K
=
[],
A
=
new
THREE
.
Vector4
,
v
=
new
THREE
.
Vector4
,
o
=
new
THREE
.
Matrix4
,
I
=
new
THREE
.
Matrix4
,
z
=
[
new
THREE
.
Vector4
,
new
THREE
.
Vector4
,
new
THREE
.
Vector4
,
new
THREE
.
Vector4
,
new
THREE
.
Vector4
,
new
THREE
.
Vector4
],
D
=
new
THREE
.
Vector4
,
E
=
new
THREE
.
Vector4
;
this
.
projectVector
=
function
(
a
,
b
){
o
.
multiply
(
b
.
projectionMatrix
,
b
.
matrixWorldInverse
);
o
.
multiplyVector3
(
a
);
return
a
};
this
.
unprojectVector
=
function
(
a
,
b
){
o
.
multiply
(
b
.
matrixWorld
,
THREE
.
Matrix4
.
makeInvert
(
b
.
projectionMatrix
));
o
.
multiplyVector3
(
a
);
return
a
};
this
.
projectObjects
=
function
(
a
,
c
,
f
){
var
c
=
[],
h
,
k
,
i
;
e
=
0
;
k
=
o
=
new
THREE
.
Matrix4
,
I
=
new
THREE
.
Matrix4
,
z
=
[
new
THREE
.
Vector4
,
new
THREE
.
Vector4
,
new
THREE
.
Vector4
,
new
THREE
.
Vector4
,
new
THREE
.
Vector4
,
new
THREE
.
Vector4
],
D
=
new
THREE
.
Vector4
,
E
=
new
THREE
.
Vector4
;
this
.
projectVector
=
function
(
a
,
b
){
o
.
multiply
(
b
.
projectionMatrix
,
b
.
matrixWorldInverse
);
o
.
multiplyVector3
(
a
);
return
a
};
this
.
unprojectVector
=
function
(
a
,
b
){
o
.
multiply
(
b
.
matrixWorld
,
THREE
.
Matrix4
.
makeInvert
(
b
.
projectionMatrix
));
o
.
multiplyVector3
(
a
);
return
a
};
this
.
projectObjects
=
function
(
a
,
c
,
f
){
var
c
=
[],
h
,
k
,
i
;
e
=
0
;
k
=
a
.
objects
;
a
=
0
;
for
(
h
=
k
.
length
;
a
<
h
;
a
++
){
i
=
k
[
a
];
var
j
;
if
(
!
(
j
=!
i
.
visible
))
if
(
j
=
i
instanceof
THREE
.
Mesh
){
a
:{
j
=
void
0
;
for
(
var
l
=
i
.
matrixWorld
,
n
=-
i
.
geometry
.
boundingSphere
.
radius
*
Math
.
max
(
i
.
scale
.
x
,
Math
.
max
(
i
.
scale
.
y
,
i
.
scale
.
z
)),
m
=
0
;
m
<
6
;
m
++
)
if
(
j
=
z
[
m
].
x
*
l
.
n14
+
z
[
m
].
y
*
l
.
n24
+
z
[
m
].
z
*
l
.
n34
+
z
[
m
].
w
,
j
<=
n
){
j
=!
1
;
break
a
}
j
=!
0
}
j
=!
j
}
if
(
!
j
)
j
=
g
[
e
]
=
g
[
e
]
||
new
THREE
.
RenderableObject
,
e
++
,
d
=
j
,
A
.
copy
(
i
.
position
),
o
.
multiplyVector3
(
A
),
d
.
object
=
i
,
d
.
z
=
A
.
z
,
c
.
push
(
d
)}
f
&&
c
.
sort
(
b
);
return
c
};
this
.
projectScene
=
function
(
d
,
e
,
g
){
var
A
=
[],
a
.
objects
;
a
=
0
;
for
(
h
=
k
.
length
;
a
<
h
;
a
++
){
i
=
k
[
a
];
var
j
;
if
(
!
(
j
=!
i
.
visible
))
if
(
j
=
i
instanceof
THREE
.
Mesh
){
a
:{
j
=
void
0
;
for
(
var
l
=
i
.
matrixWorld
,
n
=-
i
.
geometry
.
boundingSphere
.
radius
*
Math
.
max
(
i
.
scale
.
x
,
Math
.
max
(
i
.
scale
.
y
,
i
.
scale
.
z
)),
m
=
0
;
m
<
6
;
m
++
)
if
(
j
=
z
[
m
].
x
*
l
.
n14
+
z
[
m
].
y
*
l
.
n24
+
z
[
m
].
z
*
l
.
n34
+
z
[
m
].
w
,
j
<=
n
){
j
=!
1
;
break
a
}
j
=!
0
}
j
=!
j
}
if
(
!
j
)
j
=
g
[
e
]
=
g
[
e
]
||
new
THREE
.
RenderableObject
,
e
++
,
d
=
j
,
A
.
copy
(
i
.
position
),
o
.
multiplyVector3
(
A
),
d
.
object
=
i
,
d
.
z
=
A
.
z
,
c
.
push
(
d
)}
f
&&
c
.
sort
(
b
);
return
c
};
this
.
projectScene
=
function
(
d
,
e
,
g
){
var
A
=
[],
V
=
e
.
near
,
W
=
e
.
far
,
M
,
G
,
x
,
C
,
s
,
y
,
w
,
B
,
F
,
u
,
J
,
R
,
T
,
U
,
L
,
S
,
N
;
H
=
q
=
j
=
l
=
0
;
e
.
matrixAutoUpdate
&&
e
.
update
(
void
0
,
!
0
);
d
.
update
(
void
0
,
!
1
,
e
);
o
.
multiply
(
e
.
projectionMatrix
,
e
.
matrixWorldInverse
);
z
[
0
].
set
(
o
.
n41
-
o
.
n11
,
o
.
n42
-
o
.
n12
,
o
.
n43
-
o
.
n13
,
o
.
n44
-
o
.
n14
);
z
[
1
].
set
(
o
.
n41
+
o
.
n11
,
o
.
n42
+
o
.
n12
,
o
.
n43
+
o
.
n13
,
o
.
n44
+
o
.
n14
);
z
[
2
].
set
(
o
.
n41
+
o
.
n21
,
o
.
n42
+
o
.
n22
,
o
.
n43
+
o
.
n23
,
o
.
n44
+
o
.
n24
);
z
[
3
].
set
(
o
.
n41
-
o
.
n21
,
o
.
n42
-
o
.
n22
,
o
.
n43
-
o
.
n23
,
o
.
n44
-
o
.
n24
);
z
[
4
].
set
(
o
.
n41
-
o
.
n31
,
o
.
n42
-
o
.
n32
,
o
.
n43
-
o
.
n33
,
o
.
n44
-
o
.
n34
);
z
[
5
].
set
(
o
.
n41
+
o
.
n31
,
o
.
n42
+
o
.
n32
,
o
.
n43
+
V
=
e
.
near
,
W
=
e
.
far
,
M
,
G
,
x
,
C
,
s
,
y
,
w
,
B
,
F
,
u
,
J
,
R
,
T
,
U
,
L
,
S
,
N
;
H
=
q
=
j
=
l
=
0
;
e
.
matrixAutoUpdate
&&
e
.
update
(
void
0
,
!
0
);
d
.
update
(
void
0
,
!
1
,
e
);
o
.
multiply
(
e
.
projectionMatrix
,
e
.
matrixWorldInverse
);
z
[
0
].
set
(
o
.
n41
-
o
.
n11
,
o
.
n42
-
o
.
n12
,
o
.
n43
-
o
.
n13
,
o
.
n44
-
o
.
n14
);
z
[
1
].
set
(
o
.
n41
+
o
.
n11
,
o
.
n42
+
o
.
n12
,
o
.
n43
+
o
.
n13
,
o
.
n44
+
o
.
n14
);
z
[
2
].
set
(
o
.
n41
+
o
.
n21
,
o
.
n42
+
o
.
n22
,
o
.
n43
+
o
.
n23
,
o
.
n44
+
o
.
n24
);
z
[
3
].
set
(
o
.
n41
-
o
.
n21
,
o
.
n42
-
o
.
n22
,
o
.
n43
-
o
.
n23
,
o
.
n44
-
o
.
n24
);
z
[
4
].
set
(
o
.
n41
-
o
.
n31
,
o
.
n42
-
o
.
n32
,
o
.
n43
-
o
.
n33
,
o
.
n44
-
o
.
n34
);
z
[
5
].
set
(
o
.
n41
+
o
.
n31
,
o
.
n42
+
o
.
n32
,
o
.
n43
+
...
...
build/custom/ThreeSVG.js
浏览文件 @
e4b75f1c
...
@@ -66,7 +66,9 @@ if(this.vertices.length>0){this.boundingBox={x:[this.vertices[0].position.x,this
...
@@ -66,7 +66,9 @@ if(this.vertices.length>0){this.boundingBox={x:[this.vertices[0].position.x,this
else
if
(
a
.
position
.
y
>
this
.
boundingBox
.
y
[
1
])
this
.
boundingBox
.
y
[
1
]
=
a
.
position
.
y
;
if
(
a
.
position
.
z
<
this
.
boundingBox
.
z
[
0
])
this
.
boundingBox
.
z
[
0
]
=
a
.
position
.
z
;
else
if
(
a
.
position
.
z
>
this
.
boundingBox
.
z
[
1
])
this
.
boundingBox
.
z
[
1
]
=
a
.
position
.
z
}}},
computeBoundingSphere
:
function
(){
for
(
var
a
=
0
,
b
=
0
,
c
=
this
.
vertices
.
length
;
b
<
c
;
b
++
)
a
=
Math
.
max
(
a
,
this
.
vertices
[
b
].
position
.
length
());
this
.
boundingSphere
=
{
radius
:
a
}},
computeEdgeFaces
:
function
(){
function
a
(
a
,
b
){
return
Math
.
min
(
a
,
b
)
+
"
_
"
+
Math
.
max
(
a
,
b
)}
function
b
(
a
,
b
,
c
){
a
[
b
]
===
else
if
(
a
.
position
.
y
>
this
.
boundingBox
.
y
[
1
])
this
.
boundingBox
.
y
[
1
]
=
a
.
position
.
y
;
if
(
a
.
position
.
z
<
this
.
boundingBox
.
z
[
0
])
this
.
boundingBox
.
z
[
0
]
=
a
.
position
.
z
;
else
if
(
a
.
position
.
z
>
this
.
boundingBox
.
z
[
1
])
this
.
boundingBox
.
z
[
1
]
=
a
.
position
.
z
}}},
computeBoundingSphere
:
function
(){
for
(
var
a
=
0
,
b
=
0
,
c
=
this
.
vertices
.
length
;
b
<
c
;
b
++
)
a
=
Math
.
max
(
a
,
this
.
vertices
[
b
].
position
.
length
());
this
.
boundingSphere
=
{
radius
:
a
}},
computeEdgeFaces
:
function
(){
function
a
(
a
,
b
){
return
Math
.
min
(
a
,
b
)
+
"
_
"
+
Math
.
max
(
a
,
b
)}
function
b
(
a
,
b
,
c
){
a
[
b
]
===
void
0
?(
a
[
b
]
=
{
set
:{},
array
:[]},
a
[
b
].
set
[
c
]
=
1
,
a
[
b
].
array
.
push
(
c
)):
a
[
b
].
set
[
c
]
===
void
0
&&
(
a
[
b
].
set
[
c
]
=
1
,
a
[
b
].
array
.
push
(
c
))}
var
c
,
d
,
e
,
g
,
f
,
h
=
{};
c
=
0
;
for
(
d
=
this
.
faces
.
length
;
c
<
d
;
c
++
)
f
=
this
.
faces
[
c
],
f
instanceof
THREE
.
Face3
?(
e
=
a
(
f
.
a
,
f
.
b
),
b
(
h
,
e
,
c
),
e
=
a
(
f
.
b
,
f
.
c
),
b
(
h
,
e
,
c
),
e
=
a
(
f
.
a
,
f
.
c
),
b
(
h
,
e
,
c
)):
f
instanceof
THREE
.
Face4
&&
(
e
=
a
(
f
.
b
,
f
.
d
),
b
(
h
,
e
,
c
),
e
=
a
(
f
.
a
,
f
.
b
),
b
(
h
,
e
,
c
),
e
=
a
(
f
.
a
,
f
.
d
),
b
(
h
,
e
,
c
),
e
=
a
(
f
.
b
,
f
.
c
),
b
(
h
,
e
,
c
),
e
=
a
(
f
.
c
,
f
.
d
),
b
(
h
,
e
,
c
));
c
=
0
;
for
(
d
=
this
.
edges
.
length
;
c
<
d
;
c
++
){
f
=
this
.
edges
[
c
];
e
=
f
.
vertexIndices
[
0
];
g
=
f
.
vertexIndices
[
1
];
void
0
?(
a
[
b
]
=
{
set
:{},
array
:[]},
a
[
b
].
set
[
c
]
=
1
,
a
[
b
].
array
.
push
(
c
)):
a
[
b
].
set
[
c
]
===
void
0
&&
(
a
[
b
].
set
[
c
]
=
1
,
a
[
b
].
array
.
push
(
c
))}
var
c
,
d
,
e
,
g
,
f
,
h
=
{};
c
=
0
;
for
(
d
=
this
.
faces
.
length
;
c
<
d
;
c
++
)
f
=
this
.
faces
[
c
],
f
instanceof
THREE
.
Face3
?(
e
=
a
(
f
.
a
,
f
.
b
),
b
(
h
,
e
,
c
),
e
=
a
(
f
.
b
,
f
.
c
),
b
(
h
,
e
,
c
),
e
=
a
(
f
.
a
,
f
.
c
),
b
(
h
,
e
,
c
)):
f
instanceof
THREE
.
Face4
&&
(
e
=
a
(
f
.
b
,
f
.
d
),
b
(
h
,
e
,
c
),
e
=
a
(
f
.
a
,
f
.
b
),
b
(
h
,
e
,
c
),
e
=
a
(
f
.
a
,
f
.
d
),
b
(
h
,
e
,
c
),
e
=
a
(
f
.
b
,
f
.
c
),
b
(
h
,
e
,
c
),
e
=
a
(
f
.
c
,
f
.
d
),
b
(
h
,
e
,
c
));
c
=
0
;
for
(
d
=
this
.
edges
.
length
;
c
<
d
;
c
++
){
f
=
this
.
edges
[
c
];
e
=
f
.
vertexIndices
[
0
];
g
=
f
.
vertexIndices
[
1
];
f
.
faceIndices
=
h
[
a
(
e
,
g
)].
array
;
for
(
e
=
0
;
e
<
f
.
faceIndices
.
length
;
e
++
)
g
=
f
.
faceIndices
[
e
],
f
.
faces
.
push
(
this
.
faces
[
g
])}}};
THREE
.
GeometryIdCounter
=
0
;
THREE
.
Camera
=
function
(
a
,
b
,
c
,
d
,
e
){
THREE
.
Object3D
.
call
(
this
);
this
.
fov
=
a
||
50
;
this
.
aspect
=
b
||
1
;
this
.
near
=
c
||
0.1
;
this
.
far
=
d
||
2
E3
;
this
.
target
=
e
||
new
THREE
.
Object3D
;
this
.
useTarget
=!
0
;
this
.
matrixWorldInverse
=
new
THREE
.
Matrix4
;
this
.
projectionMatrix
=
null
;
this
.
updateProjectionMatrix
()};
THREE
.
Camera
.
prototype
=
new
THREE
.
Object3D
;
THREE
.
Camera
.
prototype
.
constructor
=
THREE
.
Camera
;
f
.
faceIndices
=
h
[
a
(
e
,
g
)].
array
;
for
(
e
=
0
;
e
<
f
.
faceIndices
.
length
;
e
++
)
g
=
f
.
faceIndices
[
e
],
f
.
faces
.
push
(
this
.
faces
[
g
])}}};
THREE
.
GeometryIdCounter
=
0
;
THREE
.
Camera
=
function
(
a
,
b
,
c
,
d
,
e
){
THREE
.
Object3D
.
call
(
this
);
this
.
fov
=
a
||
50
;
this
.
aspect
=
b
||
1
;
this
.
near
=
c
||
0.1
;
this
.
far
=
d
||
2
E3
;
this
.
target
=
e
||
new
THREE
.
Object3D
;
this
.
useTarget
=!
0
;
this
.
matrixWorldInverse
=
new
THREE
.
Matrix4
;
this
.
projectionMatrix
=
null
;
this
.
updateProjectionMatrix
()};
THREE
.
Camera
.
prototype
=
new
THREE
.
Object3D
;
THREE
.
Camera
.
prototype
.
constructor
=
THREE
.
Camera
;
THREE
.
Camera
.
prototype
.
supr
=
THREE
.
Object3D
.
prototype
;
THREE
.
Camera
.
prototype
.
translate
=
function
(
a
,
b
){
this
.
matrix
.
rotateAxis
(
b
);
b
.
multiplyScalar
(
a
);
this
.
position
.
addSelf
(
b
);
this
.
target
.
position
.
addSelf
(
b
)};
THREE
.
Camera
.
prototype
.
updateProjectionMatrix
=
function
(){
this
.
projectionMatrix
=
THREE
.
Matrix4
.
makePerspective
(
this
.
fov
,
this
.
aspect
,
this
.
near
,
this
.
far
)};
THREE
.
Camera
.
prototype
.
supr
=
THREE
.
Object3D
.
prototype
;
THREE
.
Camera
.
prototype
.
translate
=
function
(
a
,
b
){
this
.
matrix
.
rotateAxis
(
b
);
b
.
multiplyScalar
(
a
);
this
.
position
.
addSelf
(
b
);
this
.
target
.
position
.
addSelf
(
b
)};
THREE
.
Camera
.
prototype
.
updateProjectionMatrix
=
function
(){
if
(
this
.
fullWidth
){
var
a
=
this
.
fullWidth
/
this
.
fullHeight
,
b
=
Math
.
tan
(
this
.
fov
*
Math
.
PI
/
360
)
*
this
.
near
,
c
=-
b
,
d
=
a
*
c
,
a
=
Math
.
abs
(
a
*
b
-
d
),
c
=
Math
.
abs
(
b
-
c
);
this
.
projectionMatrix
=
THREE
.
Matrix4
.
makeFrustum
(
d
+
this
.
x
*
a
/
this
.
fullWidth
,
d
+
(
this
.
x
+
this
.
width
)
*
a
/
this
.
fullWidth
,
b
-
(
this
.
y
+
this
.
height
)
*
c
/
this
.
fullHeight
,
b
-
this
.
y
*
c
/
this
.
fullHeight
,
this
.
near
,
this
.
far
)}
else
this
.
projectionMatrix
=
THREE
.
Matrix4
.
makePerspective
(
this
.
fov
,
this
.
aspect
,
this
.
near
,
this
.
far
)};
THREE
.
Camera
.
prototype
.
setViewOffset
=
function
(
a
,
b
,
c
,
d
,
e
,
g
){
this
.
fullWidth
=
a
;
this
.
fullHeight
=
b
;
this
.
x
=
c
;
this
.
y
=
d
;
this
.
width
=
e
;
this
.
height
=
g
;
this
.
updateProjectionMatrix
()};
THREE
.
Camera
.
prototype
.
update
=
function
(
a
,
b
,
c
){
if
(
this
.
useTarget
)
this
.
matrix
.
lookAt
(
this
.
position
,
this
.
target
.
position
,
this
.
up
),
this
.
matrix
.
setPosition
(
this
.
position
),
a
?
this
.
matrixWorld
.
multiply
(
a
,
this
.
matrix
):
this
.
matrixWorld
.
copy
(
this
.
matrix
),
THREE
.
Matrix4
.
makeInvert
(
this
.
matrixWorld
,
this
.
matrixWorldInverse
),
b
=!
0
;
else
if
(
this
.
matrixAutoUpdate
&&
this
.
updateMatrix
(),
b
||
this
.
matrixWorldNeedsUpdate
)
a
?
this
.
matrixWorld
.
multiply
(
a
,
this
.
matrix
):
this
.
matrixWorld
.
copy
(
this
.
matrix
),
this
.
matrixWorldNeedsUpdate
=
THREE
.
Camera
.
prototype
.
update
=
function
(
a
,
b
,
c
){
if
(
this
.
useTarget
)
this
.
matrix
.
lookAt
(
this
.
position
,
this
.
target
.
position
,
this
.
up
),
this
.
matrix
.
setPosition
(
this
.
position
),
a
?
this
.
matrixWorld
.
multiply
(
a
,
this
.
matrix
):
this
.
matrixWorld
.
copy
(
this
.
matrix
),
THREE
.
Matrix4
.
makeInvert
(
this
.
matrixWorld
,
this
.
matrixWorldInverse
),
b
=!
0
;
else
if
(
this
.
matrixAutoUpdate
&&
this
.
updateMatrix
(),
b
||
this
.
matrixWorldNeedsUpdate
)
a
?
this
.
matrixWorld
.
multiply
(
a
,
this
.
matrix
):
this
.
matrixWorld
.
copy
(
this
.
matrix
),
this
.
matrixWorldNeedsUpdate
=
!
1
,
b
=!
0
,
THREE
.
Matrix4
.
makeInvert
(
this
.
matrixWorld
,
this
.
matrixWorldInverse
);
for
(
a
=
0
;
a
<
this
.
children
.
length
;
a
++
)
this
.
children
[
a
].
update
(
this
.
matrixWorld
,
b
,
c
)};
THREE
.
Light
=
function
(
a
){
THREE
.
Object3D
.
call
(
this
);
this
.
color
=
new
THREE
.
Color
(
a
)};
THREE
.
Light
.
prototype
=
new
THREE
.
Object3D
;
THREE
.
Light
.
prototype
.
constructor
=
THREE
.
Light
;
THREE
.
Light
.
prototype
.
supr
=
THREE
.
Object3D
.
prototype
;
THREE
.
AmbientLight
=
function
(
a
){
THREE
.
Light
.
call
(
this
,
a
)};
THREE
.
AmbientLight
.
prototype
=
new
THREE
.
Light
;
!
1
,
b
=!
0
,
THREE
.
Matrix4
.
makeInvert
(
this
.
matrixWorld
,
this
.
matrixWorldInverse
);
for
(
a
=
0
;
a
<
this
.
children
.
length
;
a
++
)
this
.
children
[
a
].
update
(
this
.
matrixWorld
,
b
,
c
)};
THREE
.
Light
=
function
(
a
){
THREE
.
Object3D
.
call
(
this
);
this
.
color
=
new
THREE
.
Color
(
a
)};
THREE
.
Light
.
prototype
=
new
THREE
.
Object3D
;
THREE
.
Light
.
prototype
.
constructor
=
THREE
.
Light
;
THREE
.
Light
.
prototype
.
supr
=
THREE
.
Object3D
.
prototype
;
THREE
.
AmbientLight
=
function
(
a
){
THREE
.
Light
.
call
(
this
,
a
)};
THREE
.
AmbientLight
.
prototype
=
new
THREE
.
Light
;
THREE
.
AmbientLight
.
prototype
.
constructor
=
THREE
.
AmbientLight
;
THREE
.
DirectionalLight
=
function
(
a
,
b
,
c
,
d
){
THREE
.
Light
.
call
(
this
,
a
);
this
.
position
=
new
THREE
.
Vector3
(
0
,
1
,
0
);
this
.
intensity
=
b
||
1
;
this
.
distance
=
c
||
0
;
this
.
castShadow
=
d
!==
void
0
?
d
:
!
1
};
THREE
.
DirectionalLight
.
prototype
=
new
THREE
.
Light
;
THREE
.
DirectionalLight
.
prototype
.
constructor
=
THREE
.
DirectionalLight
;
THREE
.
PointLight
=
function
(
a
,
b
,
c
){
THREE
.
Light
.
call
(
this
,
a
);
this
.
position
=
new
THREE
.
Vector3
;
this
.
intensity
=
b
||
1
;
this
.
distance
=
c
||
0
};
THREE
.
AmbientLight
.
prototype
.
constructor
=
THREE
.
AmbientLight
;
THREE
.
DirectionalLight
=
function
(
a
,
b
,
c
,
d
){
THREE
.
Light
.
call
(
this
,
a
);
this
.
position
=
new
THREE
.
Vector3
(
0
,
1
,
0
);
this
.
intensity
=
b
||
1
;
this
.
distance
=
c
||
0
;
this
.
castShadow
=
d
!==
void
0
?
d
:
!
1
};
THREE
.
DirectionalLight
.
prototype
=
new
THREE
.
Light
;
THREE
.
DirectionalLight
.
prototype
.
constructor
=
THREE
.
DirectionalLight
;
THREE
.
PointLight
=
function
(
a
,
b
,
c
){
THREE
.
Light
.
call
(
this
,
a
);
this
.
position
=
new
THREE
.
Vector3
;
this
.
intensity
=
b
||
1
;
this
.
distance
=
c
||
0
};
...
@@ -100,7 +102,7 @@ THREE.Scene=function(){THREE.Object3D.call(this);this.matrixAutoUpdate=!1;this.c
...
@@ -100,7 +102,7 @@ THREE.Scene=function(){THREE.Object3D.call(this);this.matrixAutoUpdate=!1;this.c
THREE
.
Scene
.
prototype
.
addChildRecurse
=
function
(
a
){
if
(
a
instanceof
THREE
.
Light
)
this
.
lights
.
indexOf
(
a
)
===-
1
&&
this
.
lights
.
push
(
a
);
else
if
(
a
instanceof
THREE
.
Sound
)
this
.
sounds
.
indexOf
(
a
)
===-
1
&&
this
.
sounds
.
push
(
a
);
else
if
(
!
(
a
instanceof
THREE
.
Camera
||
a
instanceof
THREE
.
Bone
)
&&
this
.
objects
.
indexOf
(
a
)
===-
1
)
this
.
objects
.
push
(
a
),
this
.
__objectsAdded
.
push
(
a
);
for
(
var
b
=
0
;
b
<
a
.
children
.
length
;
b
++
)
this
.
addChildRecurse
(
a
.
children
[
b
])};
THREE
.
Scene
.
prototype
.
addChildRecurse
=
function
(
a
){
if
(
a
instanceof
THREE
.
Light
)
this
.
lights
.
indexOf
(
a
)
===-
1
&&
this
.
lights
.
push
(
a
);
else
if
(
a
instanceof
THREE
.
Sound
)
this
.
sounds
.
indexOf
(
a
)
===-
1
&&
this
.
sounds
.
push
(
a
);
else
if
(
!
(
a
instanceof
THREE
.
Camera
||
a
instanceof
THREE
.
Bone
)
&&
this
.
objects
.
indexOf
(
a
)
===-
1
)
this
.
objects
.
push
(
a
),
this
.
__objectsAdded
.
push
(
a
);
for
(
var
b
=
0
;
b
<
a
.
children
.
length
;
b
++
)
this
.
addChildRecurse
(
a
.
children
[
b
])};
THREE
.
Scene
.
prototype
.
removeChild
=
function
(
a
){
this
.
supr
.
removeChild
.
call
(
this
,
a
);
this
.
removeChildRecurse
(
a
)};
THREE
.
Scene
.
prototype
.
removeChildRecurse
=
function
(
a
){
if
(
a
instanceof
THREE
.
Light
){
var
b
=
this
.
lights
.
indexOf
(
a
);
b
!==-
1
&&
this
.
lights
.
splice
(
b
,
1
)}
else
a
instanceof
THREE
.
Sound
?(
b
=
this
.
sounds
.
indexOf
(
a
),
b
!==-
1
&&
this
.
sounds
.
splice
(
b
,
1
)):
a
instanceof
THREE
.
Camera
||
(
b
=
this
.
objects
.
indexOf
(
a
),
b
!==-
1
&&
(
this
.
objects
.
splice
(
b
,
1
),
this
.
__objectsRemoved
.
push
(
a
)));
for
(
b
=
0
;
b
<
a
.
children
.
length
;
b
++
)
this
.
removeChildRecurse
(
a
.
children
[
b
])};
THREE
.
Scene
.
prototype
.
removeChild
=
function
(
a
){
this
.
supr
.
removeChild
.
call
(
this
,
a
);
this
.
removeChildRecurse
(
a
)};
THREE
.
Scene
.
prototype
.
removeChildRecurse
=
function
(
a
){
if
(
a
instanceof
THREE
.
Light
){
var
b
=
this
.
lights
.
indexOf
(
a
);
b
!==-
1
&&
this
.
lights
.
splice
(
b
,
1
)}
else
a
instanceof
THREE
.
Sound
?(
b
=
this
.
sounds
.
indexOf
(
a
),
b
!==-
1
&&
this
.
sounds
.
splice
(
b
,
1
)):
a
instanceof
THREE
.
Camera
||
(
b
=
this
.
objects
.
indexOf
(
a
),
b
!==-
1
&&
(
this
.
objects
.
splice
(
b
,
1
),
this
.
__objectsRemoved
.
push
(
a
)));
for
(
b
=
0
;
b
<
a
.
children
.
length
;
b
++
)
this
.
removeChildRecurse
(
a
.
children
[
b
])};
THREE
.
Scene
.
prototype
.
addObject
=
THREE
.
Scene
.
prototype
.
addChild
;
THREE
.
Scene
.
prototype
.
removeObject
=
THREE
.
Scene
.
prototype
.
removeChild
;
THREE
.
Scene
.
prototype
.
addLight
=
THREE
.
Scene
.
prototype
.
addChild
;
THREE
.
Scene
.
prototype
.
removeLight
=
THREE
.
Scene
.
prototype
.
removeChild
;
THREE
.
Scene
.
prototype
.
addObject
=
THREE
.
Scene
.
prototype
.
addChild
;
THREE
.
Scene
.
prototype
.
removeObject
=
THREE
.
Scene
.
prototype
.
removeChild
;
THREE
.
Scene
.
prototype
.
addLight
=
THREE
.
Scene
.
prototype
.
addChild
;
THREE
.
Scene
.
prototype
.
removeLight
=
THREE
.
Scene
.
prototype
.
removeChild
;
THREE
.
Projector
=
function
(){
function
a
(){
var
a
=
i
[
h
]
=
i
[
h
]
||
new
THREE
.
RenderableVertex
;
h
++
;
return
a
}
function
b
(
a
,
b
){
return
b
.
z
-
a
.
z
}
function
c
(
a
,
b
){
var
c
=
0
,
d
=
1
,
f
=
a
.
z
+
a
.
w
,
e
=
b
.
z
+
b
.
w
,
g
=-
a
.
z
+
a
.
w
,
h
=-
b
.
z
+
b
.
w
;
return
f
>=
0
&&
e
>=
0
&&
g
>=
0
&&
h
>=
0
?
!
0
:
f
<
0
&&
e
<
0
||
g
<
0
&&
h
<
0
?
!
1
:(
f
<
0
?
c
=
Math
.
max
(
c
,
f
/
(
f
-
e
)):
e
<
0
&&
(
d
=
Math
.
min
(
d
,
f
/
(
f
-
e
))),
g
<
0
?
c
=
Math
.
max
(
c
,
g
/
(
g
-
h
)):
h
<
0
&&
(
d
=
Math
.
min
(
d
,
g
/
(
g
-
h
))),
d
<
c
?
!
1
:(
a
.
lerpSelf
(
b
,
c
),
b
.
lerpSelf
(
a
,
1
-
d
),
!
0
))}
var
d
,
e
,
g
=
[],
f
,
h
,
i
=
[],
l
,
k
,
n
=
[],
j
,
o
=
[],
p
,
q
,
t
=
[],
u
,
G
,
y
=
[],
E
=
new
THREE
.
Vector4
,
r
=
new
THREE
.
Vector4
,
THREE
.
Projector
=
function
(){
function
a
(){
var
a
=
i
[
h
]
=
i
[
h
]
||
new
THREE
.
RenderableVertex
;
h
++
;
return
a
}
function
b
(
a
,
b
){
return
b
.
z
-
a
.
z
}
function
c
(
a
,
b
){
var
c
=
0
,
d
=
1
,
e
=
a
.
z
+
a
.
w
,
f
=
b
.
z
+
b
.
w
,
g
=-
a
.
z
+
a
.
w
,
h
=-
b
.
z
+
b
.
w
;
return
e
>=
0
&&
f
>=
0
&&
g
>=
0
&&
h
>=
0
?
!
0
:
e
<
0
&&
f
<
0
||
g
<
0
&&
h
<
0
?
!
1
:(
e
<
0
?
c
=
Math
.
max
(
c
,
e
/
(
e
-
f
)):
f
<
0
&&
(
d
=
Math
.
min
(
d
,
e
/
(
e
-
f
))),
g
<
0
?
c
=
Math
.
max
(
c
,
g
/
(
g
-
h
)):
h
<
0
&&
(
d
=
Math
.
min
(
d
,
g
/
(
g
-
h
))),
d
<
c
?
!
1
:(
a
.
lerpSelf
(
b
,
c
),
b
.
lerpSelf
(
a
,
1
-
d
),
!
0
))}
var
d
,
e
,
g
=
[],
f
,
h
,
i
=
[],
l
,
k
,
n
=
[],
j
,
o
=
[],
p
,
q
,
t
=
[],
u
,
G
,
y
=
[],
E
=
new
THREE
.
Vector4
,
r
=
new
THREE
.
Vector4
,
m
=
new
THREE
.
Matrix4
,
z
=
new
THREE
.
Matrix4
,
A
=
[
new
THREE
.
Vector4
,
new
THREE
.
Vector4
,
new
THREE
.
Vector4
,
new
THREE
.
Vector4
,
new
THREE
.
Vector4
,
new
THREE
.
Vector4
],
C
=
new
THREE
.
Vector4
,
v
=
new
THREE
.
Vector4
;
this
.
projectVector
=
function
(
a
,
b
){
m
.
multiply
(
b
.
projectionMatrix
,
b
.
matrixWorldInverse
);
m
.
multiplyVector3
(
a
);
return
a
};
this
.
unprojectVector
=
function
(
a
,
b
){
m
.
multiply
(
b
.
matrixWorld
,
THREE
.
Matrix4
.
makeInvert
(
b
.
projectionMatrix
));
m
.
multiplyVector3
(
a
);
return
a
};
this
.
projectObjects
=
function
(
a
,
c
,
f
){
var
c
=
[],
h
,
l
,
j
;
e
=
0
;
l
=
m
=
new
THREE
.
Matrix4
,
z
=
new
THREE
.
Matrix4
,
A
=
[
new
THREE
.
Vector4
,
new
THREE
.
Vector4
,
new
THREE
.
Vector4
,
new
THREE
.
Vector4
,
new
THREE
.
Vector4
,
new
THREE
.
Vector4
],
C
=
new
THREE
.
Vector4
,
v
=
new
THREE
.
Vector4
;
this
.
projectVector
=
function
(
a
,
b
){
m
.
multiply
(
b
.
projectionMatrix
,
b
.
matrixWorldInverse
);
m
.
multiplyVector3
(
a
);
return
a
};
this
.
unprojectVector
=
function
(
a
,
b
){
m
.
multiply
(
b
.
matrixWorld
,
THREE
.
Matrix4
.
makeInvert
(
b
.
projectionMatrix
));
m
.
multiplyVector3
(
a
);
return
a
};
this
.
projectObjects
=
function
(
a
,
c
,
f
){
var
c
=
[],
h
,
l
,
j
;
e
=
0
;
l
=
a
.
objects
;
a
=
0
;
for
(
h
=
l
.
length
;
a
<
h
;
a
++
){
j
=
l
[
a
];
var
i
;
if
(
!
(
i
=!
j
.
visible
))
if
(
i
=
j
instanceof
THREE
.
Mesh
){
a
:{
i
=
void
0
;
for
(
var
k
=
j
.
matrixWorld
,
o
=-
j
.
geometry
.
boundingSphere
.
radius
*
Math
.
max
(
j
.
scale
.
x
,
Math
.
max
(
j
.
scale
.
y
,
j
.
scale
.
z
)),
n
=
0
;
n
<
6
;
n
++
)
if
(
i
=
A
[
n
].
x
*
k
.
n14
+
A
[
n
].
y
*
k
.
n24
+
A
[
n
].
z
*
k
.
n34
+
A
[
n
].
w
,
i
<=
o
){
i
=!
1
;
break
a
}
i
=!
0
}
i
=!
i
}
if
(
!
i
)
i
=
g
[
e
]
=
g
[
e
]
||
new
THREE
.
RenderableObject
,
e
++
,
d
=
i
,
E
.
copy
(
j
.
position
),
m
.
multiplyVector3
(
E
),
d
.
object
=
j
,
d
.
z
=
E
.
z
,
c
.
push
(
d
)}
f
&&
c
.
sort
(
b
);
return
c
};
this
.
projectScene
=
function
(
d
,
e
,
g
){
var
B
=
[],
a
.
objects
;
a
=
0
;
for
(
h
=
l
.
length
;
a
<
h
;
a
++
){
j
=
l
[
a
];
var
i
;
if
(
!
(
i
=!
j
.
visible
))
if
(
i
=
j
instanceof
THREE
.
Mesh
){
a
:{
i
=
void
0
;
for
(
var
k
=
j
.
matrixWorld
,
o
=-
j
.
geometry
.
boundingSphere
.
radius
*
Math
.
max
(
j
.
scale
.
x
,
Math
.
max
(
j
.
scale
.
y
,
j
.
scale
.
z
)),
n
=
0
;
n
<
6
;
n
++
)
if
(
i
=
A
[
n
].
x
*
k
.
n14
+
A
[
n
].
y
*
k
.
n24
+
A
[
n
].
z
*
k
.
n34
+
A
[
n
].
w
,
i
<=
o
){
i
=!
1
;
break
a
}
i
=!
0
}
i
=!
i
}
if
(
!
i
)
i
=
g
[
e
]
=
g
[
e
]
||
new
THREE
.
RenderableObject
,
e
++
,
d
=
i
,
E
.
copy
(
j
.
position
),
m
.
multiplyVector3
(
E
),
d
.
object
=
j
,
d
.
z
=
E
.
z
,
c
.
push
(
d
)}
f
&&
c
.
sort
(
b
);
return
c
};
this
.
projectScene
=
function
(
d
,
e
,
g
){
var
B
=
[],
E
=
e
.
near
,
S
=
e
.
far
,
N
,
P
,
H
,
M
,
x
,
I
,
D
,
K
,
O
,
s
,
w
,
U
,
W
,
X
,
R
,
V
,
T
;
G
=
q
=
j
=
k
=
0
;
e
.
matrixAutoUpdate
&&
e
.
update
(
void
0
,
!
0
);
d
.
update
(
void
0
,
!
1
,
e
);
m
.
multiply
(
e
.
projectionMatrix
,
e
.
matrixWorldInverse
);
A
[
0
].
set
(
m
.
n41
-
m
.
n11
,
m
.
n42
-
m
.
n12
,
m
.
n43
-
m
.
n13
,
m
.
n44
-
m
.
n14
);
A
[
1
].
set
(
m
.
n41
+
m
.
n11
,
m
.
n42
+
m
.
n12
,
m
.
n43
+
m
.
n13
,
m
.
n44
+
m
.
n14
);
A
[
2
].
set
(
m
.
n41
+
m
.
n21
,
m
.
n42
+
m
.
n22
,
m
.
n43
+
m
.
n23
,
m
.
n44
+
m
.
n24
);
A
[
3
].
set
(
m
.
n41
-
m
.
n21
,
m
.
n42
-
m
.
n22
,
m
.
n43
-
m
.
n23
,
m
.
n44
-
m
.
n24
);
A
[
4
].
set
(
m
.
n41
-
m
.
n31
,
m
.
n42
-
m
.
n32
,
m
.
n43
-
m
.
n33
,
m
.
n44
-
m
.
n34
);
A
[
5
].
set
(
m
.
n41
+
m
.
n31
,
m
.
n42
+
m
.
n32
,
m
.
n43
+
E
=
e
.
near
,
S
=
e
.
far
,
N
,
P
,
H
,
M
,
x
,
I
,
D
,
K
,
O
,
s
,
w
,
U
,
W
,
X
,
R
,
V
,
T
;
G
=
q
=
j
=
k
=
0
;
e
.
matrixAutoUpdate
&&
e
.
update
(
void
0
,
!
0
);
d
.
update
(
void
0
,
!
1
,
e
);
m
.
multiply
(
e
.
projectionMatrix
,
e
.
matrixWorldInverse
);
A
[
0
].
set
(
m
.
n41
-
m
.
n11
,
m
.
n42
-
m
.
n12
,
m
.
n43
-
m
.
n13
,
m
.
n44
-
m
.
n14
);
A
[
1
].
set
(
m
.
n41
+
m
.
n11
,
m
.
n42
+
m
.
n12
,
m
.
n43
+
m
.
n13
,
m
.
n44
+
m
.
n14
);
A
[
2
].
set
(
m
.
n41
+
m
.
n21
,
m
.
n42
+
m
.
n22
,
m
.
n43
+
m
.
n23
,
m
.
n44
+
m
.
n24
);
A
[
3
].
set
(
m
.
n41
-
m
.
n21
,
m
.
n42
-
m
.
n22
,
m
.
n43
-
m
.
n23
,
m
.
n44
-
m
.
n24
);
A
[
4
].
set
(
m
.
n41
-
m
.
n31
,
m
.
n42
-
m
.
n32
,
m
.
n43
-
m
.
n33
,
m
.
n44
-
m
.
n34
);
A
[
5
].
set
(
m
.
n41
+
m
.
n31
,
m
.
n42
+
m
.
n32
,
m
.
n43
+
...
...
build/custom/ThreeWebGL.js
浏览文件 @
e4b75f1c
...
@@ -70,7 +70,9 @@ THREE.Spline=function(b){function d(b,d,e,f,h,g,i){b=(e-b)*0.5;f=(f-d)*0.5;retur
...
@@ -70,7 +70,9 @@ THREE.Spline=function(b){function d(b,d,e,f,h,g,i){b=(e-b)*0.5;f=(f-d)*0.5;retur
v
=
this
.
points
[
e
[
2
]];
r
=
this
.
points
[
e
[
3
]];
j
=
g
*
g
;
p
=
g
*
j
;
f
.
x
=
d
(
k
.
x
,
n
.
x
,
v
.
x
,
r
.
x
,
g
,
j
,
p
);
f
.
y
=
d
(
k
.
y
,
n
.
y
,
v
.
y
,
r
.
y
,
g
,
j
,
p
);
f
.
z
=
d
(
k
.
z
,
n
.
z
,
v
.
z
,
r
.
z
,
g
,
j
,
p
);
return
f
};
this
.
getControlPointsArray
=
function
(){
var
b
,
d
,
e
=
this
.
points
.
length
,
f
=
[];
for
(
b
=
0
;
b
<
e
;
b
++
)
d
=
this
.
points
[
b
],
f
[
b
]
=
[
d
.
x
,
d
.
y
,
d
.
z
];
return
f
};
this
.
getLength
=
function
(
b
){
var
d
,
e
,
f
=
d
=
d
=
0
,
h
=
new
THREE
.
Vector3
,
g
=
new
THREE
.
Vector3
,
i
=
[],
j
=
0
;
i
[
0
]
=
0
;
b
||
(
b
=
100
);
e
=
this
.
points
.
length
*
b
;
h
.
copy
(
this
.
points
[
0
]);
for
(
b
=
1
;
b
<
e
;
b
++
)
d
=
b
/
e
,
position
=
this
.
getPoint
(
d
),
g
.
copy
(
position
),
v
=
this
.
points
[
e
[
2
]];
r
=
this
.
points
[
e
[
3
]];
j
=
g
*
g
;
p
=
g
*
j
;
f
.
x
=
d
(
k
.
x
,
n
.
x
,
v
.
x
,
r
.
x
,
g
,
j
,
p
);
f
.
y
=
d
(
k
.
y
,
n
.
y
,
v
.
y
,
r
.
y
,
g
,
j
,
p
);
f
.
z
=
d
(
k
.
z
,
n
.
z
,
v
.
z
,
r
.
z
,
g
,
j
,
p
);
return
f
};
this
.
getControlPointsArray
=
function
(){
var
b
,
d
,
e
=
this
.
points
.
length
,
f
=
[];
for
(
b
=
0
;
b
<
e
;
b
++
)
d
=
this
.
points
[
b
],
f
[
b
]
=
[
d
.
x
,
d
.
y
,
d
.
z
];
return
f
};
this
.
getLength
=
function
(
b
){
var
d
,
e
,
f
=
d
=
d
=
0
,
h
=
new
THREE
.
Vector3
,
g
=
new
THREE
.
Vector3
,
i
=
[],
j
=
0
;
i
[
0
]
=
0
;
b
||
(
b
=
100
);
e
=
this
.
points
.
length
*
b
;
h
.
copy
(
this
.
points
[
0
]);
for
(
b
=
1
;
b
<
e
;
b
++
)
d
=
b
/
e
,
position
=
this
.
getPoint
(
d
),
g
.
copy
(
position
),
j
+=
g
.
distanceTo
(
h
),
h
.
copy
(
position
),
d
*=
this
.
points
.
length
-
1
,
d
=
Math
.
floor
(
d
),
d
!=
f
&&
(
i
[
d
]
=
j
,
f
=
d
);
i
[
i
.
length
]
=
j
;
return
{
chunks
:
i
,
total
:
j
}};
this
.
reparametrizeByArcLength
=
function
(
b
){
var
d
,
e
,
f
,
h
,
g
,
i
,
j
=
[],
k
=
new
THREE
.
Vector3
,
p
=
this
.
getLength
();
j
.
push
(
k
.
copy
(
this
.
points
[
0
]).
clone
());
for
(
d
=
1
;
d
<
this
.
points
.
length
;
d
++
){
e
=
p
.
chunks
[
d
]
-
p
.
chunks
[
d
-
1
];
i
=
Math
.
ceil
(
b
*
e
/
p
.
total
);
h
=
(
d
-
1
)
/
(
this
.
points
.
length
-
1
);
g
=
d
/
(
this
.
points
.
length
-
1
);
for
(
e
=
1
;
e
<
i
-
1
;
e
++
)
f
=
h
+
e
*
(
1
/
i
)
*
(
g
-
h
),
position
=
this
.
getPoint
(
f
),
j
.
push
(
k
.
copy
(
position
).
clone
());
j
+=
g
.
distanceTo
(
h
),
h
.
copy
(
position
),
d
*=
this
.
points
.
length
-
1
,
d
=
Math
.
floor
(
d
),
d
!=
f
&&
(
i
[
d
]
=
j
,
f
=
d
);
i
[
i
.
length
]
=
j
;
return
{
chunks
:
i
,
total
:
j
}};
this
.
reparametrizeByArcLength
=
function
(
b
){
var
d
,
e
,
f
,
h
,
g
,
i
,
j
=
[],
k
=
new
THREE
.
Vector3
,
p
=
this
.
getLength
();
j
.
push
(
k
.
copy
(
this
.
points
[
0
]).
clone
());
for
(
d
=
1
;
d
<
this
.
points
.
length
;
d
++
){
e
=
p
.
chunks
[
d
]
-
p
.
chunks
[
d
-
1
];
i
=
Math
.
ceil
(
b
*
e
/
p
.
total
);
h
=
(
d
-
1
)
/
(
this
.
points
.
length
-
1
);
g
=
d
/
(
this
.
points
.
length
-
1
);
for
(
e
=
1
;
e
<
i
-
1
;
e
++
)
f
=
h
+
e
*
(
1
/
i
)
*
(
g
-
h
),
position
=
this
.
getPoint
(
f
),
j
.
push
(
k
.
copy
(
position
).
clone
());
j
.
push
(
k
.
copy
(
this
.
points
[
d
]).
clone
())}
this
.
points
=
j
}};
THREE
.
Edge
=
function
(
b
,
d
,
e
,
f
){
this
.
vertices
=
[
b
,
d
];
this
.
vertexIndices
=
[
e
,
f
];
this
.
faces
=
[];
this
.
faceIndices
=
[]};
THREE
.
Camera
=
function
(
b
,
d
,
e
,
f
,
h
){
THREE
.
Object3D
.
call
(
this
);
this
.
fov
=
b
||
50
;
this
.
aspect
=
d
||
1
;
this
.
near
=
e
||
0.1
;
this
.
far
=
f
||
2
E3
;
this
.
target
=
h
||
new
THREE
.
Object3D
;
this
.
useTarget
=!
0
;
this
.
matrixWorldInverse
=
new
THREE
.
Matrix4
;
this
.
projectionMatrix
=
null
;
this
.
updateProjectionMatrix
()};
THREE
.
Camera
.
prototype
=
new
THREE
.
Object3D
;
j
.
push
(
k
.
copy
(
this
.
points
[
d
]).
clone
())}
this
.
points
=
j
}};
THREE
.
Edge
=
function
(
b
,
d
,
e
,
f
){
this
.
vertices
=
[
b
,
d
];
this
.
vertexIndices
=
[
e
,
f
];
this
.
faces
=
[];
this
.
faceIndices
=
[]};
THREE
.
Camera
=
function
(
b
,
d
,
e
,
f
,
h
){
THREE
.
Object3D
.
call
(
this
);
this
.
fov
=
b
||
50
;
this
.
aspect
=
d
||
1
;
this
.
near
=
e
||
0.1
;
this
.
far
=
f
||
2
E3
;
this
.
target
=
h
||
new
THREE
.
Object3D
;
this
.
useTarget
=!
0
;
this
.
matrixWorldInverse
=
new
THREE
.
Matrix4
;
this
.
projectionMatrix
=
null
;
this
.
updateProjectionMatrix
()};
THREE
.
Camera
.
prototype
=
new
THREE
.
Object3D
;
THREE
.
Camera
.
prototype
.
constructor
=
THREE
.
Camera
;
THREE
.
Camera
.
prototype
.
supr
=
THREE
.
Object3D
.
prototype
;
THREE
.
Camera
.
prototype
.
translate
=
function
(
b
,
d
){
this
.
matrix
.
rotateAxis
(
d
);
d
.
multiplyScalar
(
b
);
this
.
position
.
addSelf
(
d
);
this
.
target
.
position
.
addSelf
(
d
)};
THREE
.
Camera
.
prototype
.
updateProjectionMatrix
=
function
(){
this
.
projectionMatrix
=
THREE
.
Matrix4
.
makePerspective
(
this
.
fov
,
this
.
aspect
,
this
.
near
,
this
.
far
)};
THREE
.
Camera
.
prototype
.
constructor
=
THREE
.
Camera
;
THREE
.
Camera
.
prototype
.
supr
=
THREE
.
Object3D
.
prototype
;
THREE
.
Camera
.
prototype
.
translate
=
function
(
b
,
d
){
this
.
matrix
.
rotateAxis
(
d
);
d
.
multiplyScalar
(
b
);
this
.
position
.
addSelf
(
d
);
this
.
target
.
position
.
addSelf
(
d
)};
THREE
.
Camera
.
prototype
.
updateProjectionMatrix
=
function
(){
if
(
this
.
fullWidth
){
var
b
=
this
.
fullWidth
/
this
.
fullHeight
,
d
=
Math
.
tan
(
this
.
fov
*
Math
.
PI
/
360
)
*
this
.
near
,
e
=-
d
,
f
=
b
*
e
,
b
=
Math
.
abs
(
b
*
d
-
f
),
e
=
Math
.
abs
(
d
-
e
);
this
.
projectionMatrix
=
THREE
.
Matrix4
.
makeFrustum
(
f
+
this
.
x
*
b
/
this
.
fullWidth
,
f
+
(
this
.
x
+
this
.
width
)
*
b
/
this
.
fullWidth
,
d
-
(
this
.
y
+
this
.
height
)
*
e
/
this
.
fullHeight
,
d
-
this
.
y
*
e
/
this
.
fullHeight
,
this
.
near
,
this
.
far
)}
else
this
.
projectionMatrix
=
THREE
.
Matrix4
.
makePerspective
(
this
.
fov
,
this
.
aspect
,
this
.
near
,
this
.
far
)};
THREE
.
Camera
.
prototype
.
setViewOffset
=
function
(
b
,
d
,
e
,
f
,
h
,
i
){
this
.
fullWidth
=
b
;
this
.
fullHeight
=
d
;
this
.
x
=
e
;
this
.
y
=
f
;
this
.
width
=
h
;
this
.
height
=
i
;
this
.
updateProjectionMatrix
()};
THREE
.
Camera
.
prototype
.
update
=
function
(
b
,
d
,
e
){
if
(
this
.
useTarget
)
this
.
matrix
.
lookAt
(
this
.
position
,
this
.
target
.
position
,
this
.
up
),
this
.
matrix
.
setPosition
(
this
.
position
),
b
?
this
.
matrixWorld
.
multiply
(
b
,
this
.
matrix
):
this
.
matrixWorld
.
copy
(
this
.
matrix
),
THREE
.
Matrix4
.
makeInvert
(
this
.
matrixWorld
,
this
.
matrixWorldInverse
),
d
=!
0
;
else
if
(
this
.
matrixAutoUpdate
&&
this
.
updateMatrix
(),
d
||
this
.
matrixWorldNeedsUpdate
)
b
?
this
.
matrixWorld
.
multiply
(
b
,
this
.
matrix
):
this
.
matrixWorld
.
copy
(
this
.
matrix
),
this
.
matrixWorldNeedsUpdate
=
THREE
.
Camera
.
prototype
.
update
=
function
(
b
,
d
,
e
){
if
(
this
.
useTarget
)
this
.
matrix
.
lookAt
(
this
.
position
,
this
.
target
.
position
,
this
.
up
),
this
.
matrix
.
setPosition
(
this
.
position
),
b
?
this
.
matrixWorld
.
multiply
(
b
,
this
.
matrix
):
this
.
matrixWorld
.
copy
(
this
.
matrix
),
THREE
.
Matrix4
.
makeInvert
(
this
.
matrixWorld
,
this
.
matrixWorldInverse
),
d
=!
0
;
else
if
(
this
.
matrixAutoUpdate
&&
this
.
updateMatrix
(),
d
||
this
.
matrixWorldNeedsUpdate
)
b
?
this
.
matrixWorld
.
multiply
(
b
,
this
.
matrix
):
this
.
matrixWorld
.
copy
(
this
.
matrix
),
this
.
matrixWorldNeedsUpdate
=
!
1
,
d
=!
0
,
THREE
.
Matrix4
.
makeInvert
(
this
.
matrixWorld
,
this
.
matrixWorldInverse
);
for
(
b
=
0
;
b
<
this
.
children
.
length
;
b
++
)
this
.
children
[
b
].
update
(
this
.
matrixWorld
,
d
,
e
)};
THREE
.
Light
=
function
(
b
){
THREE
.
Object3D
.
call
(
this
);
this
.
color
=
new
THREE
.
Color
(
b
)};
THREE
.
Light
.
prototype
=
new
THREE
.
Object3D
;
THREE
.
Light
.
prototype
.
constructor
=
THREE
.
Light
;
THREE
.
Light
.
prototype
.
supr
=
THREE
.
Object3D
.
prototype
;
THREE
.
AmbientLight
=
function
(
b
){
THREE
.
Light
.
call
(
this
,
b
)};
THREE
.
AmbientLight
.
prototype
=
new
THREE
.
Light
;
!
1
,
d
=!
0
,
THREE
.
Matrix4
.
makeInvert
(
this
.
matrixWorld
,
this
.
matrixWorldInverse
);
for
(
b
=
0
;
b
<
this
.
children
.
length
;
b
++
)
this
.
children
[
b
].
update
(
this
.
matrixWorld
,
d
,
e
)};
THREE
.
Light
=
function
(
b
){
THREE
.
Object3D
.
call
(
this
);
this
.
color
=
new
THREE
.
Color
(
b
)};
THREE
.
Light
.
prototype
=
new
THREE
.
Object3D
;
THREE
.
Light
.
prototype
.
constructor
=
THREE
.
Light
;
THREE
.
Light
.
prototype
.
supr
=
THREE
.
Object3D
.
prototype
;
THREE
.
AmbientLight
=
function
(
b
){
THREE
.
Light
.
call
(
this
,
b
)};
THREE
.
AmbientLight
.
prototype
=
new
THREE
.
Light
;
THREE
.
AmbientLight
.
prototype
.
constructor
=
THREE
.
AmbientLight
;
THREE
.
DirectionalLight
=
function
(
b
,
d
,
e
,
f
){
THREE
.
Light
.
call
(
this
,
b
);
this
.
position
=
new
THREE
.
Vector3
(
0
,
1
,
0
);
this
.
intensity
=
d
||
1
;
this
.
distance
=
e
||
0
;
this
.
castShadow
=
f
!==
void
0
?
f
:
!
1
};
THREE
.
DirectionalLight
.
prototype
=
new
THREE
.
Light
;
THREE
.
DirectionalLight
.
prototype
.
constructor
=
THREE
.
DirectionalLight
;
THREE
.
PointLight
=
function
(
b
,
d
,
e
){
THREE
.
Light
.
call
(
this
,
b
);
this
.
position
=
new
THREE
.
Vector3
;
this
.
intensity
=
d
||
1
;
this
.
distance
=
e
||
0
};
THREE
.
AmbientLight
.
prototype
.
constructor
=
THREE
.
AmbientLight
;
THREE
.
DirectionalLight
=
function
(
b
,
d
,
e
,
f
){
THREE
.
Light
.
call
(
this
,
b
);
this
.
position
=
new
THREE
.
Vector3
(
0
,
1
,
0
);
this
.
intensity
=
d
||
1
;
this
.
distance
=
e
||
0
;
this
.
castShadow
=
f
!==
void
0
?
f
:
!
1
};
THREE
.
DirectionalLight
.
prototype
=
new
THREE
.
Light
;
THREE
.
DirectionalLight
.
prototype
.
constructor
=
THREE
.
DirectionalLight
;
THREE
.
PointLight
=
function
(
b
,
d
,
e
){
THREE
.
Light
.
call
(
this
,
b
);
this
.
position
=
new
THREE
.
Vector3
;
this
.
intensity
=
d
||
1
;
this
.
distance
=
e
||
0
};
...
...
examples/webgl_multiple_canvases_complex.html
0 → 100755
浏览文件 @
e4b75f1c
<!DOCTYPE HTML>
<html
lang=
"en"
>
<head>
<title>
three.js webgl - multiple-canvaes - complex
</title>
<meta
charset=
"utf-8"
>
<style
type=
"text/css"
>
body
{
color
:
#808080
;
font-family
:
Monospace
;
font-size
:
13px
;
text-align
:
center
;
background-color
:
#fff
;
margin
:
0px
;
overflow
:
hidden
;
}
#info
{
position
:
absolute
;
top
:
0px
;
width
:
100%
;
padding
:
5px
;
}
#container1
,
#container2
,
#container3
{
position
:
relative
;
border
:
1px
solid
red
;
}
#container1
{
width
:
300px
;
height
:
200px
;
}
#container2
{
width
:
400px
;
height
:
100px
;
left
:
150px
;
}
#container3
{
width
:
200px
;
height
:
300px
;
left
:
75px
;
}
a
{
color
:
#0080ff
;
}
</style>
</head>
<body>
<div
id=
"container"
>
<div
id=
"container1"
></div>
<div
id=
"container2"
></div>
<div
id=
"container3"
></div>
</div>
<div
id=
"info"
><a
href=
"http://github.com/mrdoob/three.js"
target=
"_blank"
>
three.js
</a>
- vertex colors - webgl
</div>
<script
type=
"text/javascript"
src=
"../build/Three.js"
></script>
<script
type=
"text/javascript"
src=
"js/Detector.js"
></script>
<script
type=
"text/javascript"
src=
"js/RequestAnimationFrame.js"
></script>
<script
type=
"text/javascript"
src=
"js/Stats.js"
></script>
<script
type=
"text/javascript"
>
if
(
!
Detector
.
webgl
)
Detector
.
addGetWebGLMessage
();
var
apps
=
[];
init
();
animate
();
function
init
()
{
var
container1
=
document
.
getElementById
(
'
container1
'
);
var
container2
=
document
.
getElementById
(
'
container2
'
);
var
container3
=
document
.
getElementById
(
'
container3
'
);
var
fullWidth
=
550
;
var
fullHeight
=
600
;
apps
.
push
(
new
App
(
'
container1
'
,
fullWidth
,
fullHeight
,
0
,
0
,
container1
.
clientWidth
,
container1
.
clientHeight
)
);
apps
.
push
(
new
App
(
'
container2
'
,
fullWidth
,
fullHeight
,
150
,
200
,
container2
.
clientWidth
,
container2
.
clientHeight
)
);
apps
.
push
(
new
App
(
'
container3
'
,
fullWidth
,
fullHeight
,
75
,
300
,
container3
.
clientWidth
,
container3
.
clientHeight
)
);
}
function
animate
()
{
for
(
var
i
=
0
;
i
<
apps
.
length
;
++
i
)
{
apps
[
i
].
animate
();
}
requestAnimationFrame
(
animate
);
}
function
App
(
containerId
,
fullWidth
,
fullHeight
,
viewX
,
viewY
,
viewWidth
,
viewHeight
)
{
var
container
,
stats
;
var
camera
,
scene
,
renderer
;
var
mesh
,
mesh2
,
mesh3
,
light
;
var
mouseX
=
0
,
mouseY
=
0
;
var
windowHalfX
=
window
.
innerWidth
/
2
;
var
windowHalfY
=
window
.
innerHeight
/
2
;
init
();
function
init
()
{
container
=
document
.
getElementById
(
containerId
);
camera
=
new
THREE
.
Camera
(
20
,
container
.
clientWidth
/
container
.
clientHeight
,
1
,
10000
);
camera
.
setViewOffset
(
fullWidth
,
fullHeight
,
viewX
,
viewY
,
viewWidth
,
viewHeight
);
camera
.
position
.
z
=
1800
;
scene
=
new
THREE
.
Scene
();
light
=
new
THREE
.
DirectionalLight
(
0xffffff
);
light
.
position
.
set
(
0
,
0
,
1
);
light
.
position
.
normalize
();
scene
.
addLight
(
light
);
var
shadowMaterial
=
new
THREE
.
MeshBasicMaterial
(
{
map
:
THREE
.
ImageUtils
.
loadTexture
(
'
textures/shadow.png
'
)
}
);
var
shadowGeo
=
new
THREE
.
Plane
(
300
,
300
,
1
,
1
);
mesh
=
new
THREE
.
Mesh
(
shadowGeo
,
shadowMaterial
);
mesh
.
position
.
y
=
-
250
;
mesh
.
rotation
.
x
=
-
90
*
Math
.
PI
/
180
;
scene
.
addObject
(
mesh
);
mesh
=
new
THREE
.
Mesh
(
shadowGeo
,
shadowMaterial
);
mesh
.
position
.
y
=
-
250
;
mesh
.
position
.
x
=
-
400
;
mesh
.
rotation
.
x
=
-
90
*
Math
.
PI
/
180
;
scene
.
addObject
(
mesh
);
mesh
=
new
THREE
.
Mesh
(
shadowGeo
,
shadowMaterial
);
mesh
.
position
.
y
=
-
250
;
mesh
.
position
.
x
=
400
;
mesh
.
rotation
.
x
=
-
90
*
Math
.
PI
/
180
;
scene
.
addObject
(
mesh
);
var
faceIndices
=
[
'
a
'
,
'
b
'
,
'
c
'
,
'
d
'
];
var
color
,
f
,
f2
,
f3
,
p
,
n
,
vertexIndex
,
geometry
=
new
THREE
.
Icosahedron
(
1
),
geometry2
=
new
THREE
.
Icosahedron
(
1
),
geometry3
=
new
THREE
.
Icosahedron
(
1
);
for
(
var
i
=
0
;
i
<
geometry
.
faces
.
length
;
i
++
)
{
f
=
geometry
.
faces
[
i
];
f2
=
geometry2
.
faces
[
i
];
f3
=
geometry3
.
faces
[
i
];
n
=
(
f
instanceof
THREE
.
Face3
)
?
3
:
4
;
for
(
var
j
=
0
;
j
<
n
;
j
++
)
{
vertexIndex
=
f
[
faceIndices
[
j
]
];
p
=
geometry
.
vertices
[
vertexIndex
].
position
;
color
=
new
THREE
.
Color
(
0xffffff
);
color
.
setHSV
(
(
p
.
y
+
1
)
/
2
,
1.0
,
1.0
);
f
.
vertexColors
[
j
]
=
color
;
color
=
new
THREE
.
Color
(
0xffffff
);
color
.
setHSV
(
0.0
,
(
p
.
y
+
1
)
/
2
,
1.0
);
f2
.
vertexColors
[
j
]
=
color
;
color
=
new
THREE
.
Color
(
0xffffff
);
color
.
setHSV
(
0.125
*
vertexIndex
/
geometry
.
vertices
.
length
,
1.0
,
1.0
);
f3
.
vertexColors
[
j
]
=
color
;
}
}
var
materials
=
[
new
THREE
.
MeshLambertMaterial
(
{
color
:
0xffffff
,
shading
:
THREE
.
FlatShading
,
vertexColors
:
THREE
.
VertexColors
}
),
new
THREE
.
MeshBasicMaterial
(
{
color
:
0x000000
,
shading
:
THREE
.
FlatShading
,
wireframe
:
true
}
)
];
mesh
=
new
THREE
.
Mesh
(
geometry
,
materials
);
mesh
.
position
.
x
=
-
400
;
mesh
.
scale
.
x
=
mesh
.
scale
.
y
=
mesh
.
scale
.
z
=
200
;
mesh
.
rotation
.
x
=
-
1.87
;
scene
.
addObject
(
mesh
);
mesh2
=
new
THREE
.
Mesh
(
geometry2
,
materials
);
mesh2
.
position
.
x
=
400
;
mesh2
.
rotation
.
x
=
0
;
mesh2
.
scale
=
mesh
.
scale
;
scene
.
addObject
(
mesh2
);
mesh3
=
new
THREE
.
Mesh
(
geometry3
,
materials
);
mesh3
.
position
.
x
=
0
;
mesh3
.
rotation
.
x
=
0
;
mesh3
.
scale
=
mesh
.
scale
;
scene
.
addObject
(
mesh3
);
renderer
=
new
THREE
.
WebGLRenderer
(
{
antialias
:
true
}
);
renderer
.
setSize
(
container
.
clientWidth
,
container
.
clientHeight
);
container
.
appendChild
(
renderer
.
domElement
);
stats
=
new
Stats
();
stats
.
domElement
.
style
.
position
=
'
absolute
'
;
stats
.
domElement
.
style
.
top
=
'
0px
'
;
container
.
appendChild
(
stats
.
domElement
);
document
.
addEventListener
(
'
mousemove
'
,
onDocumentMouseMove
,
false
);
}
function
onDocumentMouseMove
(
event
)
{
mouseX
=
(
event
.
clientX
-
windowHalfX
);
mouseY
=
(
event
.
clientY
-
windowHalfY
);
}
//
this
.
animate
=
function
()
{
render
();
stats
.
update
();
};
function
render
()
{
camera
.
position
.
x
+=
(
mouseX
-
camera
.
position
.
x
)
*
0.05
;
camera
.
position
.
y
+=
(
-
mouseY
-
camera
.
position
.
y
)
*
0.05
;
renderer
.
render
(
scene
,
camera
);
}
}
</script>
</body>
</html>
examples/webgl_multiple_canvases_grid.html
0 → 100755
浏览文件 @
e4b75f1c
<!DOCTYPE HTML>
<html
lang=
"en"
>
<head>
<title>
three.js webgl - multiple canvases - grid
</title>
<meta
charset=
"utf-8"
>
<style
type=
"text/css"
>
html
,
body
{
color
:
#808080
;
font-family
:
Monospace
;
font-size
:
13px
;
text-align
:
center
;
background-color
:
#fff
;
margin
:
0px
;
overflow
:
hidden
;
width
:
100%
;
height
:
100%
;
}
#info
{
position
:
absolute
;
top
:
0px
;
width
:
100%
;
padding
:
5px
;
}
#centerer
{
display
:
table
;
width
:
100%
;
height
:
100%
;
}
#centerer-cell
{
display
:
table-cell
;
vertical-align
:
middle
;
}
#container
{
margin-left
:
auto
;
margin-right
:
auto
;
width
:
604px
;
//
300*2
+
border;
}
#container
div
{
float
:
left
;
}
#container1
,
#container2
,
#container3
,
#container4
{
width
:
300px
;
height
:
200px
;
position
:
relative
;
border
:
1px
solid
red
;
float
:
left
;
}
a
{
color
:
#0080ff
;
}
</style>
</head>
<body>
<div
id=
"centerer"
>
<div
id=
"centerer-cell"
>
<div
id=
"container"
>
<div
class=
"container-row"
>
<div
id=
"container1"
></div>
<div
id=
"container2"
></div>
</div>
<div
class=
"container-row"
>
<div
id=
"container3"
></div>
<div
id=
"container4"
></div>
</div>
</div>
</div>
</div>
<div
id=
"info"
><a
href=
"http://github.com/mrdoob/three.js"
target=
"_blank"
>
three.js
</a>
- vertex colors - webgl
</div>
<script
type=
"text/javascript"
src=
"../build/Three.js"
></script>
<script
type=
"text/javascript"
src=
"js/Detector.js"
></script>
<script
type=
"text/javascript"
src=
"js/RequestAnimationFrame.js"
></script>
<script
type=
"text/javascript"
src=
"js/Stats.js"
></script>
<script
type=
"text/javascript"
>
if
(
!
Detector
.
webgl
)
Detector
.
addGetWebGLMessage
();
var
apps
=
[];
init
();
animate
();
function
init
()
{
var
w
=
300
;
var
h
=
200
;
var
fullWidth
=
w
*
2
;
var
fullHeight
=
h
*
2
;
apps
.
push
(
new
App
(
'
container1
'
,
fullWidth
,
fullHeight
,
w
*
0
,
h
*
0
,
w
,
h
)
);
apps
.
push
(
new
App
(
'
container2
'
,
fullWidth
,
fullHeight
,
w
*
1
,
h
*
0
,
w
,
h
)
);
apps
.
push
(
new
App
(
'
container3
'
,
fullWidth
,
fullHeight
,
w
*
0
,
h
*
1
,
w
,
h
)
);
apps
.
push
(
new
App
(
'
container4
'
,
fullWidth
,
fullHeight
,
w
*
1
,
h
*
1
,
w
,
h
)
);
}
function
animate
()
{
for
(
var
i
=
0
;
i
<
apps
.
length
;
++
i
)
{
apps
[
i
].
animate
();
}
requestAnimationFrame
(
animate
);
}
function
App
(
containerId
,
fullWidth
,
fullHeight
,
viewX
,
viewY
,
viewWidth
,
viewHeight
)
{
var
container
,
stats
;
var
camera
,
scene
,
renderer
;
var
mesh
,
mesh2
,
mesh3
,
light
;
var
mouseX
=
0
,
mouseY
=
0
;
var
windowHalfX
=
window
.
innerWidth
/
2
;
var
windowHalfY
=
window
.
innerHeight
/
2
;
init
();
function
init
()
{
container
=
document
.
getElementById
(
containerId
);
camera
=
new
THREE
.
Camera
(
20
,
container
.
clientWidth
/
container
.
clientHeight
,
1
,
10000
);
camera
.
setViewOffset
(
fullWidth
,
fullHeight
,
viewX
,
viewY
,
viewWidth
,
viewHeight
);
camera
.
position
.
z
=
1800
;
scene
=
new
THREE
.
Scene
();
light
=
new
THREE
.
DirectionalLight
(
0xffffff
);
light
.
position
.
set
(
0
,
0
,
1
);
light
.
position
.
normalize
();
scene
.
addLight
(
light
);
var
shadowMaterial
=
new
THREE
.
MeshBasicMaterial
(
{
map
:
THREE
.
ImageUtils
.
loadTexture
(
'
textures/shadow.png
'
)
}
);
var
shadowGeo
=
new
THREE
.
Plane
(
300
,
300
,
1
,
1
);
mesh
=
new
THREE
.
Mesh
(
shadowGeo
,
shadowMaterial
);
mesh
.
position
.
y
=
-
250
;
mesh
.
rotation
.
x
=
-
90
*
Math
.
PI
/
180
;
scene
.
addObject
(
mesh
);
mesh
=
new
THREE
.
Mesh
(
shadowGeo
,
shadowMaterial
);
mesh
.
position
.
y
=
-
250
;
mesh
.
position
.
x
=
-
400
;
mesh
.
rotation
.
x
=
-
90
*
Math
.
PI
/
180
;
scene
.
addObject
(
mesh
);
mesh
=
new
THREE
.
Mesh
(
shadowGeo
,
shadowMaterial
);
mesh
.
position
.
y
=
-
250
;
mesh
.
position
.
x
=
400
;
mesh
.
rotation
.
x
=
-
90
*
Math
.
PI
/
180
;
scene
.
addObject
(
mesh
);
var
faceIndices
=
[
'
a
'
,
'
b
'
,
'
c
'
,
'
d
'
];
var
color
,
f
,
f2
,
f3
,
p
,
n
,
vertexIndex
,
geometry
=
new
THREE
.
Icosahedron
(
1
),
geometry2
=
new
THREE
.
Icosahedron
(
1
),
geometry3
=
new
THREE
.
Icosahedron
(
1
);
for
(
var
i
=
0
;
i
<
geometry
.
faces
.
length
;
i
++
)
{
f
=
geometry
.
faces
[
i
];
f2
=
geometry2
.
faces
[
i
];
f3
=
geometry3
.
faces
[
i
];
n
=
(
f
instanceof
THREE
.
Face3
)
?
3
:
4
;
for
(
var
j
=
0
;
j
<
n
;
j
++
)
{
vertexIndex
=
f
[
faceIndices
[
j
]
];
p
=
geometry
.
vertices
[
vertexIndex
].
position
;
color
=
new
THREE
.
Color
(
0xffffff
);
color
.
setHSV
(
(
p
.
y
+
1
)
/
2
,
1.0
,
1.0
);
f
.
vertexColors
[
j
]
=
color
;
color
=
new
THREE
.
Color
(
0xffffff
);
color
.
setHSV
(
0.0
,
(
p
.
y
+
1
)
/
2
,
1.0
);
f2
.
vertexColors
[
j
]
=
color
;
color
=
new
THREE
.
Color
(
0xffffff
);
color
.
setHSV
(
0.125
*
vertexIndex
/
geometry
.
vertices
.
length
,
1.0
,
1.0
);
f3
.
vertexColors
[
j
]
=
color
;
}
}
var
materials
=
[
new
THREE
.
MeshLambertMaterial
(
{
color
:
0xffffff
,
shading
:
THREE
.
FlatShading
,
vertexColors
:
THREE
.
VertexColors
}
),
new
THREE
.
MeshBasicMaterial
(
{
color
:
0x000000
,
shading
:
THREE
.
FlatShading
,
wireframe
:
true
}
)
];
mesh
=
new
THREE
.
Mesh
(
geometry
,
materials
);
mesh
.
position
.
x
=
-
400
;
mesh
.
scale
.
x
=
mesh
.
scale
.
y
=
mesh
.
scale
.
z
=
200
;
mesh
.
rotation
.
x
=
-
1.87
;
scene
.
addObject
(
mesh
);
mesh2
=
new
THREE
.
Mesh
(
geometry2
,
materials
);
mesh2
.
position
.
x
=
400
;
mesh2
.
rotation
.
x
=
0
;
mesh2
.
scale
=
mesh
.
scale
;
scene
.
addObject
(
mesh2
);
mesh3
=
new
THREE
.
Mesh
(
geometry3
,
materials
);
mesh3
.
position
.
x
=
0
;
mesh3
.
rotation
.
x
=
0
;
mesh3
.
scale
=
mesh
.
scale
;
scene
.
addObject
(
mesh3
);
renderer
=
new
THREE
.
WebGLRenderer
(
{
antialias
:
true
}
);
renderer
.
setSize
(
container
.
clientWidth
,
container
.
clientHeight
);
container
.
appendChild
(
renderer
.
domElement
);
stats
=
new
Stats
();
stats
.
domElement
.
style
.
position
=
'
absolute
'
;
stats
.
domElement
.
style
.
top
=
'
0px
'
;
container
.
appendChild
(
stats
.
domElement
);
document
.
addEventListener
(
'
mousemove
'
,
onDocumentMouseMove
,
false
);
}
function
onDocumentMouseMove
(
event
)
{
mouseX
=
(
event
.
clientX
-
windowHalfX
);
mouseY
=
(
event
.
clientY
-
windowHalfY
);
}
//
this
.
animate
=
function
()
{
render
();
stats
.
update
();
};
function
render
()
{
camera
.
position
.
x
+=
(
mouseX
-
camera
.
position
.
x
)
*
0.05
;
camera
.
position
.
y
+=
(
-
mouseY
-
camera
.
position
.
y
)
*
0.05
;
renderer
.
render
(
scene
,
camera
);
}
}
</script>
</body>
</html>
src/cameras/Camera.js
浏览文件 @
e4b75f1c
/**
/**
* @author mr.doob / http://mrdoob.com/
* @author mr.doob / http://mrdoob.com/
* @author mikael emtinger / http://gomo.se/
* @author mikael emtinger / http://gomo.se/
* @author greggman / http://games.greggman.com/
*/
*/
THREE
.
Camera
=
function
(
fov
,
aspect
,
near
,
far
,
target
)
{
THREE
.
Camera
=
function
(
fov
,
aspect
,
near
,
far
,
target
)
{
...
@@ -41,7 +42,78 @@ THREE.Camera.prototype.translate = function ( distance, axis ) {
...
@@ -41,7 +42,78 @@ THREE.Camera.prototype.translate = function ( distance, axis ) {
THREE
.
Camera
.
prototype
.
updateProjectionMatrix
=
function
()
{
THREE
.
Camera
.
prototype
.
updateProjectionMatrix
=
function
()
{
this
.
projectionMatrix
=
THREE
.
Matrix4
.
makePerspective
(
this
.
fov
,
this
.
aspect
,
this
.
near
,
this
.
far
);
if
(
this
.
fullWidth
)
{
var
aspect
=
this
.
fullWidth
/
this
.
fullHeight
;
var
top
=
Math
.
tan
(
this
.
fov
*
Math
.
PI
/
360
)
*
this
.
near
;
var
bottom
=
-
top
;
var
left
=
aspect
*
bottom
;
var
right
=
aspect
*
top
;
var
width
=
Math
.
abs
(
right
-
left
);
var
height
=
Math
.
abs
(
top
-
bottom
);
this
.
projectionMatrix
=
THREE
.
Matrix4
.
makeFrustum
(
left
+
this
.
x
*
width
/
this
.
fullWidth
,
left
+
(
this
.
x
+
this
.
width
)
*
width
/
this
.
fullWidth
,
top
-
(
this
.
y
+
this
.
height
)
*
height
/
this
.
fullHeight
,
top
-
this
.
y
*
height
/
this
.
fullHeight
,
this
.
near
,
this
.
far
);
}
else
{
this
.
projectionMatrix
=
THREE
.
Matrix4
.
makePerspective
(
this
.
fov
,
this
.
aspect
,
this
.
near
,
this
.
far
);
}
};
/**
* Sets an offset in a larger frustum. This is useful for multi-window or
* multi-monitor/multi-machine setups.
*
* For example, if you have 3x2 monitors and each monitor is 1920x1080 and
* the monitors are in grid like this
*
* +---+---+---+
* | A | B | C |
* +---+---+---+
* | D | E | F |
* +---+---+---+
*
* then for monitor each monitor you would call it like this
*
* var w = 1920;
* var h = 1080;
* var fullWidth = w * 3;
* var fullHeight = h * 2;
*
* --A--
* camera.setOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );
* --B--
* camera.setOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );
* --C--
* camera.setOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );
* --D--
* camera.setOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );
* --E--
* camera.setOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );
* --F--
* camera.setOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );
*
* Note there is no reason monitors have to be the same size or in a grid.
*/
THREE
.
Camera
.
prototype
.
setViewOffset
=
function
(
fullWidth
,
fullHeight
,
x
,
y
,
width
,
height
)
{
this
.
fullWidth
=
fullWidth
;
this
.
fullHeight
=
fullHeight
;
this
.
x
=
x
;
this
.
y
=
y
;
this
.
width
=
width
;
this
.
height
=
height
;
this
.
updateProjectionMatrix
();
};
};
...
...
utils/build_all.bat
浏览文件 @
e4b75f1c
python
build
.py
--all
python
build
.py
--all
--includes
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录