Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
车家大少爷
three.js
提交
f4063649
T
three.js
项目概览
车家大少爷
/
three.js
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
three.js
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f4063649
编写于
10月 30, 2011
作者:
M
Mr.doob
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
And yet some more Ray optimisations :P
And still readable code...
上级
b6e7ad88
变更
7
展开全部
隐藏空白更改
内联
并排
Showing
7 changed file
with
701 addition
and
700 deletion
+701
-700
build/Three.js
build/Three.js
+357
-357
build/custom/ThreeCanvas.js
build/custom/ThreeCanvas.js
+69
-69
build/custom/ThreeDOM.js
build/custom/ThreeDOM.js
+39
-39
build/custom/ThreeExtras.js
build/custom/ThreeExtras.js
+4
-4
build/custom/ThreeSVG.js
build/custom/ThreeSVG.js
+54
-54
build/custom/ThreeWebGL.js
build/custom/ThreeWebGL.js
+169
-168
src/core/Ray.js
src/core/Ray.js
+9
-9
未找到文件。
build/Three.js
浏览文件 @
f4063649
因为 它太大了无法显示 source diff 。你可以改为
查看blob
。
build/custom/ThreeCanvas.js
浏览文件 @
f4063649
此差异已折叠。
点击以展开。
build/custom/ThreeDOM.js
浏览文件 @
f4063649
此差异已折叠。
点击以展开。
build/custom/ThreeExtras.js
浏览文件 @
f4063649
...
...
@@ -96,7 +96,7 @@ THREE.CombinedCamera.prototype.toOrthographic=function(){var a=Math.tan(this.fov
THREE
.
CombinedCamera
.
prototype
.
setFov
=
function
(
a
){
this
.
fov
=
a
;
this
.
inPersepectiveMode
?
this
.
toPerspective
():
this
.
toOrthographic
()};
THREE
.
CombinedCamera
.
prototype
.
setLens
=
function
(
a
,
c
){
c
||
(
c
=
43.25
);
var
b
=
2
*
Math
.
atan
(
c
/
(
a
*
2
));
b
*=
180
/
Math
.
PI
;
this
.
setFov
(
b
);
return
b
};
THREE
.
CombinedCamera
.
prototype
.
setZoom
=
function
(
a
){
this
.
zoom
=
a
;
this
.
inPersepectiveMode
?
this
.
toPerspective
():
this
.
toOrthographic
()};
THREE
.
CombinedCamera
.
prototype
.
toFrontView
=
function
(){
this
.
rotation
.
x
=
0
;
this
.
rotation
.
y
=
0
;
this
.
rotation
.
z
=
0
;
this
.
rotationAutoUpdate
=!
1
};
THREE
.
CombinedCamera
.
prototype
.
toBackView
=
function
(){
this
.
rotation
.
x
=
0
;
this
.
rotation
.
y
=
Math
.
PI
;
this
.
rotation
.
z
=
0
;
this
.
rotationAutoUpdate
=!
1
};
THREE
.
CombinedCamera
.
prototype
.
toLeftView
=
function
(){
this
.
rotation
.
x
=
0
;
this
.
rotation
.
y
=-
Math
.
PI
/
2
;
this
.
rotation
.
z
=
0
;
this
.
rotationAutoUpdate
=!
1
};
THREE
.
CombinedCamera
.
prototype
.
toRightView
=
function
(){
this
.
rotation
.
x
=
0
;
this
.
rotation
.
y
=
Math
.
PI
/
2
;
this
.
rotation
.
z
=
0
;
this
.
rotationAutoUpdate
=!
1
};
THREE
.
CombinedCamera
.
prototype
.
toTopView
=
function
(){
this
.
rotation
.
x
=-
Math
.
PI
/
2
;
this
.
rotation
.
y
=
0
;
this
.
rotation
.
z
=
0
;
this
.
rotationAutoUpdate
=!
1
};
THREE
.
CombinedCamera
.
prototype
.
toBottomView
=
function
(){
this
.
rotation
.
x
=
Math
.
PI
/
2
;
this
.
rotation
.
y
=
0
;
this
.
rotation
.
z
=
0
;
this
.
rotationAutoUpdate
=!
1
};
THREE
.
FirstPersonControls
=
function
(
a
,
c
){
function
b
(
a
,
b
){
return
function
(){
b
.
apply
(
a
,
arguments
)}}
this
.
object
=
a
;
this
.
target
=
new
THREE
.
Vector3
(
0
,
0
,
0
);
this
.
domElement
=
c
!==
void
0
?
c
:
document
;
this
.
movementSpeed
=
1
;
this
.
lookSpeed
=
0.005
0
;
this
.
noFly
=!
1
;
this
.
lookVertical
=!
0
;
this
.
autoForward
=!
1
;
this
.
activeLook
=!
0
;
this
.
heightSpeed
=!
1
;
this
.
heightCoef
=
1
;
this
.
heightMin
=
0
;
this
.
constrainVertical
=!
1
;
this
.
verticalMin
=
0
;
this
.
verticalMax
=
Math
.
PI
;
this
.
theta
=
this
.
phi
=
this
.
lon
=
this
.
lat
=
this
.
mouseY
=
this
.
mouseX
=
this
.
autoSpeedFactor
=
THREE
.
FirstPersonControls
=
function
(
a
,
c
){
function
b
(
a
,
b
){
return
function
(){
b
.
apply
(
a
,
arguments
)}}
this
.
object
=
a
;
this
.
target
=
new
THREE
.
Vector3
(
0
,
0
,
0
);
this
.
domElement
=
c
!==
void
0
?
c
:
document
;
this
.
movementSpeed
=
1
;
this
.
lookSpeed
=
0.005
;
this
.
noFly
=!
1
;
this
.
lookVertical
=!
0
;
this
.
autoForward
=!
1
;
this
.
activeLook
=!
0
;
this
.
heightSpeed
=!
1
;
this
.
heightCoef
=
1
;
this
.
heightMin
=
0
;
this
.
constrainVertical
=!
1
;
this
.
verticalMin
=
0
;
this
.
verticalMax
=
Math
.
PI
;
this
.
theta
=
this
.
phi
=
this
.
lon
=
this
.
lat
=
this
.
mouseY
=
this
.
mouseX
=
this
.
autoSpeedFactor
=
0
;
this
.
mouseDragOn
=
this
.
freeze
=
this
.
moveRight
=
this
.
moveLeft
=
this
.
moveBackward
=
this
.
moveForward
=!
1
;
this
.
domElement
===
document
?(
this
.
viewHalfX
=
window
.
innerWidth
/
2
,
this
.
viewHalfY
=
window
.
innerHeight
/
2
):(
this
.
viewHalfX
=
this
.
domElement
.
offsetWidth
/
2
,
this
.
viewHalfY
=
this
.
domElement
.
offsetHeight
/
2
,
this
.
domElement
.
setAttribute
(
"
tabindex
"
,
-
1
));
this
.
onMouseDown
=
function
(
a
){
this
.
domElement
!==
document
&&
this
.
domElement
.
focus
();
a
.
preventDefault
();
a
.
stopPropagation
();
if
(
this
.
activeLook
)
switch
(
a
.
button
){
case
0
:
this
.
moveForward
=
!
0
;
break
;
case
2
:
this
.
moveBackward
=!
0
}
this
.
mouseDragOn
=!
0
};
this
.
onMouseUp
=
function
(
a
){
a
.
preventDefault
();
a
.
stopPropagation
();
if
(
this
.
activeLook
)
switch
(
a
.
button
){
case
0
:
this
.
moveForward
=!
1
;
break
;
case
2
:
this
.
moveBackward
=!
1
}
this
.
mouseDragOn
=!
1
};
this
.
onMouseMove
=
function
(
a
){
this
.
domElement
===
document
?(
this
.
mouseX
=
a
.
pageX
-
this
.
viewHalfX
,
this
.
mouseY
=
a
.
pageY
-
this
.
viewHalfY
):(
this
.
mouseX
=
a
.
pageX
-
this
.
domElement
.
offsetLeft
-
this
.
viewHalfX
,
this
.
mouseY
=
a
.
pageY
-
this
.
domElement
.
offsetTop
-
this
.
viewHalfY
)};
this
.
onKeyDown
=
function
(
a
){
switch
(
a
.
keyCode
){
case
38
:
case
87
:
this
.
moveForward
=!
0
;
break
;
case
37
:
case
65
:
this
.
moveLeft
=!
0
;
break
;
case
40
:
case
83
:
this
.
moveBackward
=!
0
;
break
;
case
39
:
case
68
:
this
.
moveRight
=!
0
;
break
;
case
82
:
this
.
moveUp
=!
0
;
break
;
case
70
:
this
.
moveDown
=!
0
;
break
;
case
81
:
this
.
freeze
=!
this
.
freeze
}};
this
.
onKeyUp
=
function
(
a
){
switch
(
a
.
keyCode
){
case
38
:
case
87
:
this
.
moveForward
=!
1
;
break
;
case
37
:
case
65
:
this
.
moveLeft
=!
1
;
break
;
case
40
:
case
83
:
this
.
moveBackward
=!
1
;
break
;
case
39
:
case
68
:
this
.
moveRight
=!
1
;
break
;
case
82
:
this
.
moveUp
=
...
...
@@ -106,14 +106,14 @@ this.moveUp&&this.object.translateY(b);this.moveDown&&this.object.translateY(-b)
this
.
object
.
lookAt
(
a
)};
this
.
domElement
.
addEventListener
(
"
contextmenu
"
,
function
(
a
){
a
.
preventDefault
()},
!
1
);
this
.
domElement
.
addEventListener
(
"
mousemove
"
,
b
(
this
,
this
.
onMouseMove
),
!
1
);
this
.
domElement
.
addEventListener
(
"
mousedown
"
,
b
(
this
,
this
.
onMouseDown
),
!
1
);
this
.
domElement
.
addEventListener
(
"
mouseup
"
,
b
(
this
,
this
.
onMouseUp
),
!
1
);
this
.
domElement
.
addEventListener
(
"
keydown
"
,
b
(
this
,
this
.
onKeyDown
),
!
1
);
this
.
domElement
.
addEventListener
(
"
keyup
"
,
b
(
this
,
this
.
onKeyUp
),
!
1
)};
THREE
.
PathControls
=
function
(
a
,
c
){
function
b
(
a
){
if
((
a
*=
2
)
<
1
)
return
0.5
*
a
*
a
;
return
-
0.5
*
(
--
a
*
(
a
-
2
)
-
1
)}
function
d
(
a
,
b
){
return
function
(){
b
.
apply
(
a
,
arguments
)}}
function
f
(
a
,
b
,
d
,
c
){
var
e
=
{
name
:
d
,
fps
:
0.6
,
length
:
c
,
hierarchy
:[]},
g
,
f
=
b
.
getControlPointsArray
(),
h
=
b
.
getLength
(),
r
=
f
.
length
,
p
=
0
;
g
=
r
-
1
;
b
=
{
parent
:
-
1
,
keys
:[]};
b
.
keys
[
0
]
=
{
time
:
0
,
pos
:
f
[
0
],
rot
:[
0
,
0
,
0
,
1
],
scl
:[
1
,
1
,
1
]};
b
.
keys
[
g
]
=
{
time
:
c
,
pos
:
f
[
g
],
rot
:[
0
,
0
,
0
,
1
],
scl
:[
1
,
1
,
1
]};
for
(
g
=
1
;
g
<
r
-
1
;
g
++
)
p
=
c
*
h
.
chunks
[
g
]
/
h
.
total
,
b
.
keys
[
g
]
=
{
time
:
p
,
pos
:
f
[
g
]};
e
.
hierarchy
[
0
]
=
b
;
THREE
.
AnimationHandler
.
add
(
e
);
return
new
THREE
.
Animation
(
a
,
d
,
THREE
.
AnimationHandler
.
CATMULLROM_FORWARD
,
!
1
)}
function
g
(
a
,
b
){
var
d
,
c
,
e
=
new
THREE
.
Geometry
;
for
(
d
=
0
;
d
<
a
.
points
.
length
*
b
;
d
++
)
c
=
d
/
(
a
.
points
.
length
*
b
),
c
=
a
.
getPoint
(
c
),
e
.
vertices
[
d
]
=
new
THREE
.
Vertex
(
new
THREE
.
Vector3
(
c
.
x
,
c
.
y
,
c
.
z
));
return
e
}
this
.
object
=
a
;
this
.
domElement
=
c
!==
void
0
?
c
:
document
;
this
.
id
=
"
PathControls
"
+
THREE
.
PathControlsIdCounter
++
;
this
.
duration
=
1
E4
;
this
.
waypoints
=
[];
this
.
useConstantSpeed
=!
0
;
this
.
resamplingCoef
=
50
;
this
.
debugPath
=
new
THREE
.
Object3D
;
this
.
debugDummy
=
new
THREE
.
Object3D
;
this
.
animationParent
=
new
THREE
.
Object3D
;
this
.
lookSpeed
=
0.005
0
;
this
.
lookHorizontal
=
this
.
lookVertical
=!
0
;
this
.
verticalAngleMap
=
{
srcRange
:[
0
,
2
*
Math
.
PI
],
dstRange
:[
0
,
2
*
Math
.
PI
]};
this
.
horizontalAngleMap
=
{
srcRange
:[
0
,
2
*
Math
.
PI
],
dstRange
:[
0
,
2
*
Math
.
PI
]};
this
.
target
=
new
THREE
.
Object3D
;
this
.
theta
=
this
.
phi
=
this
.
lon
=
this
.
lat
=
this
.
mouseY
=
this
.
mouseX
=
0
;
this
.
domElement
===
document
?(
this
.
viewHalfX
=
window
.
innerWidth
/
2
,
this
.
viewHalfY
=
window
.
innerHeight
/
2
):(
this
.
viewHalfX
=
new
THREE
.
Object3D
;
this
.
debugDummy
=
new
THREE
.
Object3D
;
this
.
animationParent
=
new
THREE
.
Object3D
;
this
.
lookSpeed
=
0.005
;
this
.
lookHorizontal
=
this
.
lookVertical
=!
0
;
this
.
verticalAngleMap
=
{
srcRange
:[
0
,
2
*
Math
.
PI
],
dstRange
:[
0
,
2
*
Math
.
PI
]};
this
.
horizontalAngleMap
=
{
srcRange
:[
0
,
2
*
Math
.
PI
],
dstRange
:[
0
,
2
*
Math
.
PI
]};
this
.
target
=
new
THREE
.
Object3D
;
this
.
theta
=
this
.
phi
=
this
.
lon
=
this
.
lat
=
this
.
mouseY
=
this
.
mouseX
=
0
;
this
.
domElement
===
document
?(
this
.
viewHalfX
=
window
.
innerWidth
/
2
,
this
.
viewHalfY
=
window
.
innerHeight
/
2
):(
this
.
viewHalfX
=
this
.
domElement
.
offsetWidth
/
2
,
this
.
viewHalfY
=
this
.
domElement
.
offsetHeight
/
2
,
this
.
domElement
.
setAttribute
(
"
tabindex
"
,
-
1
));
var
e
=
Math
.
PI
*
2
,
h
=
Math
.
PI
/
180
;
this
.
update
=
function
(
a
){
var
d
;
this
.
lookHorizontal
&&
(
this
.
lon
+=
this
.
mouseX
*
this
.
lookSpeed
*
a
);
this
.
lookVertical
&&
(
this
.
lat
-=
this
.
mouseY
*
this
.
lookSpeed
*
a
);
this
.
lon
=
Math
.
max
(
0
,
Math
.
min
(
360
,
this
.
lon
));
this
.
lat
=
Math
.
max
(
-
85
,
Math
.
min
(
85
,
this
.
lat
));
this
.
phi
=
(
90
-
this
.
lat
)
*
h
;
this
.
theta
=
this
.
lon
*
h
;
a
=
this
.
phi
%
e
;
this
.
phi
=
a
>=
0
?
a
:
a
+
e
;
d
=
this
.
verticalAngleMap
.
srcRange
;
a
=
this
.
verticalAngleMap
.
dstRange
;
d
=
THREE
.
Math
.
mapLinear
(
this
.
phi
,
d
[
0
],
d
[
1
],
a
[
0
],
a
[
1
]);
var
c
=
a
[
1
]
-
a
[
0
];
this
.
phi
=
b
((
d
-
a
[
0
])
/
c
)
*
c
+
a
[
0
];
d
=
this
.
horizontalAngleMap
.
srcRange
;
a
=
this
.
horizontalAngleMap
.
dstRange
;
d
=
THREE
.
Math
.
mapLinear
(
this
.
theta
,
d
[
0
],
d
[
1
],
a
[
0
],
a
[
1
]);
c
=
a
[
1
]
-
a
[
0
];
this
.
theta
=
b
((
d
-
a
[
0
])
/
c
)
*
c
+
a
[
0
];
a
=
this
.
target
.
position
;
a
.
x
=
100
*
Math
.
sin
(
this
.
phi
)
*
Math
.
cos
(
this
.
theta
);
a
.
y
=
100
*
Math
.
cos
(
this
.
phi
);
a
.
z
=
100
*
Math
.
sin
(
this
.
phi
)
*
Math
.
sin
(
this
.
theta
);
this
.
object
.
lookAt
(
this
.
target
.
position
)};
this
.
onMouseMove
=
function
(
a
){
this
.
domElement
===
document
?(
this
.
mouseX
=
a
.
pageX
-
this
.
viewHalfX
,
this
.
mouseY
=
a
.
pageY
-
this
.
viewHalfY
):(
this
.
mouseX
=
a
.
pageX
-
this
.
domElement
.
offsetLeft
-
this
.
viewHalfX
,
this
.
mouseY
=
a
.
pageY
-
this
.
domElement
.
offsetTop
-
this
.
viewHalfY
)};
this
.
init
=
function
(){
this
.
spline
=
new
THREE
.
Spline
;
this
.
spline
.
initFromArray
(
this
.
waypoints
);
this
.
useConstantSpeed
&&
this
.
spline
.
reparametrizeByArcLength
(
this
.
resamplingCoef
);
if
(
this
.
createDebugDummy
){
var
a
=
new
THREE
.
MeshLambertMaterial
({
color
:
30719
}),
b
=
new
THREE
.
MeshLambertMaterial
({
color
:
65280
}),
c
=
new
THREE
.
CubeGeometry
(
10
,
10
,
20
),
e
=
new
THREE
.
CubeGeometry
(
2
,
2
,
10
);
this
.
animationParent
=
new
THREE
.
Mesh
(
c
,
a
);
a
=
new
THREE
.
Mesh
(
e
,
b
);
a
.
position
.
set
(
0
,
10
,
0
);
this
.
animation
=
f
(
this
.
animationParent
,
this
.
spline
,
this
.
id
,
this
.
duration
);
this
.
animationParent
.
add
(
this
.
object
);
this
.
animationParent
.
add
(
this
.
target
);
this
.
animationParent
.
add
(
a
)}
else
this
.
animation
=
f
(
this
.
animationParent
,
this
.
spline
,
this
.
id
,
this
.
duration
),
this
.
animationParent
.
add
(
this
.
target
),
this
.
animationParent
.
add
(
this
.
object
);
if
(
this
.
createDebugPath
){
var
a
=
this
.
debugPath
,
b
=
this
.
spline
,
e
=
g
(
b
,
10
),
c
=
g
(
b
,
10
),
h
=
new
THREE
.
LineBasicMaterial
({
color
:
16711680
,
linewidth
:
3
}),
e
=
new
THREE
.
Line
(
e
,
h
),
c
=
new
THREE
.
ParticleSystem
(
c
,
new
THREE
.
ParticleBasicMaterial
({
color
:
16755200
,
size
:
3
}));
e
.
scale
.
set
(
1
,
1
,
1
);
a
.
add
(
e
);
c
.
scale
.
set
(
1
,
1
,
1
);
a
.
add
(
c
);
for
(
var
e
=
new
THREE
.
SphereGeometry
(
1
,
16
,
8
),
h
=
new
THREE
.
MeshBasicMaterial
({
color
:
65280
}),
n
=
0
;
n
<
b
.
points
.
length
;
n
++
)
c
=
new
THREE
.
Mesh
(
e
,
h
),
c
.
position
.
copy
(
b
.
points
[
n
]),
a
.
add
(
c
)}
this
.
domElement
.
addEventListener
(
"
mousemove
"
,
d
(
this
,
this
.
onMouseMove
),
!
1
)}};
THREE
.
PathControlsIdCounter
=
0
;
THREE
.
FlyControls
=
function
(
a
,
c
){
function
b
(
a
,
b
){
return
function
(){
b
.
apply
(
a
,
arguments
)}}
this
.
object
=
a
;
this
.
domElement
=
c
!==
void
0
?
c
:
document
;
c
&&
this
.
domElement
.
setAttribute
(
"
tabindex
"
,
-
1
);
this
.
movementSpeed
=
1
;
this
.
rollSpeed
=
0.005
0
;
this
.
autoForward
=
this
.
dragToLook
=!
1
;
this
.
object
.
useQuaternion
=!
0
;
this
.
tmpQuaternion
=
new
THREE
.
Quaternion
;
this
.
mouseStatus
=
0
;
this
.
moveState
=
{
up
:
0
,
down
:
0
,
left
:
0
,
right
:
0
,
forward
:
0
,
back
:
0
,
pitchUp
:
0
,
pitchDown
:
0
,
yawLeft
:
0
,
yawRight
:
0
,
rollLeft
:
0
,
rollRight
:
0
};
this
.
moveVector
=
new
THREE
.
Vector3
(
0
,
THREE
.
FlyControls
=
function
(
a
,
c
){
function
b
(
a
,
b
){
return
function
(){
b
.
apply
(
a
,
arguments
)}}
this
.
object
=
a
;
this
.
domElement
=
c
!==
void
0
?
c
:
document
;
c
&&
this
.
domElement
.
setAttribute
(
"
tabindex
"
,
-
1
);
this
.
movementSpeed
=
1
;
this
.
rollSpeed
=
0.005
;
this
.
autoForward
=
this
.
dragToLook
=!
1
;
this
.
object
.
useQuaternion
=!
0
;
this
.
tmpQuaternion
=
new
THREE
.
Quaternion
;
this
.
mouseStatus
=
0
;
this
.
moveState
=
{
up
:
0
,
down
:
0
,
left
:
0
,
right
:
0
,
forward
:
0
,
back
:
0
,
pitchUp
:
0
,
pitchDown
:
0
,
yawLeft
:
0
,
yawRight
:
0
,
rollLeft
:
0
,
rollRight
:
0
};
this
.
moveVector
=
new
THREE
.
Vector3
(
0
,
0
,
0
);
this
.
rotationVector
=
new
THREE
.
Vector3
(
0
,
0
,
0
);
this
.
handleEvent
=
function
(
a
){
if
(
typeof
this
[
a
.
type
]
==
"
function
"
)
this
[
a
.
type
](
a
)};
this
.
keydown
=
function
(
a
){
if
(
!
a
.
altKey
){
switch
(
a
.
keyCode
){
case
16
:
this
.
movementSpeedMultiplier
=
0.1
;
break
;
case
87
:
this
.
moveState
.
forward
=
1
;
break
;
case
83
:
this
.
moveState
.
back
=
1
;
break
;
case
65
:
this
.
moveState
.
left
=
1
;
break
;
case
68
:
this
.
moveState
.
right
=
1
;
break
;
case
82
:
this
.
moveState
.
up
=
1
;
break
;
case
70
:
this
.
moveState
.
down
=
1
;
break
;
case
38
:
this
.
moveState
.
pitchUp
=
1
;
break
;
case
40
:
this
.
moveState
.
pitchDown
=
1
;
break
;
case
37
:
this
.
moveState
.
yawLeft
=
1
;
break
;
case
39
:
this
.
moveState
.
yawRight
=
1
;
break
;
case
81
:
this
.
moveState
.
rollLeft
=
1
;
break
;
case
69
:
this
.
moveState
.
rollRight
=
1
}
this
.
updateMovementVector
();
this
.
updateRotationVector
()}};
this
.
keyup
=
function
(
a
){
switch
(
a
.
keyCode
){
case
16
:
this
.
movementSpeedMultiplier
=
1
;
break
;
case
87
:
this
.
moveState
.
forward
=
0
;
break
;
case
83
:
this
.
moveState
.
back
=
0
;
break
;
case
65
:
this
.
moveState
.
left
=
0
;
break
;
case
68
:
this
.
moveState
.
right
=
0
;
break
;
case
82
:
this
.
moveState
.
up
=
0
;
break
;
case
70
:
this
.
moveState
.
down
=
0
;
break
;
case
38
:
this
.
moveState
.
pitchUp
=
0
;
break
;
case
40
:
this
.
moveState
.
pitchDown
=
0
;
break
;
case
37
:
this
.
moveState
.
yawLeft
=
0
;
break
;
case
39
:
this
.
moveState
.
yawRight
=
0
;
break
;
case
81
:
this
.
moveState
.
rollLeft
=
0
;
break
;
case
69
:
this
.
moveState
.
rollRight
=
0
}
this
.
updateMovementVector
();
this
.
updateRotationVector
()};
this
.
mousedown
=
function
(
a
){
this
.
domElement
!==
document
&&
this
.
domElement
.
focus
();
a
.
preventDefault
();
a
.
stopPropagation
();
if
(
this
.
dragToLook
)
this
.
mouseStatus
++
;
else
switch
(
a
.
button
){
case
0
:
this
.
object
.
moveForward
=
...
...
@@ -157,7 +157,7 @@ THREE.ExtrudeGeometry.__v3=new THREE.Vector2;THREE.ExtrudeGeometry.__v4=new THRE
THREE
.
IcosahedronGeometry
=
function
(
a
){
function
c
(
a
,
b
,
c
){
var
d
=
Math
.
sqrt
(
a
*
a
+
b
*
b
+
c
*
c
);
return
f
.
vertices
.
push
(
new
THREE
.
Vertex
(
new
THREE
.
Vector3
(
a
/
d
,
b
/
d
,
c
/
d
)))
-
1
}
function
b
(
a
,
b
,
c
,
d
){
d
.
faces
.
push
(
new
THREE
.
Face3
(
a
,
b
,
c
))}
function
d
(
a
,
b
){
var
d
=
f
.
vertices
[
a
].
position
,
e
=
f
.
vertices
[
b
].
position
;
return
c
((
d
.
x
+
e
.
x
)
/
2
,(
d
.
y
+
e
.
y
)
/
2
,(
d
.
z
+
e
.
z
)
/
2
)}
var
f
=
this
,
g
=
new
THREE
.
Geometry
;
this
.
subdivisions
=
a
||
0
;
THREE
.
Geometry
.
call
(
this
);
a
=
(
1
+
Math
.
sqrt
(
5
))
/
2
;
c
(
-
1
,
a
,
0
);
c
(
1
,
a
,
0
);
c
(
-
1
,
-
a
,
0
);
c
(
1
,
-
a
,
0
);
c
(
0
,
-
1
,
a
);
c
(
0
,
1
,
a
);
c
(
0
,
-
1
,
-
a
);
c
(
0
,
1
,
-
a
);
c
(
a
,
0
,
-
1
);
c
(
a
,
0
,
1
);
c
(
-
a
,
0
,
-
1
);
c
(
-
a
,
0
,
1
);
b
(
0
,
11
,
5
,
g
);
b
(
0
,
5
,
1
,
g
);
b
(
0
,
1
,
7
,
g
);
b
(
0
,
7
,
10
,
g
);
b
(
0
,
10
,
11
,
g
);
b
(
1
,
5
,
9
,
g
);
b
(
5
,
11
,
4
,
g
);
b
(
11
,
10
,
2
,
g
);
b
(
10
,
7
,
6
,
g
);
b
(
7
,
1
,
8
,
g
);
b
(
3
,
9
,
4
,
g
);
b
(
3
,
4
,
2
,
g
);
b
(
3
,
2
,
6
,
g
);
b
(
3
,
6
,
8
,
g
);
b
(
3
,
8
,
9
,
g
);
b
(
4
,
9
,
5
,
g
);
b
(
2
,
4
,
11
,
g
);
b
(
6
,
2
,
10
,
g
);
b
(
8
,
6
,
7
,
g
);
b
(
9
,
8
,
1
,
g
);
for
(
var
e
=
0
;
e
<
this
.
subdivisions
;
e
++
){
var
a
=
new
THREE
.
Geometry
,
h
;
for
(
h
in
g
.
faces
){
var
i
=
d
(
g
.
faces
[
h
].
a
,
g
.
faces
[
h
].
b
),
j
=
d
(
g
.
faces
[
h
].
b
,
g
.
faces
[
h
].
c
),
k
=
d
(
g
.
faces
[
h
].
c
,
g
.
faces
[
h
].
a
);
b
(
g
.
faces
[
h
].
a
,
i
,
k
,
a
);
b
(
g
.
faces
[
h
].
b
,
j
,
i
,
a
);
b
(
g
.
faces
[
h
].
c
,
k
,
j
,
a
);
b
(
i
,
j
,
k
,
a
)}
g
.
faces
=
a
.
faces
}
f
.
faces
=
g
.
faces
;
this
.
computeCentroids
();
this
.
computeFaceNormals
();
this
.
computeVertexNormals
()};
THREE
.
IcosahedronGeometry
.
prototype
=
new
THREE
.
Geometry
;
THREE
.
IcosahedronGeometry
.
prototype
.
constructor
=
THREE
.
IcosahedronGeometry
;
THREE
.
LatheGeometry
=
function
(
a
,
c
,
b
){
THREE
.
Geometry
.
call
(
this
);
this
.
steps
=
c
||
12
;
this
.
angle
=
b
||
2
*
Math
.
PI
;
for
(
var
c
=
this
.
angle
/
this
.
steps
,
b
=
[],
d
=
[],
f
=
[],
g
=
[],
e
=
(
new
THREE
.
Matrix4
).
setRotationZ
(
c
),
h
=
0
;
h
<
a
.
length
;
h
++
)
this
.
vertices
.
push
(
new
THREE
.
Vertex
(
a
[
h
])),
b
[
h
]
=
a
[
h
].
clone
(),
d
[
h
]
=
this
.
vertices
.
length
-
1
;
for
(
var
i
=
0
;
i
<=
this
.
angle
+
0.001
0
;
i
+=
c
){
for
(
h
=
0
;
h
<
b
.
length
;
h
++
)
i
<
this
.
angle
?(
b
[
h
]
=
e
.
multiplyVector3
(
b
[
h
].
clone
()),
this
.
vertices
.
push
(
new
THREE
.
Vertex
(
b
[
h
])),
f
[
h
]
=
this
.
vertices
.
length
-
1
):
f
=
g
;
i
==
0
&&
(
g
=
d
);
THREE
.
LatheGeometry
=
function
(
a
,
c
,
b
){
THREE
.
Geometry
.
call
(
this
);
this
.
steps
=
c
||
12
;
this
.
angle
=
b
||
2
*
Math
.
PI
;
for
(
var
c
=
this
.
angle
/
this
.
steps
,
b
=
[],
d
=
[],
f
=
[],
g
=
[],
e
=
(
new
THREE
.
Matrix4
).
setRotationZ
(
c
),
h
=
0
;
h
<
a
.
length
;
h
++
)
this
.
vertices
.
push
(
new
THREE
.
Vertex
(
a
[
h
])),
b
[
h
]
=
a
[
h
].
clone
(),
d
[
h
]
=
this
.
vertices
.
length
-
1
;
for
(
var
i
=
0
;
i
<=
this
.
angle
+
0.001
;
i
+=
c
){
for
(
h
=
0
;
h
<
b
.
length
;
h
++
)
i
<
this
.
angle
?(
b
[
h
]
=
e
.
multiplyVector3
(
b
[
h
].
clone
()),
this
.
vertices
.
push
(
new
THREE
.
Vertex
(
b
[
h
])),
f
[
h
]
=
this
.
vertices
.
length
-
1
):
f
=
g
;
i
==
0
&&
(
g
=
d
);
for
(
h
=
0
;
h
<
d
.
length
-
1
;
h
++
)
this
.
faces
.
push
(
new
THREE
.
Face4
(
f
[
h
],
f
[
h
+
1
],
d
[
h
+
1
],
d
[
h
])),
this
.
faceVertexUvs
[
0
].
push
([
new
THREE
.
UV
(
1
-
i
/
this
.
angle
,
h
/
a
.
length
),
new
THREE
.
UV
(
1
-
i
/
this
.
angle
,(
h
+
1
)
/
a
.
length
),
new
THREE
.
UV
(
1
-
(
i
-
c
)
/
this
.
angle
,(
h
+
1
)
/
a
.
length
),
new
THREE
.
UV
(
1
-
(
i
-
c
)
/
this
.
angle
,
h
/
a
.
length
)]);
d
=
f
;
f
=
[]}
this
.
computeCentroids
();
this
.
computeFaceNormals
();
this
.
computeVertexNormals
()};
THREE
.
LatheGeometry
.
prototype
=
new
THREE
.
Geometry
;
THREE
.
LatheGeometry
.
prototype
.
constructor
=
THREE
.
LatheGeometry
;
THREE
.
OctahedronGeometry
=
function
(
a
,
c
){
function
b
(
b
){
var
c
=
b
.
clone
().
normalize
(),
c
=
new
THREE
.
Vertex
(
c
.
clone
().
multiplyScalar
(
a
));
c
.
index
=
e
.
vertices
.
push
(
c
)
-
1
;
c
.
uv
=
new
THREE
.
UV
(
Math
.
atan2
(
b
.
z
,
-
b
.
x
)
/
2
/
Math
.
PI
+
0.5
,
Math
.
atan2
(
-
b
.
y
,
Math
.
sqrt
(
b
.
x
*
b
.
x
+
b
.
z
*
b
.
z
))
/
Math
.
PI
+
0.5
);
return
c
}
function
d
(
a
,
b
,
c
,
h
){
h
<
1
?(
h
=
new
THREE
.
Face3
(
a
.
index
,
b
.
index
,
c
.
index
,[
a
.
position
,
b
.
position
,
c
.
position
]),
h
.
centroid
.
addSelf
(
a
.
position
).
addSelf
(
b
.
position
).
addSelf
(
c
.
position
).
divideScalar
(
3
),
h
.
normal
=
h
.
centroid
.
clone
().
normalize
(),
e
.
faces
.
push
(
h
),
h
=
Math
.
atan2
(
h
.
centroid
.
z
,
-
h
.
centroid
.
x
),
e
.
faceVertexUvs
[
0
].
push
([
g
(
a
.
uv
,
a
.
position
,
h
),
g
(
b
.
uv
,
b
.
position
,
h
),
g
(
c
.
uv
,
c
.
position
,
h
)])):(
h
-=
1
,
d
(
a
,
f
(
a
,
b
),
f
(
a
,
c
),
h
),
d
(
f
(
a
,
b
),
b
,
f
(
b
,
c
),
h
),
d
(
f
(
a
,
c
),
f
(
b
,
c
),
c
,
h
),
d
(
f
(
a
,
b
),
f
(
b
,
c
),
f
(
a
,
c
),
h
))}
function
f
(
a
,
c
){
h
[
a
.
index
]
||
(
h
[
a
.
index
]
=
[]);
h
[
c
.
index
]
||
(
h
[
c
.
index
]
=
[]);
var
d
=
h
[
a
.
index
][
c
.
index
];
d
===
void
0
&&
(
h
[
a
.
index
][
c
.
index
]
=
h
[
c
.
index
][
a
.
index
]
=
d
=
b
((
new
THREE
.
Vector3
).
add
(
a
.
position
,
c
.
position
).
divideScalar
(
2
)));
return
d
}
function
g
(
a
,
b
,
c
){
c
<
0
&&
a
.
u
===
...
...
build/custom/ThreeSVG.js
浏览文件 @
f4063649
此差异已折叠。
点击以展开。
build/custom/ThreeWebGL.js
浏览文件 @
f4063649
此差异已折叠。
点击以展开。
src/core/Ray.js
浏览文件 @
f4063649
...
...
@@ -39,6 +39,7 @@ THREE.Ray = function ( origin, direction ) {
var
direction
=
new
THREE
.
Vector3
();
var
vector
=
new
THREE
.
Vector3
();
var
normal
=
new
THREE
.
Vector3
();
var
intersectPoint
=
new
THREE
.
Vector3
()
this
.
intersectObject
=
function
(
object
)
{
...
...
@@ -88,8 +89,7 @@ THREE.Ray = function ( origin, direction ) {
var
f
,
fl
,
face
,
dot
,
scalar
,
geometry
=
object
.
geometry
,
vertices
=
geometry
.
vertices
,
objMatrix
,
intersectPoint
=
new
THREE
.
Vector3
();
objMatrix
;
object
.
matrixRotationWorld
.
extractRotation
(
object
.
matrixWorld
);
...
...
@@ -97,8 +97,8 @@ THREE.Ray = function ( origin, direction ) {
face
=
geometry
.
faces
[
f
];
origin
=
origin
.
copy
(
this
.
origin
);
direction
=
direction
.
copy
(
this
.
direction
);
origin
.
copy
(
this
.
origin
);
direction
.
copy
(
this
.
direction
);
objMatrix
=
object
.
matrixWorld
;
...
...
@@ -175,12 +175,12 @@ THREE.Ray = function ( origin, direction ) {
function
distanceFromIntersection
(
origin
,
direction
,
position
)
{
v0
=
v0
.
copy
(
position
).
subSelf
(
origin
);
v0
.
sub
(
position
,
origin
);
dot
=
v0
.
dot
(
direction
);
if
(
dot
<=
0
)
return
null
;
// check if position behind origin.
intersect
=
v1
.
copy
(
origin
).
addSelf
(
v2
.
copy
(
direction
).
multiplyScalar
(
dot
)
);
intersect
=
v1
.
add
(
origin
,
v2
.
copy
(
direction
).
multiplyScalar
(
dot
)
);
distance
=
position
.
distanceTo
(
intersect
);
return
distance
;
...
...
@@ -193,9 +193,9 @@ THREE.Ray = function ( origin, direction ) {
function
pointInFace3
(
p
,
a
,
b
,
c
)
{
v0
.
copy
(
c
).
subSelf
(
a
);
v1
.
copy
(
b
).
subSelf
(
a
);
v2
.
copy
(
p
).
subSelf
(
a
);
v0
.
sub
(
c
,
a
);
v1
.
sub
(
b
,
a
);
v2
.
sub
(
p
,
a
);
dot00
=
v0
.
dot
(
v0
);
dot01
=
v0
.
dot
(
v1
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录