Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
1413f969
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,发现更多精彩内容 >>
提交
1413f969
编写于
3月 14, 2011
作者:
M
Mr.doob
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fixed `Camera.updateMatrix()`.
上级
67341e77
变更
12
展开全部
隐藏空白更改
内联
并排
Showing
12 changed file
with
100 addition
and
94 deletion
+100
-94
REVISION
REVISION
+1
-0
build/Three.js
build/Three.js
+35
-35
build/custom/ThreeCanvas.js
build/custom/ThreeCanvas.js
+3
-3
build/custom/ThreeDOM.js
build/custom/ThreeDOM.js
+3
-3
build/custom/ThreeExtras.js
build/custom/ThreeExtras.js
+2
-2
build/custom/ThreeSVG.js
build/custom/ThreeSVG.js
+3
-3
build/custom/ThreeWebGL.js
build/custom/ThreeWebGL.js
+33
-33
src/cameras/Camera.js
src/cameras/Camera.js
+7
-1
src/cameras/QuakeCamera.js
src/cameras/QuakeCamera.js
+10
-10
src/renderers/WebGLRenderer.js
src/renderers/WebGLRenderer.js
+2
-2
utils/REVISION
utils/REVISION
+0
-1
utils/build.py
utils/build.py
+1
-1
未找到文件。
REVISION
0 → 100644
浏览文件 @
1413f969
36
build/Three.js
浏览文件 @
1413f969
此差异已折叠。
点击以展开。
build/custom/ThreeCanvas.js
浏览文件 @
1413f969
// ThreeCanvas.js r3
5
- http://github.com/mrdoob/three.js
// ThreeCanvas.js r3
6
- http://github.com/mrdoob/three.js
var
THREE
=
THREE
||
{};
THREE
.
Color
=
function
(
a
){
this
.
setHex
(
a
)};
THREE
.
Color
.
prototype
=
{
autoUpdate
:
!
0
,
setRGB
:
function
(
a
,
b
,
c
){
this
.
r
=
a
;
this
.
g
=
b
;
this
.
b
=
c
;
if
(
this
.
autoUpdate
){
this
.
updateHex
();
this
.
updateStyleString
()}},
setHSV
:
function
(
a
,
b
,
c
){
var
d
,
e
,
f
,
g
,
j
,
h
;
if
(
c
==
0
)
d
=
e
=
f
=
0
;
else
{
g
=
Math
.
floor
(
a
*
6
);
j
=
a
*
6
-
g
;
a
=
c
*
(
1
-
b
);
h
=
c
*
(
1
-
b
*
j
);
b
=
c
*
(
1
-
b
*
(
1
-
j
));
switch
(
g
){
case
1
:
d
=
h
;
e
=
c
;
f
=
a
;
break
;
case
2
:
d
=
a
;
e
=
c
;
f
=
b
;
break
;
case
3
:
d
=
a
;
e
=
h
;
f
=
c
;
break
;
case
4
:
d
=
b
;
e
=
a
;
f
=
c
;
break
;
case
5
:
d
=
c
;
e
=
a
;
f
=
h
;
break
;
case
6
:
case
0
:
d
=
c
;
e
=
b
;
f
=
a
}}
this
.
r
=
d
;
this
.
g
=
e
;
this
.
b
=
f
;
if
(
this
.
autoUpdate
){
this
.
updateHex
();
this
.
updateStyleString
()}},
setHex
:
function
(
a
){
this
.
hex
=~~
a
&
16777215
;
if
(
this
.
autoUpdate
){
this
.
updateRGB
();
this
.
updateStyleString
()}},
updateHex
:
function
(){
this
.
hex
=~~
(
this
.
r
*
255
)
<<
16
^~~
(
this
.
g
*
255
)
<<
8
^~~
(
this
.
b
*
255
)},
updateRGB
:
function
(){
this
.
r
=
(
this
.
hex
>>
16
&
255
)
/
255
;
this
.
g
=
(
this
.
hex
>>
8
&
255
)
/
255
;
this
.
b
=
(
this
.
hex
&
255
)
/
255
},
updateStyleString
:
function
(){
this
.
__styleString
=
"
rgb(
"
+~~
(
this
.
r
*
255
)
+
"
,
"
+~~
(
this
.
g
*
255
)
+
"
,
"
+~~
(
this
.
b
*
255
)
+
"
)
"
},
clone
:
function
(){
return
new
THREE
.
Color
(
this
.
hex
)}};
...
...
@@ -48,7 +48,7 @@ b,c)}}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==undefined
THREE
.
Quaternion
.
prototype
=
{
set
:
function
(
a
,
b
,
c
,
d
){
this
.
x
=
a
;
this
.
y
=
b
;
this
.
z
=
c
;
this
.
w
=
d
;
return
this
},
setFromEuler
:
function
(
a
){
var
b
=
0.5
*
Math
.
PI
/
360
,
c
=
a
.
x
*
b
,
d
=
a
.
y
*
b
,
e
=
a
.
z
*
b
;
a
=
Math
.
cos
(
d
);
d
=
Math
.
sin
(
d
);
b
=
Math
.
cos
(
-
e
);
e
=
Math
.
sin
(
-
e
);
var
f
=
Math
.
cos
(
c
);
c
=
Math
.
sin
(
c
);
var
g
=
a
*
b
,
j
=
d
*
e
;
this
.
w
=
g
*
f
-
j
*
c
;
this
.
x
=
g
*
c
+
j
*
f
;
this
.
y
=
d
*
b
*
f
+
a
*
e
*
c
;
this
.
z
=
a
*
e
*
f
-
d
*
b
*
c
;
return
this
},
calculateW
:
function
(){
this
.
w
=-
Math
.
sqrt
(
Math
.
abs
(
1
-
this
.
x
*
this
.
x
-
this
.
y
*
this
.
y
-
this
.
z
*
this
.
z
));
return
this
},
inverse
:
function
(){
this
.
x
*=-
1
;
this
.
y
*=
-
1
;
this
.
z
*=-
1
;
return
this
},
length
:
function
(){
return
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
+
this
.
z
*
this
.
z
+
this
.
w
*
this
.
w
)},
normalize
:
function
(){
var
a
=
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
+
this
.
z
*
this
.
z
+
this
.
w
*
this
.
w
);
if
(
a
==
0
)
this
.
w
=
this
.
z
=
this
.
y
=
this
.
x
=
0
;
else
{
a
=
1
/
a
;
this
.
x
*=
a
;
this
.
y
*=
a
;
this
.
z
*=
a
;
this
.
w
*=
a
}
return
this
},
multiplySelf
:
function
(
a
){
var
b
=
this
.
x
,
c
=
this
.
y
,
d
=
this
.
z
,
e
=
this
.
w
,
f
=
a
.
x
,
g
=
a
.
y
,
j
=
a
.
z
;
a
=
a
.
w
;
this
.
x
=
b
*
a
+
e
*
f
+
c
*
j
-
d
*
g
;
this
.
y
=
c
*
a
+
e
*
g
+
d
*
f
-
b
*
j
;
this
.
z
=
d
*
a
+
e
*
j
+
b
*
g
-
c
*
f
;
this
.
w
=
e
*
a
-
b
*
f
-
c
*
g
-
d
*
j
;
return
this
},
multiplyVector3
:
function
(
a
,
b
){
b
||
(
b
=
a
);
var
c
=
a
.
x
,
d
=
a
.
y
,
e
=
a
.
z
,
f
=
this
.
x
,
g
=
this
.
y
,
j
=
this
.
z
,
h
=
this
.
w
,
i
=
h
*
c
+
g
*
e
-
j
*
d
,
p
=
h
*
d
+
j
*
c
-
f
*
e
,
n
=
h
*
e
+
f
*
d
-
g
*
c
;
c
=-
f
*
c
-
g
*
d
-
j
*
e
;
b
.
x
=
i
*
h
+
c
*-
f
+
p
*-
j
-
n
*-
g
;
b
.
y
=
p
*
h
+
c
*-
g
+
n
*-
f
-
i
*-
j
;
b
.
z
=
n
*
h
+
c
*-
j
+
i
*-
g
-
p
*-
f
;
return
b
}};
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
;
if
(
Math
.
abs
(
e
)
>=
1
){
c
.
w
=
a
.
w
;
c
.
x
=
a
.
x
;
c
.
y
=
a
.
y
;
c
.
z
=
a
.
z
;
return
c
}
var
f
=
Math
.
acos
(
e
),
g
=
Math
.
sqrt
(
1
-
e
*
e
);
if
(
Math
.
abs
(
g
)
<
0.001
0
){
c
.
w
=
0.5
*
(
a
.
w
+
b
.
w
);
c
.
x
=
0.5
*
(
a
.
x
+
b
.
x
);
c
.
y
=
0.5
*
(
a
.
y
+
b
.
y
);
c
.
z
=
0.5
*
(
a
.
z
+
b
.
z
);
return
c
}
e
=
Math
.
sin
((
1
-
d
)
*
f
)
/
g
;
d
=
Math
.
sin
(
d
*
f
)
/
g
;
c
.
w
=
a
.
w
*
e
+
b
.
w
*
d
;
c
.
x
=
a
.
x
*
e
+
b
.
x
*
d
;
c
.
y
=
a
.
y
*
e
+
b
.
y
*
d
;
c
.
z
=
a
.
z
*
e
+
b
.
z
*
d
;
return
c
};
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
;
if
(
Math
.
abs
(
e
)
>=
1
){
c
.
w
=
a
.
w
;
c
.
x
=
a
.
x
;
c
.
y
=
a
.
y
;
c
.
z
=
a
.
z
;
return
c
}
var
f
=
Math
.
acos
(
e
),
g
=
Math
.
sqrt
(
1
-
e
*
e
);
if
(
Math
.
abs
(
g
)
<
0.001
){
c
.
w
=
0.5
*
(
a
.
w
+
b
.
w
);
c
.
x
=
0.5
*
(
a
.
x
+
b
.
x
);
c
.
y
=
0.5
*
(
a
.
y
+
b
.
y
);
c
.
z
=
0.5
*
(
a
.
z
+
b
.
z
);
return
c
}
e
=
Math
.
sin
((
1
-
d
)
*
f
)
/
g
;
d
=
Math
.
sin
(
d
*
f
)
/
g
;
c
.
w
=
a
.
w
*
e
+
b
.
w
*
d
;
c
.
x
=
a
.
x
*
e
+
b
.
x
*
d
;
c
.
y
=
a
.
y
*
e
+
b
.
y
*
d
;
c
.
z
=
a
.
z
*
e
+
b
.
z
*
d
;
return
c
};
THREE
.
Vertex
=
function
(
a
,
b
){
this
.
position
=
a
||
new
THREE
.
Vector3
;
this
.
positionWorld
=
new
THREE
.
Vector3
;
this
.
positionScreen
=
new
THREE
.
Vector4
;
this
.
normal
=
b
||
new
THREE
.
Vector3
;
this
.
normalWorld
=
new
THREE
.
Vector3
;
this
.
normalScreen
=
new
THREE
.
Vector3
;
this
.
tangent
=
new
THREE
.
Vector4
;
this
.
__visible
=!
0
};
THREE
.
Face3
=
function
(
a
,
b
,
c
,
d
,
e
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
centroid
=
new
THREE
.
Vector3
;
this
.
normal
=
d
instanceof
THREE
.
Vector3
?
d
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
d
instanceof
Array
?
d
:[];
this
.
materials
=
e
instanceof
Array
?
e
:[
e
]};
THREE
.
Face4
=
function
(
a
,
b
,
c
,
d
,
e
,
f
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
d
=
d
;
this
.
centroid
=
new
THREE
.
Vector3
;
this
.
normal
=
e
instanceof
THREE
.
Vector3
?
e
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
e
instanceof
Array
?
e
:[];
this
.
materials
=
f
instanceof
Array
?
f
:[
f
]};
THREE
.
UV
=
function
(
a
,
b
){
this
.
set
(
a
||
0
,
b
||
0
)};
THREE
.
UV
.
prototype
=
{
set
:
function
(
a
,
b
){
this
.
u
=
a
;
this
.
v
=
b
;
return
this
},
copy
:
function
(
a
){
this
.
set
(
a
.
u
,
a
.
v
);
return
this
}};
THREE
.
Geometry
=
function
(){
this
.
id
=
"
Geometry
"
+
THREE
.
GeometryIdCounter
++
;
this
.
vertices
=
[];
this
.
faces
=
[];
this
.
uvs
=
[];
this
.
uvs2
=
[];
this
.
colors
=
[];
this
.
skinWeights
=
[];
this
.
skinIndices
=
[];
this
.
boundingSphere
=
this
.
boundingBox
=
null
;
this
.
hasTangents
=!
1
};
...
...
@@ -63,7 +63,7 @@ this.vertices[d.d].normal.copy(d.vertexNormals[3])}}b=0;for(c=this.vertices.leng
z
:[
this
.
vertices
[
0
].
position
.
z
,
this
.
vertices
[
0
].
position
.
z
]};
for
(
var
b
=
1
,
c
=
this
.
vertices
.
length
;
b
<
c
;
b
++
){
a
=
this
.
vertices
[
b
];
if
(
a
.
position
.
x
<
this
.
boundingBox
.
x
[
0
])
this
.
boundingBox
.
x
[
0
]
=
a
.
position
.
x
;
else
if
(
a
.
position
.
x
>
this
.
boundingBox
.
x
[
1
])
this
.
boundingBox
.
x
[
1
]
=
a
.
position
.
x
;
if
(
a
.
position
.
y
<
this
.
boundingBox
.
y
[
0
])
this
.
boundingBox
.
y
[
0
]
=
a
.
position
.
y
;
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
=
this
.
boundingSphere
===
null
?
0
:
this
.
boundingSphere
.
radius
,
b
=
0
,
c
=
this
.
vertices
.
length
;
b
<
c
;
b
++
)
a
=
Math
.
max
(
a
,
this
.
vertices
[
b
].
position
.
length
());
this
.
boundingSphere
=
{
radius
:
a
}}};
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
);
this
.
position
.
addSelf
(
b
.
multiplyScalar
(
a
));
this
.
target
.
position
.
addSelf
(
b
.
multiplyScalar
(
a
))};
THREE
.
Camera
.
prototype
.
updateProjectionMatrix
=
function
(){
this
.
projectionMatrix
=
THREE
.
Matrix4
.
makePerspective
(
this
.
fov
,
this
.
aspect
,
this
.
near
,
this
.
far
)};
THREE
.
Camera
.
prototype
.
translate
=
function
(
a
,
b
){
this
.
matrix
.
rotateAxis
(
b
);
this
.
position
.
addSelf
(
b
.
multiplyScalar
(
a
));
this
.
target
.
position
.
addSelf
(
b
.
multiplyScalar
(
a
))};
THREE
.
Camera
.
prototype
.
updateProjectionMatrix
=
function
(){
this
.
projectionMatrix
=
THREE
.
Matrix4
.
makePerspective
(
this
.
fov
,
this
.
aspect
,
this
.
near
,
this
.
far
)};
THREE
.
Camera
.
prototype
.
updateMatrix
=
function
(){
this
.
update
(
undefined
,
!
0
)};
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
{
this
.
matrixAutoUpdate
&&
(
b
|=
this
.
updateMatrix
());
if
(
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
;
THREE
.
AmbientLight
.
prototype
.
constructor
=
THREE
.
AmbientLight
;
THREE
.
DirectionalLight
=
function
(
a
,
b
){
THREE
.
Light
.
call
(
this
,
a
);
this
.
position
=
new
THREE
.
Vector3
(
0
,
1
,
0
);
this
.
intensity
=
b
||
1
};
THREE
.
DirectionalLight
.
prototype
=
new
THREE
.
Light
;
THREE
.
DirectionalLight
.
prototype
.
constructor
=
THREE
.
DirectionalLight
;
THREE
.
PointLight
=
function
(
a
,
b
){
THREE
.
Light
.
call
(
this
,
a
);
this
.
position
=
new
THREE
.
Vector3
;
this
.
intensity
=
b
||
1
};
THREE
.
PointLight
.
prototype
=
new
THREE
.
Light
;
THREE
.
PointLight
.
prototype
.
constructor
=
THREE
.
PointLight
;
...
...
build/custom/ThreeDOM.js
浏览文件 @
1413f969
// ThreeDOM.js r3
5
- http://github.com/mrdoob/three.js
// ThreeDOM.js r3
6
- http://github.com/mrdoob/three.js
var
THREE
=
THREE
||
{};
THREE
.
Color
=
function
(
a
){
this
.
setHex
(
a
)};
THREE
.
Color
.
prototype
=
{
autoUpdate
:
!
0
,
setRGB
:
function
(
a
,
b
,
c
){
this
.
r
=
a
;
this
.
g
=
b
;
this
.
b
=
c
;
if
(
this
.
autoUpdate
){
this
.
updateHex
();
this
.
updateStyleString
()}},
setHSV
:
function
(
a
,
b
,
c
){
var
d
,
e
,
f
,
g
,
i
,
h
;
if
(
c
==
0
)
d
=
e
=
f
=
0
;
else
{
g
=
Math
.
floor
(
a
*
6
);
i
=
a
*
6
-
g
;
a
=
c
*
(
1
-
b
);
h
=
c
*
(
1
-
b
*
i
);
b
=
c
*
(
1
-
b
*
(
1
-
i
));
switch
(
g
){
case
1
:
d
=
h
;
e
=
c
;
f
=
a
;
break
;
case
2
:
d
=
a
;
e
=
c
;
f
=
b
;
break
;
case
3
:
d
=
a
;
e
=
h
;
f
=
c
;
break
;
case
4
:
d
=
b
;
e
=
a
;
f
=
c
;
break
;
case
5
:
d
=
c
;
e
=
a
;
f
=
h
;
break
;
case
6
:
case
0
:
d
=
c
;
e
=
b
;
f
=
a
}}
this
.
r
=
d
;
this
.
g
=
e
;
this
.
b
=
f
;
if
(
this
.
autoUpdate
){
this
.
updateHex
();
this
.
updateStyleString
()}},
setHex
:
function
(
a
){
this
.
hex
=~~
a
&
16777215
;
if
(
this
.
autoUpdate
){
this
.
updateRGB
();
this
.
updateStyleString
()}},
updateHex
:
function
(){
this
.
hex
=~~
(
this
.
r
*
255
)
<<
16
^~~
(
this
.
g
*
255
)
<<
8
^~~
(
this
.
b
*
255
)},
updateRGB
:
function
(){
this
.
r
=
(
this
.
hex
>>
16
&
255
)
/
255
;
this
.
g
=
(
this
.
hex
>>
8
&
255
)
/
255
;
this
.
b
=
(
this
.
hex
&
255
)
/
255
},
updateStyleString
:
function
(){
this
.
__styleString
=
"
rgb(
"
+~~
(
this
.
r
*
255
)
+
"
,
"
+~~
(
this
.
g
*
255
)
+
"
,
"
+~~
(
this
.
b
*
255
)
+
"
)
"
},
clone
:
function
(){
return
new
THREE
.
Color
(
this
.
hex
)}};
...
...
@@ -48,11 +48,11 @@ b,c)}}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==undefined
THREE
.
Quaternion
.
prototype
=
{
set
:
function
(
a
,
b
,
c
,
d
){
this
.
x
=
a
;
this
.
y
=
b
;
this
.
z
=
c
;
this
.
w
=
d
;
return
this
},
setFromEuler
:
function
(
a
){
var
b
=
0.5
*
Math
.
PI
/
360
,
c
=
a
.
x
*
b
,
d
=
a
.
y
*
b
,
e
=
a
.
z
*
b
;
a
=
Math
.
cos
(
d
);
d
=
Math
.
sin
(
d
);
b
=
Math
.
cos
(
-
e
);
e
=
Math
.
sin
(
-
e
);
var
f
=
Math
.
cos
(
c
);
c
=
Math
.
sin
(
c
);
var
g
=
a
*
b
,
i
=
d
*
e
;
this
.
w
=
g
*
f
-
i
*
c
;
this
.
x
=
g
*
c
+
i
*
f
;
this
.
y
=
d
*
b
*
f
+
a
*
e
*
c
;
this
.
z
=
a
*
e
*
f
-
d
*
b
*
c
;
return
this
},
calculateW
:
function
(){
this
.
w
=-
Math
.
sqrt
(
Math
.
abs
(
1
-
this
.
x
*
this
.
x
-
this
.
y
*
this
.
y
-
this
.
z
*
this
.
z
));
return
this
},
inverse
:
function
(){
this
.
x
*=-
1
;
this
.
y
*=
-
1
;
this
.
z
*=-
1
;
return
this
},
length
:
function
(){
return
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
+
this
.
z
*
this
.
z
+
this
.
w
*
this
.
w
)},
normalize
:
function
(){
var
a
=
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
+
this
.
z
*
this
.
z
+
this
.
w
*
this
.
w
);
if
(
a
==
0
)
this
.
w
=
this
.
z
=
this
.
y
=
this
.
x
=
0
;
else
{
a
=
1
/
a
;
this
.
x
*=
a
;
this
.
y
*=
a
;
this
.
z
*=
a
;
this
.
w
*=
a
}
return
this
},
multiplySelf
:
function
(
a
){
var
b
=
this
.
x
,
c
=
this
.
y
,
d
=
this
.
z
,
e
=
this
.
w
,
f
=
a
.
x
,
g
=
a
.
y
,
i
=
a
.
z
;
a
=
a
.
w
;
this
.
x
=
b
*
a
+
e
*
f
+
c
*
i
-
d
*
g
;
this
.
y
=
c
*
a
+
e
*
g
+
d
*
f
-
b
*
i
;
this
.
z
=
d
*
a
+
e
*
i
+
b
*
g
-
c
*
f
;
this
.
w
=
e
*
a
-
b
*
f
-
c
*
g
-
d
*
i
;
return
this
},
multiplyVector3
:
function
(
a
,
b
){
b
||
(
b
=
a
);
var
c
=
a
.
x
,
d
=
a
.
y
,
e
=
a
.
z
,
f
=
this
.
x
,
g
=
this
.
y
,
i
=
this
.
z
,
h
=
this
.
w
,
j
=
h
*
c
+
g
*
e
-
i
*
d
,
n
=
h
*
d
+
i
*
c
-
f
*
e
,
m
=
h
*
e
+
f
*
d
-
g
*
c
;
c
=-
f
*
c
-
g
*
d
-
i
*
e
;
b
.
x
=
j
*
h
+
c
*-
f
+
n
*-
i
-
m
*-
g
;
b
.
y
=
n
*
h
+
c
*-
g
+
m
*-
f
-
j
*-
i
;
b
.
z
=
m
*
h
+
c
*-
i
+
j
*-
g
-
n
*-
f
;
return
b
}};
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
;
if
(
Math
.
abs
(
e
)
>=
1
){
c
.
w
=
a
.
w
;
c
.
x
=
a
.
x
;
c
.
y
=
a
.
y
;
c
.
z
=
a
.
z
;
return
c
}
var
f
=
Math
.
acos
(
e
),
g
=
Math
.
sqrt
(
1
-
e
*
e
);
if
(
Math
.
abs
(
g
)
<
0.001
0
){
c
.
w
=
0.5
*
(
a
.
w
+
b
.
w
);
c
.
x
=
0.5
*
(
a
.
x
+
b
.
x
);
c
.
y
=
0.5
*
(
a
.
y
+
b
.
y
);
c
.
z
=
0.5
*
(
a
.
z
+
b
.
z
);
return
c
}
e
=
Math
.
sin
((
1
-
d
)
*
f
)
/
g
;
d
=
Math
.
sin
(
d
*
f
)
/
g
;
c
.
w
=
a
.
w
*
e
+
b
.
w
*
d
;
c
.
x
=
a
.
x
*
e
+
b
.
x
*
d
;
c
.
y
=
a
.
y
*
e
+
b
.
y
*
d
;
c
.
z
=
a
.
z
*
e
+
b
.
z
*
d
;
return
c
};
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
;
if
(
Math
.
abs
(
e
)
>=
1
){
c
.
w
=
a
.
w
;
c
.
x
=
a
.
x
;
c
.
y
=
a
.
y
;
c
.
z
=
a
.
z
;
return
c
}
var
f
=
Math
.
acos
(
e
),
g
=
Math
.
sqrt
(
1
-
e
*
e
);
if
(
Math
.
abs
(
g
)
<
0.001
){
c
.
w
=
0.5
*
(
a
.
w
+
b
.
w
);
c
.
x
=
0.5
*
(
a
.
x
+
b
.
x
);
c
.
y
=
0.5
*
(
a
.
y
+
b
.
y
);
c
.
z
=
0.5
*
(
a
.
z
+
b
.
z
);
return
c
}
e
=
Math
.
sin
((
1
-
d
)
*
f
)
/
g
;
d
=
Math
.
sin
(
d
*
f
)
/
g
;
c
.
w
=
a
.
w
*
e
+
b
.
w
*
d
;
c
.
x
=
a
.
x
*
e
+
b
.
x
*
d
;
c
.
y
=
a
.
y
*
e
+
b
.
y
*
d
;
c
.
z
=
a
.
z
*
e
+
b
.
z
*
d
;
return
c
};
THREE
.
Vertex
=
function
(
a
,
b
){
this
.
position
=
a
||
new
THREE
.
Vector3
;
this
.
positionWorld
=
new
THREE
.
Vector3
;
this
.
positionScreen
=
new
THREE
.
Vector4
;
this
.
normal
=
b
||
new
THREE
.
Vector3
;
this
.
normalWorld
=
new
THREE
.
Vector3
;
this
.
normalScreen
=
new
THREE
.
Vector3
;
this
.
tangent
=
new
THREE
.
Vector4
;
this
.
__visible
=!
0
};
THREE
.
Face3
=
function
(
a
,
b
,
c
,
d
,
e
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
centroid
=
new
THREE
.
Vector3
;
this
.
normal
=
d
instanceof
THREE
.
Vector3
?
d
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
d
instanceof
Array
?
d
:[];
this
.
materials
=
e
instanceof
Array
?
e
:[
e
]};
THREE
.
Face4
=
function
(
a
,
b
,
c
,
d
,
e
,
f
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
d
=
d
;
this
.
centroid
=
new
THREE
.
Vector3
;
this
.
normal
=
e
instanceof
THREE
.
Vector3
?
e
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
e
instanceof
Array
?
e
:[];
this
.
materials
=
f
instanceof
Array
?
f
:[
f
]};
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
.
Camera
.
prototype
.
supr
=
THREE
.
Object3D
.
prototype
;
THREE
.
Camera
.
prototype
.
translate
=
function
(
a
,
b
){
this
.
matrix
.
rotateAxis
(
b
);
this
.
position
.
addSelf
(
b
.
multiplyScalar
(
a
));
this
.
target
.
position
.
addSelf
(
b
.
multiplyScalar
(
a
))};
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
(
a
,
b
){
this
.
matrix
.
rotateAxis
(
b
);
this
.
position
.
addSelf
(
b
.
multiplyScalar
(
a
));
this
.
target
.
position
.
addSelf
(
b
.
multiplyScalar
(
a
))};
THREE
.
Camera
.
prototype
.
updateProjectionMatrix
=
function
(){
this
.
projectionMatrix
=
THREE
.
Matrix4
.
makePerspective
(
this
.
fov
,
this
.
aspect
,
this
.
near
,
this
.
far
)};
THREE
.
Camera
.
prototype
.
updateMatrix
=
function
(){
this
.
update
(
undefined
,
!
0
)};
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
{
this
.
matrixAutoUpdate
&&
(
b
|=
this
.
updateMatrix
());
if
(
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
){
this
.
id
=
THREE
.
MaterialCounter
.
value
++
;
this
.
domElement
=
a
};
THREE
.
Particle
=
function
(
a
){
THREE
.
Object3D
.
call
(
this
);
this
.
materials
=
a
instanceof
Array
?
a
:[
a
];
this
.
matrixAutoUpdate
=!
1
};
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
;
...
...
build/custom/ThreeExtras.js
浏览文件 @
1413f969
// ThreeExtras.js r3
5
- http://github.com/mrdoob/three.js
// ThreeExtras.js r3
6
- http://github.com/mrdoob/three.js
var
GeometryUtils
=
{
merge
:
function
(
a
,
d
){
var
b
=
d
instanceof
THREE
.
Mesh
,
f
=
a
.
vertices
.
length
,
h
=
b
?
d
.
geometry
:
d
,
c
=
a
.
vertices
,
e
=
h
.
vertices
,
g
=
a
.
faces
,
j
=
h
.
faces
,
m
=
a
.
uvs
;
h
=
h
.
uvs
;
b
&&
d
.
matrixAutoUpdate
&&
d
.
updateMatrix
();
for
(
var
k
=
0
,
v
=
e
.
length
;
k
<
v
;
k
++
){
var
q
=
new
THREE
.
Vertex
(
e
[
k
].
position
.
clone
());
b
&&
d
.
matrix
.
multiplyVector3
(
q
.
position
);
c
.
push
(
q
)}
k
=
0
;
for
(
v
=
j
.
length
;
k
<
v
;
k
++
){
e
=
j
[
k
];
var
n
,
p
=
e
.
vertexNormals
;
if
(
e
instanceof
THREE
.
Face3
)
n
=
new
THREE
.
Face3
(
e
.
a
+
f
,
e
.
b
+
f
,
e
.
c
+
f
);
else
e
instanceof
THREE
.
Face4
&&
(
n
=
new
THREE
.
Face4
(
e
.
a
+
f
,
e
.
b
+
f
,
e
.
c
+
f
,
e
.
d
+
f
));
n
.
centroid
.
copy
(
e
.
centroid
);
n
.
normal
.
copy
(
e
.
normal
);
b
=
0
;
for
(
c
=
p
.
length
;
b
<
c
;
b
++
){
q
=
p
[
b
];
n
.
vertexNormals
.
push
(
q
.
clone
())}
n
.
materials
=
e
.
materials
.
slice
();
g
.
push
(
n
)}
k
=
0
;
for
(
v
=
h
.
length
;
k
<
v
;
k
++
){
f
=
h
[
k
];
g
=
[];
b
=
0
;
for
(
c
=
f
.
length
;
b
<
c
;
b
++
)
g
.
push
(
new
THREE
.
UV
(
f
[
b
].
u
,
f
[
b
].
v
));
m
.
push
(
g
)}}},
ImageUtils
=
{
loadTexture
:
function
(
a
,
d
,
b
){
var
f
=
new
Image
,
h
=
new
THREE
.
Texture
(
f
,
d
);
f
.
onload
=
function
(){
h
.
needsUpdate
=!
0
;
b
&&
b
(
this
)};
f
.
src
=
a
;
return
h
},
loadTextureCube
:
function
(
a
,
d
,
b
){
var
f
,
h
=
[],
c
=
new
THREE
.
Texture
(
h
,
d
);
d
=
h
.
loadCount
=
0
;
for
(
f
=
a
.
length
;
d
<
f
;
++
d
){
h
[
d
]
=
new
Image
;
h
[
d
].
onload
=
function
(){
h
.
loadCount
+=
1
;
if
(
h
.
loadCount
==
6
)
c
.
needsUpdate
=!
0
;
b
&&
b
(
this
)};
h
[
d
].
src
=
a
[
d
]}
return
c
}},
SceneUtils
=
{
loadScene
:
function
(
a
,
d
,
b
,
f
){
a
=
new
Worker
(
a
);
a
.
postMessage
(
0
);
a
.
onmessage
=
function
(
h
){
function
c
(){
for
(
k
in
C
.
objects
)
if
(
!
G
.
objects
[
k
]){
u
=
C
.
objects
[
k
];
if
(
l
=
G
.
geometries
[
u
.
geometry
]){
I
=
[];
for
(
i
=
0
;
i
<
u
.
materials
.
length
;
i
++
)
I
[
i
]
=
G
.
materials
[
u
.
materials
[
i
]];
z
=
u
.
position
;
r
=
u
.
rotation
;
s
=
u
.
scale
;
object
=
new
THREE
.
Mesh
(
l
,
I
);
object
.
position
.
set
(
z
[
0
],
...
...
@@ -38,7 +38,7 @@ var Torus=function(a,d,b,f){this.radius=a||100;this.tube=d||40;this.segmentsR=b|
var
Icosahedron
=
function
(
a
){
function
d
(
v
,
q
,
n
){
var
p
=
Math
.
sqrt
(
v
*
v
+
q
*
q
+
n
*
n
);
return
h
.
vertices
.
push
(
new
THREE
.
Vertex
(
new
THREE
.
Vector3
(
v
/
p
,
q
/
p
,
n
/
p
)))
-
1
}
function
b
(
v
,
q
,
n
,
p
){
p
.
faces
.
push
(
new
THREE
.
Face3
(
v
,
q
,
n
))}
function
f
(
v
,
q
){
var
n
=
h
.
vertices
[
v
].
position
,
p
=
h
.
vertices
[
q
].
position
;
return
d
((
n
.
x
+
p
.
x
)
/
2
,(
n
.
y
+
p
.
y
)
/
2
,(
n
.
z
+
p
.
z
)
/
2
)}
var
h
=
this
,
c
=
new
THREE
.
Geometry
,
e
;
this
.
subdivisions
=
a
||
0
;
THREE
.
Geometry
.
call
(
this
);
a
=
(
1
+
Math
.
sqrt
(
5
))
/
2
;
d
(
-
1
,
a
,
0
);
d
(
1
,
a
,
0
);
d
(
-
1
,
-
a
,
0
);
d
(
1
,
-
a
,
0
);
d
(
0
,
-
1
,
a
);
d
(
0
,
1
,
a
);
d
(
0
,
-
1
,
-
a
);
d
(
0
,
1
,
-
a
);
d
(
a
,
0
,
-
1
);
d
(
a
,
0
,
1
);
d
(
-
a
,
0
,
-
1
);
d
(
-
a
,
0
,
1
);
b
(
0
,
11
,
5
,
c
);
b
(
0
,
5
,
1
,
c
);
b
(
0
,
1
,
7
,
c
);
b
(
0
,
7
,
10
,
c
);
b
(
0
,
10
,
11
,
c
);
b
(
1
,
5
,
9
,
c
);
b
(
5
,
11
,
4
,
c
);
b
(
11
,
10
,
2
,
c
);
b
(
10
,
7
,
6
,
c
);
b
(
7
,
1
,
8
,
c
);
b
(
3
,
9
,
4
,
c
);
b
(
3
,
4
,
2
,
c
);
b
(
3
,
2
,
6
,
c
);
b
(
3
,
6
,
8
,
c
);
b
(
3
,
8
,
9
,
c
);
b
(
4
,
9
,
5
,
c
);
b
(
2
,
4
,
11
,
c
);
b
(
6
,
2
,
10
,
c
);
b
(
8
,
6
,
7
,
c
);
b
(
9
,
8
,
1
,
c
);
for
(
a
=
0
;
a
<
this
.
subdivisions
;
a
++
){
e
=
new
THREE
.
Geometry
;
for
(
var
g
in
c
.
faces
){
var
j
=
f
(
c
.
faces
[
g
].
a
,
c
.
faces
[
g
].
b
),
m
=
f
(
c
.
faces
[
g
].
b
,
c
.
faces
[
g
].
c
),
k
=
f
(
c
.
faces
[
g
].
c
,
c
.
faces
[
g
].
a
);
b
(
c
.
faces
[
g
].
a
,
j
,
k
,
e
);
b
(
c
.
faces
[
g
].
b
,
m
,
j
,
e
);
b
(
c
.
faces
[
g
].
c
,
k
,
m
,
e
);
b
(
j
,
m
,
k
,
e
)}
c
.
faces
=
e
.
faces
}
h
.
faces
=
c
.
faces
;
delete
c
;
delete
e
;
this
.
computeCentroids
();
this
.
computeFaceNormals
();
this
.
computeVertexNormals
()};
Icosahedron
.
prototype
=
new
THREE
.
Geometry
;
Icosahedron
.
prototype
.
constructor
=
Icosahedron
;
function
LathedObject
(
a
,
d
,
b
){
THREE
.
Geometry
.
call
(
this
);
this
.
nsteps
=
d
||
12
;
this
.
latheAngle
=
b
||
2
*
Math
.
PI
;
d
=
this
.
latheAngle
/
this
.
nsteps
;
for
(
var
f
=
[],
h
=
[],
c
=
[],
e
=
[],
g
=
0
;
g
<
a
.
length
;
g
++
){
this
.
vertices
.
push
(
new
THREE
.
Vertex
(
a
[
g
]));
h
[
g
]
=
this
.
vertices
.
length
-
1
;
f
[
g
]
=
new
THREE
.
Vector3
(
a
[
g
].
x
,
a
[
g
].
y
,
a
[
g
].
z
)}
for
(
var
j
=
THREE
.
Matrix4
.
rotationZMatrix
(
this
.
stepSize
),
m
=
0
;
m
<=
this
.
latheAngle
+
0.001
0
;
m
+=
this
.
stepSize
){
for
(
g
=
0
;
g
<
f
.
length
;
g
++
)
if
(
m
<
b
){
f
[
g
]
=
j
.
multiplyVector3
(
f
[
g
].
clone
());
this
.
vertices
.
push
(
new
THREE
.
Vertex
(
f
[
g
]));
function
LathedObject
(
a
,
d
,
b
){
THREE
.
Geometry
.
call
(
this
);
this
.
nsteps
=
d
||
12
;
this
.
latheAngle
=
b
||
2
*
Math
.
PI
;
d
=
this
.
latheAngle
/
this
.
nsteps
;
for
(
var
f
=
[],
h
=
[],
c
=
[],
e
=
[],
g
=
0
;
g
<
a
.
length
;
g
++
){
this
.
vertices
.
push
(
new
THREE
.
Vertex
(
a
[
g
]));
h
[
g
]
=
this
.
vertices
.
length
-
1
;
f
[
g
]
=
new
THREE
.
Vector3
(
a
[
g
].
x
,
a
[
g
].
y
,
a
[
g
].
z
)}
for
(
var
j
=
THREE
.
Matrix4
.
rotationZMatrix
(
this
.
stepSize
),
m
=
0
;
m
<=
this
.
latheAngle
+
0.001
;
m
+=
this
.
stepSize
){
for
(
g
=
0
;
g
<
f
.
length
;
g
++
)
if
(
m
<
b
){
f
[
g
]
=
j
.
multiplyVector3
(
f
[
g
].
clone
());
this
.
vertices
.
push
(
new
THREE
.
Vertex
(
f
[
g
]));
c
[
g
]
=
this
.
vertices
.
length
-
1
}
else
c
=
e
;
m
==
0
&&
(
e
=
h
);
for
(
g
=
0
;
g
<
h
.
length
-
1
;
g
++
){
this
.
faces
.
push
(
new
THREE
.
Face4
(
c
[
g
],
c
[
g
+
1
],
h
[
g
+
1
],
h
[
g
]));
this
.
uvs
.
push
([
new
THREE
.
UV
(
m
/
b
,
g
/
a
.
length
),
new
THREE
.
UV
(
m
/
b
,(
g
+
1
)
/
a
.
length
),
new
THREE
.
UV
((
m
-
d
)
/
b
,(
g
+
1
)
/
a
.
length
),
new
THREE
.
UV
((
m
-
d
)
/
b
,
g
/
a
.
length
)])}
h
=
c
;
c
=
[]}
this
.
computeCentroids
();
this
.
computeFaceNormals
();
this
.
computeVertexNormals
()}
LathedObject
.
prototype
=
new
THREE
.
Geometry
;
LathedObject
.
prototype
.
constructor
=
LathedObject
;
if
(
!
window
.
Int32Array
){
window
.
Int32Array
=
Array
;
window
.
Float32Array
=
Array
}
THREE
.
MarchingCubes
=
function
(
a
,
d
){
THREE
.
Object3D
.
call
(
this
);
this
.
materials
=
d
instanceof
Array
?
d
:[
d
];
this
.
init
=
function
(
b
){
this
.
isolation
=
80
;
this
.
size
=
b
;
this
.
size2
=
this
.
size
*
this
.
size
;
this
.
size3
=
this
.
size2
*
this
.
size
;
this
.
halfsize
=
this
.
size
/
2
;
this
.
delta
=
2
/
this
.
size
;
this
.
yd
=
this
.
size
;
this
.
zd
=
this
.
size2
;
this
.
field
=
new
Float32Array
(
this
.
size3
);
this
.
normal_cache
=
new
Float32Array
(
this
.
size3
*
3
);
this
.
vlist
=
new
Float32Array
(
36
);
this
.
nlist
=
new
Float32Array
(
36
);
this
.
firstDraw
=!
0
;
this
.
maxCount
=
4096
;
this
.
count
=
...
...
build/custom/ThreeSVG.js
浏览文件 @
1413f969
// ThreeSVG.js r3
5
- http://github.com/mrdoob/three.js
// ThreeSVG.js r3
6
- http://github.com/mrdoob/three.js
var
THREE
=
THREE
||
{};
THREE
.
Color
=
function
(
a
){
this
.
setHex
(
a
)};
THREE
.
Color
.
prototype
=
{
autoUpdate
:
!
0
,
setRGB
:
function
(
a
,
b
,
c
){
this
.
r
=
a
;
this
.
g
=
b
;
this
.
b
=
c
;
if
(
this
.
autoUpdate
){
this
.
updateHex
();
this
.
updateStyleString
()}},
setHSV
:
function
(
a
,
b
,
c
){
var
d
,
e
,
f
,
g
,
i
,
h
;
if
(
c
==
0
)
d
=
e
=
f
=
0
;
else
{
g
=
Math
.
floor
(
a
*
6
);
i
=
a
*
6
-
g
;
a
=
c
*
(
1
-
b
);
h
=
c
*
(
1
-
b
*
i
);
b
=
c
*
(
1
-
b
*
(
1
-
i
));
switch
(
g
){
case
1
:
d
=
h
;
e
=
c
;
f
=
a
;
break
;
case
2
:
d
=
a
;
e
=
c
;
f
=
b
;
break
;
case
3
:
d
=
a
;
e
=
h
;
f
=
c
;
break
;
case
4
:
d
=
b
;
e
=
a
;
f
=
c
;
break
;
case
5
:
d
=
c
;
e
=
a
;
f
=
h
;
break
;
case
6
:
case
0
:
d
=
c
;
e
=
b
;
f
=
a
}}
this
.
r
=
d
;
this
.
g
=
e
;
this
.
b
=
f
;
if
(
this
.
autoUpdate
){
this
.
updateHex
();
this
.
updateStyleString
()}},
setHex
:
function
(
a
){
this
.
hex
=~~
a
&
16777215
;
if
(
this
.
autoUpdate
){
this
.
updateRGB
();
this
.
updateStyleString
()}},
updateHex
:
function
(){
this
.
hex
=~~
(
this
.
r
*
255
)
<<
16
^~~
(
this
.
g
*
255
)
<<
8
^~~
(
this
.
b
*
255
)},
updateRGB
:
function
(){
this
.
r
=
(
this
.
hex
>>
16
&
255
)
/
255
;
this
.
g
=
(
this
.
hex
>>
8
&
255
)
/
255
;
this
.
b
=
(
this
.
hex
&
255
)
/
255
},
updateStyleString
:
function
(){
this
.
__styleString
=
"
rgb(
"
+~~
(
this
.
r
*
255
)
+
"
,
"
+~~
(
this
.
g
*
255
)
+
"
,
"
+~~
(
this
.
b
*
255
)
+
"
)
"
},
clone
:
function
(){
return
new
THREE
.
Color
(
this
.
hex
)}};
...
...
@@ -48,7 +48,7 @@ b,c)}}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==undefined
THREE
.
Quaternion
.
prototype
=
{
set
:
function
(
a
,
b
,
c
,
d
){
this
.
x
=
a
;
this
.
y
=
b
;
this
.
z
=
c
;
this
.
w
=
d
;
return
this
},
setFromEuler
:
function
(
a
){
var
b
=
0.5
*
Math
.
PI
/
360
,
c
=
a
.
x
*
b
,
d
=
a
.
y
*
b
,
e
=
a
.
z
*
b
;
a
=
Math
.
cos
(
d
);
d
=
Math
.
sin
(
d
);
b
=
Math
.
cos
(
-
e
);
e
=
Math
.
sin
(
-
e
);
var
f
=
Math
.
cos
(
c
);
c
=
Math
.
sin
(
c
);
var
g
=
a
*
b
,
i
=
d
*
e
;
this
.
w
=
g
*
f
-
i
*
c
;
this
.
x
=
g
*
c
+
i
*
f
;
this
.
y
=
d
*
b
*
f
+
a
*
e
*
c
;
this
.
z
=
a
*
e
*
f
-
d
*
b
*
c
;
return
this
},
calculateW
:
function
(){
this
.
w
=-
Math
.
sqrt
(
Math
.
abs
(
1
-
this
.
x
*
this
.
x
-
this
.
y
*
this
.
y
-
this
.
z
*
this
.
z
));
return
this
},
inverse
:
function
(){
this
.
x
*=-
1
;
this
.
y
*=
-
1
;
this
.
z
*=-
1
;
return
this
},
length
:
function
(){
return
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
+
this
.
z
*
this
.
z
+
this
.
w
*
this
.
w
)},
normalize
:
function
(){
var
a
=
Math
.
sqrt
(
this
.
x
*
this
.
x
+
this
.
y
*
this
.
y
+
this
.
z
*
this
.
z
+
this
.
w
*
this
.
w
);
if
(
a
==
0
)
this
.
w
=
this
.
z
=
this
.
y
=
this
.
x
=
0
;
else
{
a
=
1
/
a
;
this
.
x
*=
a
;
this
.
y
*=
a
;
this
.
z
*=
a
;
this
.
w
*=
a
}
return
this
},
multiplySelf
:
function
(
a
){
var
b
=
this
.
x
,
c
=
this
.
y
,
d
=
this
.
z
,
e
=
this
.
w
,
f
=
a
.
x
,
g
=
a
.
y
,
i
=
a
.
z
;
a
=
a
.
w
;
this
.
x
=
b
*
a
+
e
*
f
+
c
*
i
-
d
*
g
;
this
.
y
=
c
*
a
+
e
*
g
+
d
*
f
-
b
*
i
;
this
.
z
=
d
*
a
+
e
*
i
+
b
*
g
-
c
*
f
;
this
.
w
=
e
*
a
-
b
*
f
-
c
*
g
-
d
*
i
;
return
this
},
multiplyVector3
:
function
(
a
,
b
){
b
||
(
b
=
a
);
var
c
=
a
.
x
,
d
=
a
.
y
,
e
=
a
.
z
,
f
=
this
.
x
,
g
=
this
.
y
,
i
=
this
.
z
,
h
=
this
.
w
,
l
=
h
*
c
+
g
*
e
-
i
*
d
,
n
=
h
*
d
+
i
*
c
-
f
*
e
,
m
=
h
*
e
+
f
*
d
-
g
*
c
;
c
=-
f
*
c
-
g
*
d
-
i
*
e
;
b
.
x
=
l
*
h
+
c
*-
f
+
n
*-
i
-
m
*-
g
;
b
.
y
=
n
*
h
+
c
*-
g
+
m
*-
f
-
l
*-
i
;
b
.
z
=
m
*
h
+
c
*-
i
+
l
*-
g
-
n
*-
f
;
return
b
}};
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
;
if
(
Math
.
abs
(
e
)
>=
1
){
c
.
w
=
a
.
w
;
c
.
x
=
a
.
x
;
c
.
y
=
a
.
y
;
c
.
z
=
a
.
z
;
return
c
}
var
f
=
Math
.
acos
(
e
),
g
=
Math
.
sqrt
(
1
-
e
*
e
);
if
(
Math
.
abs
(
g
)
<
0.001
0
){
c
.
w
=
0.5
*
(
a
.
w
+
b
.
w
);
c
.
x
=
0.5
*
(
a
.
x
+
b
.
x
);
c
.
y
=
0.5
*
(
a
.
y
+
b
.
y
);
c
.
z
=
0.5
*
(
a
.
z
+
b
.
z
);
return
c
}
e
=
Math
.
sin
((
1
-
d
)
*
f
)
/
g
;
d
=
Math
.
sin
(
d
*
f
)
/
g
;
c
.
w
=
a
.
w
*
e
+
b
.
w
*
d
;
c
.
x
=
a
.
x
*
e
+
b
.
x
*
d
;
c
.
y
=
a
.
y
*
e
+
b
.
y
*
d
;
c
.
z
=
a
.
z
*
e
+
b
.
z
*
d
;
return
c
};
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
;
if
(
Math
.
abs
(
e
)
>=
1
){
c
.
w
=
a
.
w
;
c
.
x
=
a
.
x
;
c
.
y
=
a
.
y
;
c
.
z
=
a
.
z
;
return
c
}
var
f
=
Math
.
acos
(
e
),
g
=
Math
.
sqrt
(
1
-
e
*
e
);
if
(
Math
.
abs
(
g
)
<
0.001
){
c
.
w
=
0.5
*
(
a
.
w
+
b
.
w
);
c
.
x
=
0.5
*
(
a
.
x
+
b
.
x
);
c
.
y
=
0.5
*
(
a
.
y
+
b
.
y
);
c
.
z
=
0.5
*
(
a
.
z
+
b
.
z
);
return
c
}
e
=
Math
.
sin
((
1
-
d
)
*
f
)
/
g
;
d
=
Math
.
sin
(
d
*
f
)
/
g
;
c
.
w
=
a
.
w
*
e
+
b
.
w
*
d
;
c
.
x
=
a
.
x
*
e
+
b
.
x
*
d
;
c
.
y
=
a
.
y
*
e
+
b
.
y
*
d
;
c
.
z
=
a
.
z
*
e
+
b
.
z
*
d
;
return
c
};
THREE
.
Vertex
=
function
(
a
,
b
){
this
.
position
=
a
||
new
THREE
.
Vector3
;
this
.
positionWorld
=
new
THREE
.
Vector3
;
this
.
positionScreen
=
new
THREE
.
Vector4
;
this
.
normal
=
b
||
new
THREE
.
Vector3
;
this
.
normalWorld
=
new
THREE
.
Vector3
;
this
.
normalScreen
=
new
THREE
.
Vector3
;
this
.
tangent
=
new
THREE
.
Vector4
;
this
.
__visible
=!
0
};
THREE
.
Face3
=
function
(
a
,
b
,
c
,
d
,
e
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
centroid
=
new
THREE
.
Vector3
;
this
.
normal
=
d
instanceof
THREE
.
Vector3
?
d
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
d
instanceof
Array
?
d
:[];
this
.
materials
=
e
instanceof
Array
?
e
:[
e
]};
THREE
.
Face4
=
function
(
a
,
b
,
c
,
d
,
e
,
f
){
this
.
a
=
a
;
this
.
b
=
b
;
this
.
c
=
c
;
this
.
d
=
d
;
this
.
centroid
=
new
THREE
.
Vector3
;
this
.
normal
=
e
instanceof
THREE
.
Vector3
?
e
:
new
THREE
.
Vector3
;
this
.
vertexNormals
=
e
instanceof
Array
?
e
:[];
this
.
materials
=
f
instanceof
Array
?
f
:[
f
]};
THREE
.
UV
=
function
(
a
,
b
){
this
.
set
(
a
||
0
,
b
||
0
)};
THREE
.
UV
.
prototype
=
{
set
:
function
(
a
,
b
){
this
.
u
=
a
;
this
.
v
=
b
;
return
this
},
copy
:
function
(
a
){
this
.
set
(
a
.
u
,
a
.
v
);
return
this
}};
THREE
.
Geometry
=
function
(){
this
.
id
=
"
Geometry
"
+
THREE
.
GeometryIdCounter
++
;
this
.
vertices
=
[];
this
.
faces
=
[];
this
.
uvs
=
[];
this
.
uvs2
=
[];
this
.
colors
=
[];
this
.
skinWeights
=
[];
this
.
skinIndices
=
[];
this
.
boundingSphere
=
this
.
boundingBox
=
null
;
this
.
hasTangents
=!
1
};
...
...
@@ -63,7 +63,7 @@ this.vertices[d.d].normal.copy(d.vertexNormals[3])}}b=0;for(c=this.vertices.leng
z
:[
this
.
vertices
[
0
].
position
.
z
,
this
.
vertices
[
0
].
position
.
z
]};
for
(
var
b
=
1
,
c
=
this
.
vertices
.
length
;
b
<
c
;
b
++
){
a
=
this
.
vertices
[
b
];
if
(
a
.
position
.
x
<
this
.
boundingBox
.
x
[
0
])
this
.
boundingBox
.
x
[
0
]
=
a
.
position
.
x
;
else
if
(
a
.
position
.
x
>
this
.
boundingBox
.
x
[
1
])
this
.
boundingBox
.
x
[
1
]
=
a
.
position
.
x
;
if
(
a
.
position
.
y
<
this
.
boundingBox
.
y
[
0
])
this
.
boundingBox
.
y
[
0
]
=
a
.
position
.
y
;
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
=
this
.
boundingSphere
===
null
?
0
:
this
.
boundingSphere
.
radius
,
b
=
0
,
c
=
this
.
vertices
.
length
;
b
<
c
;
b
++
)
a
=
Math
.
max
(
a
,
this
.
vertices
[
b
].
position
.
length
());
this
.
boundingSphere
=
{
radius
:
a
}}};
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
);
this
.
position
.
addSelf
(
b
.
multiplyScalar
(
a
));
this
.
target
.
position
.
addSelf
(
b
.
multiplyScalar
(
a
))};
THREE
.
Camera
.
prototype
.
updateProjectionMatrix
=
function
(){
this
.
projectionMatrix
=
THREE
.
Matrix4
.
makePerspective
(
this
.
fov
,
this
.
aspect
,
this
.
near
,
this
.
far
)};
THREE
.
Camera
.
prototype
.
translate
=
function
(
a
,
b
){
this
.
matrix
.
rotateAxis
(
b
);
this
.
position
.
addSelf
(
b
.
multiplyScalar
(
a
));
this
.
target
.
position
.
addSelf
(
b
.
multiplyScalar
(
a
))};
THREE
.
Camera
.
prototype
.
updateProjectionMatrix
=
function
(){
this
.
projectionMatrix
=
THREE
.
Matrix4
.
makePerspective
(
this
.
fov
,
this
.
aspect
,
this
.
near
,
this
.
far
)};
THREE
.
Camera
.
prototype
.
updateMatrix
=
function
(){
this
.
update
(
undefined
,
!
0
)};
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
{
this
.
matrixAutoUpdate
&&
(
b
|=
this
.
updateMatrix
());
if
(
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
;
THREE
.
AmbientLight
.
prototype
.
constructor
=
THREE
.
AmbientLight
;
THREE
.
DirectionalLight
=
function
(
a
,
b
){
THREE
.
Light
.
call
(
this
,
a
);
this
.
position
=
new
THREE
.
Vector3
(
0
,
1
,
0
);
this
.
intensity
=
b
||
1
};
THREE
.
DirectionalLight
.
prototype
=
new
THREE
.
Light
;
THREE
.
DirectionalLight
.
prototype
.
constructor
=
THREE
.
DirectionalLight
;
THREE
.
PointLight
=
function
(
a
,
b
){
THREE
.
Light
.
call
(
this
,
a
);
this
.
position
=
new
THREE
.
Vector3
;
this
.
intensity
=
b
||
1
};
THREE
.
PointLight
.
prototype
=
new
THREE
.
Light
;
THREE
.
PointLight
.
prototype
.
constructor
=
THREE
.
PointLight
;
...
...
build/custom/ThreeWebGL.js
浏览文件 @
1413f969
此差异已折叠。
点击以展开。
src/cameras/Camera.js
浏览文件 @
1413f969
...
...
@@ -42,8 +42,14 @@ THREE.Camera.prototype.updateProjectionMatrix = function () {
}
THREE
.
Camera
.
prototype
.
updateMatrix
=
function
()
{
THREE
.
Camera
.
prototype
.
update
=
function
(
parentMatrixWorld
,
forceUpdate
,
camera
)
{
// this.parent === undefined && this.update( undefined, true );
this
.
update
(
undefined
,
true
);
}
THREE
.
Camera
.
prototype
.
update
=
function
(
parentMatrixWorld
,
forceUpdate
,
camera
)
{
if
(
this
.
useTarget
)
{
...
...
src/cameras/QuakeCamera.js
浏览文件 @
1413f969
...
...
@@ -38,7 +38,7 @@ THREE.QuakeCamera = function ( parameters ) {
this
.
autoForward
=
false
;
this
.
dragToLook
=
false
;
this
.
heightSpeed
=
false
;
this
.
heightCoef
=
1.0
;
this
.
heightMin
=
0.0
;
...
...
@@ -53,7 +53,7 @@ THREE.QuakeCamera = function ( parameters ) {
if
(
parameters
.
lookVertical
!==
undefined
)
this
.
lookVertical
=
parameters
.
lookVertical
;
if
(
parameters
.
autoForward
!==
undefined
)
this
.
autoForward
=
parameters
.
autoForward
;
if
(
parameters
.
dragToLook
!==
undefined
)
this
.
dragToLook
=
parameters
.
dragToLook
;
if
(
parameters
.
heightSpeed
!==
undefined
)
this
.
heightSpeed
=
parameters
.
heightSpeed
;
...
...
@@ -81,7 +81,7 @@ THREE.QuakeCamera = function ( parameters ) {
this
.
moveRight
=
false
;
this
.
mouseDragOn
=
false
;
this
.
windowHalfX
=
window
.
innerWidth
/
2
;
this
.
windowHalfY
=
window
.
innerHeight
/
2
;
...
...
@@ -100,7 +100,7 @@ THREE.QuakeCamera = function ( parameters ) {
}
}
this
.
mouseDragOn
=
true
;
};
...
...
@@ -120,7 +120,7 @@ THREE.QuakeCamera = function ( parameters ) {
}
}
this
.
mouseDragOn
=
false
;
};
...
...
@@ -193,13 +193,13 @@ THREE.QuakeCamera = function ( parameters ) {
if
(
this
.
moveRight
)
this
.
translateX
(
this
.
movementSpeed
);
var
actualLookSpeed
=
this
.
lookSpeed
;
if
(
this
.
dragToLook
&&
!
this
.
mouseDragOn
)
{
actualLookSpeed
=
0
;
}
this
.
lon
+=
this
.
mouseX
*
actualLookSpeed
;
if
(
this
.
lookVertical
)
this
.
lat
-=
this
.
mouseY
*
actualLookSpeed
;
...
...
@@ -260,13 +260,13 @@ THREE.QuakeCamera.prototype.supr = THREE.Camera.prototype;
THREE
.
QuakeCamera
.
prototype
.
translate
=
function
(
distance
,
axis
)
{
this
.
matrix
.
rotateAxis
(
axis
);
if
(
this
.
noFly
)
{
axis
.
y
=
0
;
}
this
.
position
.
addSelf
(
axis
.
multiplyScalar
(
distance
)
);
this
.
target
.
position
.
addSelf
(
axis
.
multiplyScalar
(
distance
)
);
...
...
src/renderers/WebGLRenderer.js
浏览文件 @
1413f969
...
...
@@ -1909,10 +1909,10 @@ THREE.WebGLRenderer = function ( parameters ) {
fog
=
scene
.
fog
,
ol
;
if
(
camera
.
matrixAutoUpdate
&&
camera
.
parent
===
undefined
)
{
camera
.
update
(
undefined
,
true
);
}
camera
.
matrixAutoUpdate
&&
camera
.
updateMatrix
();
scene
.
update
(
undefined
,
false
,
camera
);
camera
.
matrixWorldInverse
.
flattenToArray
(
_viewMatrixArray
);
camera
.
projectionMatrix
.
flattenToArray
(
_projectionMatrixArray
);
...
...
utils/REVISION
已删除
100644 → 0
浏览文件 @
67341e77
35
utils/build.py
浏览文件 @
1413f969
...
...
@@ -318,7 +318,7 @@ def compress(text):
def
addHeader
(
text
,
endFilename
):
with
open
(
os
.
path
.
join
(
'.'
,
'REVISION'
),
'r'
)
as
handle
:
with
open
(
os
.
path
.
join
(
'.
.
'
,
'REVISION'
),
'r'
)
as
handle
:
revision
=
handle
.
read
().
rstrip
()
return
(
"// %s r%s - http://github.com/mrdoob/three.js
\n
"
%
(
endFilename
,
revision
))
+
text
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录