Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
车家大少爷
three.js
提交
920ebceb
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,发现更多精彩内容 >>
提交
920ebceb
编写于
7月 05, 2011
作者:
M
Mr.doob
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Updated builds.
上级
5673a074
变更
2
展开全部
隐藏空白更改
内联
并排
Showing
2 changed file
with
141 addition
and
141 deletion
+141
-141
build/Three.js
build/Three.js
+4
-4
build/custom/ThreeExtras.js
build/custom/ThreeExtras.js
+137
-137
未找到文件。
build/Three.js
浏览文件 @
920ebceb
...
...
@@ -549,10 +549,10 @@ THREE.MeshCollider=function(b,c){this.mesh=b;this.box=c;this.numFaces=this.mesh.
THREE
.
CollisionSystem
.
prototype
.
rayCastAll
=
function
(
b
){
b
.
direction
.
normalize
();
this
.
hits
.
length
=
0
;
var
c
,
e
,
f
,
g
,
k
=
0
;
c
=
0
;
for
(
e
=
this
.
colliders
.
length
;
c
<
e
;
c
++
)
if
(
g
=
this
.
colliders
[
c
],
f
=
this
.
rayCast
(
b
,
g
),
f
<
Number
.
MAX_VALUE
)
g
.
distance
=
f
,
f
>
k
?
this
.
hits
.
push
(
g
):
this
.
hits
.
unshift
(
g
),
k
=
f
;
return
this
.
hits
};
THREE
.
CollisionSystem
.
prototype
.
rayCastNearest
=
function
(
b
){
var
c
=
this
.
rayCastAll
(
b
);
if
(
c
.
length
==
0
)
return
null
;
for
(
var
e
=
0
;
c
[
e
]
instanceof
THREE
.
MeshCollider
;){
var
f
=
this
.
rayMesh
(
b
,
c
[
e
]);
if
(
f
.
dist
<
Number
.
MAX_VALUE
){
c
[
e
].
distance
=
f
.
dist
;
c
[
e
].
faceIndex
=
f
.
faceIndex
;
break
}
e
++
}
if
(
e
>
c
.
length
)
return
null
;
return
c
[
e
]};
THREE
.
CollisionSystem
.
prototype
.
rayCast
=
function
(
b
,
c
){
if
(
c
instanceof
THREE
.
PlaneCollider
)
return
this
.
rayPlane
(
b
,
c
);
else
if
(
c
instanceof
THREE
.
SphereCollider
)
return
this
.
raySphere
(
b
,
c
);
else
if
(
c
instanceof
THREE
.
BoxCollider
)
return
this
.
rayBox
(
b
,
c
);
else
if
(
c
instanceof
THREE
.
MeshCollider
&&
c
.
box
)
return
this
.
rayBox
(
b
,
c
.
box
)};
THREE
.
CollisionSystem
.
prototype
.
rayMesh
=
function
(
b
,
c
){
for
(
var
e
=
this
.
makeRayLocal
(
b
,
c
.
mesh
),
f
=
Number
.
MAX_VALUE
,
g
,
k
=
0
;
k
<
c
.
numFaces
;
k
++
){
var
h
=
c
.
mesh
.
geometry
.
faces
[
k
],
m
=
c
.
mesh
.
geometry
.
vertices
[
h
.
a
].
position
,
n
=
c
.
mesh
.
geometry
.
vertices
[
h
.
b
].
position
,
o
=
c
.
mesh
.
geometry
.
vertices
[
h
.
c
].
position
,
p
=
h
instanceof
THREE
.
Face4
?
c
.
mesh
.
geometry
.
vertices
[
h
.
d
].
position
:
null
;
h
instanceof
THREE
.
Face3
?(
h
=
this
.
rayTriangle
(
e
,
m
,
n
,
o
,
f
,
this
.
collisionNormal
,
c
.
mesh
.
doubleSided
),
h
<
f
&&
(
f
=
h
,
g
=
k
,
c
.
normal
.
copy
(
this
.
collisionNormal
),
c
.
normal
.
normalize
())):
h
instanceof
THREE
.
Face4
&&
(
h
=
this
.
rayTriangle
(
e
,
m
,
n
,
p
,
f
,
this
.
collisionNormal
,
c
.
mesh
.
doubleSided
),
h
<
f
&&
(
f
=
h
,
g
=
k
,
c
.
normal
.
copy
(
this
.
collisionNormal
),
c
.
normal
.
normalize
()),
h
=
this
.
rayTriangle
(
e
,
n
,
o
,
p
,
f
,
this
.
collisionNormal
,
c
.
mesh
.
doubleSided
),
h
<
f
&&
(
f
=
h
,
g
=
k
,
c
.
normal
.
copy
(
this
.
collisionNormal
),
c
.
normal
.
normalize
()))}
return
{
dist
:
f
,
faceIndex
:
g
}};
THREE
.
CollisionSystem
.
prototype
.
rayTriangle
=
function
(
b
,
c
,
e
,
f
,
g
,
k
,
h
){
var
m
=
THREE
.
CollisionSystem
.
__v1
,
n
=
THREE
.
CollisionSystem
.
__v2
;
k
.
set
(
0
,
0
,
0
);
m
.
sub
(
e
,
c
);
n
.
sub
(
f
,
e
);
k
.
cross
(
m
,
n
);
m
=
k
.
dot
(
b
.
direction
);
if
(
!
(
m
<
0
))
if
(
h
)
k
.
multiplyScalar
(
-
1
),
m
*=-
1
;
else
return
Number
.
MAX_VALUE
;
h
=
k
.
dot
(
c
)
-
k
.
dot
(
b
.
origin
);
if
(
!
(
h
<=
0
))
return
Number
.
MAX_VALUE
;
if
(
!
(
h
>=
m
*
g
))
return
Number
.
MAX_VALUE
;
h
/=
m
;
m
=
THREE
.
CollisionSystem
.
__v3
;
m
.
copy
(
b
.
direction
);
m
.
multiplyScalar
(
h
);
m
.
addSelf
(
b
.
origin
);
Math
.
abs
(
k
.
x
)
>
Math
.
abs
(
k
.
y
)?
Math
.
abs
(
k
.
x
)
>
Math
.
abs
(
k
.
z
)?(
b
=
m
.
y
-
c
.
y
,
k
=
e
.
y
-
c
.
y
,
g
=
f
.
y
-
c
.
y
,
m
=
m
.
z
-
c
.
z
,
e
=
e
.
z
-
c
.
z
,
f
=
f
.
z
-
c
.
z
):(
b
=
m
.
x
-
c
.
x
,
k
=
e
.
x
-
c
.
x
,
g
=
f
.
x
-
c
.
x
,
m
=
m
.
y
-
c
.
y
,
e
=
e
.
y
-
c
.
y
,
f
=
f
.
y
-
c
.
y
):
Math
.
abs
(
k
.
y
)
>
Math
.
abs
(
k
.
z
)?(
b
=
m
.
x
-
c
.
x
,
k
=
e
.
x
-
c
.
x
,
g
=
f
.
x
-
c
.
x
,
m
=
m
.
z
-
c
.
z
,
e
=
e
.
z
-
c
.
z
,
f
=
f
.
z
-
c
.
z
):(
b
=
m
.
x
-
c
.
x
,
k
=
e
.
x
-
c
.
x
,
g
=
f
.
x
-
c
.
x
,
m
=
m
.
y
-
c
.
y
,
e
=
e
.
y
-
c
.
y
,
f
=
f
.
y
-
c
.
y
);
c
=
k
*
f
-
e
*
g
;
if
(
c
==
0
)
return
Number
.
MAX_VALUE
;
c
=
1
/
c
;
f
=
(
b
*
f
-
m
*
g
)
*
c
;
if
(
!
(
f
>=
0
))
return
Number
.
MAX_VALUE
;
c
*=
k
*
m
-
e
*
b
;
if
(
!
(
c
>=
0
))
return
Number
.
MAX_VALUE
;
if
(
!
(
1
-
f
-
c
>=
0
))
return
Number
.
MAX_VALUE
;
return
h
};
THREE
.
CollisionSystem
.
prototype
.
rayMesh
=
function
(
b
,
c
){
for
(
var
e
=
this
.
makeRayLocal
(
b
,
c
.
mesh
),
f
=
Number
.
MAX_VALUE
,
g
,
k
=
0
;
k
<
c
.
numFaces
;
k
++
){
var
h
=
c
.
mesh
.
geometry
.
faces
[
k
],
m
=
c
.
mesh
.
geometry
.
vertices
[
h
.
a
].
position
,
n
=
c
.
mesh
.
geometry
.
vertices
[
h
.
b
].
position
,
o
=
c
.
mesh
.
geometry
.
vertices
[
h
.
c
].
position
,
p
=
h
instanceof
THREE
.
Face4
?
c
.
mesh
.
geometry
.
vertices
[
h
.
d
].
position
:
null
;
h
instanceof
THREE
.
Face3
?(
h
=
this
.
rayTriangle
(
e
,
m
,
n
,
o
,
f
,
this
.
collisionNormal
,
c
.
mesh
),
h
<
f
&&
(
f
=
h
,
g
=
k
,
c
.
normal
.
copy
(
this
.
collisionNormal
),
c
.
normal
.
normalize
())):
h
instanceof
THREE
.
Face4
&&
(
h
=
this
.
rayTriangle
(
e
,
m
,
n
,
p
,
f
,
this
.
collisionNormal
,
c
.
mesh
),
h
<
f
&&
(
f
=
h
,
g
=
k
,
c
.
normal
.
copy
(
this
.
collisionNormal
),
c
.
normal
.
normalize
()),
h
=
this
.
rayTriangle
(
e
,
n
,
o
,
p
,
f
,
this
.
collisionNormal
,
c
.
mesh
),
h
<
f
&&
(
f
=
h
,
g
=
k
,
c
.
normal
.
copy
(
this
.
collisionNormal
),
c
.
normal
.
normalize
()))}
return
{
dist
:
f
,
faceIndex
:
g
}};
THREE
.
CollisionSystem
.
prototype
.
rayTriangle
=
function
(
b
,
c
,
e
,
f
,
g
,
k
,
h
){
var
m
=
THREE
.
CollisionSystem
.
__v1
,
n
=
THREE
.
CollisionSystem
.
__v2
;
k
.
set
(
0
,
0
,
0
);
m
.
sub
(
e
,
c
);
n
.
sub
(
f
,
e
);
k
.
cross
(
m
,
n
);
m
=
k
.
dot
(
b
.
direction
);
if
(
!
(
m
<
0
))
if
(
h
.
doubleSided
||
h
.
flipSided
)
k
.
multiplyScalar
(
-
1
),
m
*=-
1
;
else
return
Number
.
MAX_VALUE
;
h
=
k
.
dot
(
c
)
-
k
.
dot
(
b
.
origin
);
if
(
!
(
h
<=
0
))
return
Number
.
MAX_VALUE
;
if
(
!
(
h
>=
m
*
g
))
return
Number
.
MAX_VALUE
;
h
/=
m
;
m
=
THREE
.
CollisionSystem
.
__v3
;
m
.
copy
(
b
.
direction
);
m
.
multiplyScalar
(
h
);
m
.
addSelf
(
b
.
origin
);
Math
.
abs
(
k
.
x
)
>
Math
.
abs
(
k
.
y
)?
Math
.
abs
(
k
.
x
)
>
Math
.
abs
(
k
.
z
)?(
b
=
m
.
y
-
c
.
y
,
k
=
e
.
y
-
c
.
y
,
g
=
f
.
y
-
c
.
y
,
m
=
m
.
z
-
c
.
z
,
e
=
e
.
z
-
c
.
z
,
f
=
f
.
z
-
c
.
z
):(
b
=
m
.
x
-
c
.
x
,
k
=
e
.
x
-
c
.
x
,
g
=
f
.
x
-
c
.
x
,
m
=
m
.
y
-
c
.
y
,
e
=
e
.
y
-
c
.
y
,
f
=
f
.
y
-
c
.
y
):
Math
.
abs
(
k
.
y
)
>
Math
.
abs
(
k
.
z
)?(
b
=
m
.
x
-
c
.
x
,
k
=
e
.
x
-
c
.
x
,
g
=
f
.
x
-
c
.
x
,
m
=
m
.
z
-
c
.
z
,
e
=
e
.
z
-
c
.
z
,
f
=
f
.
z
-
c
.
z
):(
b
=
m
.
x
-
c
.
x
,
k
=
e
.
x
-
c
.
x
,
g
=
f
.
x
-
c
.
x
,
m
=
m
.
y
-
c
.
y
,
e
=
e
.
y
-
c
.
y
,
f
=
f
.
y
-
c
.
y
);
c
=
k
*
f
-
e
*
g
;
if
(
c
==
0
)
return
Number
.
MAX_VALUE
;
c
=
1
/
c
;
f
=
(
b
*
f
-
m
*
g
)
*
c
;
if
(
!
(
f
>=
0
))
return
Number
.
MAX_VALUE
;
c
*=
k
*
m
-
e
*
b
;
if
(
!
(
c
>=
0
))
return
Number
.
MAX_VALUE
;
if
(
!
(
1
-
f
-
c
>=
0
))
return
Number
.
MAX_VALUE
;
return
h
};
THREE
.
CollisionSystem
.
prototype
.
makeRayLocal
=
function
(
b
,
c
){
var
e
=
THREE
.
CollisionSystem
.
__m
;
THREE
.
Matrix4
.
makeInvert
(
c
.
matrixWorld
,
e
);
var
f
=
THREE
.
CollisionSystem
.
__r
;
f
.
origin
.
copy
(
b
.
origin
);
f
.
direction
.
copy
(
b
.
direction
);
e
.
multiplyVector3
(
f
.
origin
);
e
.
rotateAxis
(
f
.
direction
);
f
.
direction
.
normalize
();
return
f
};
THREE
.
CollisionSystem
.
prototype
.
rayBox
=
function
(
b
,
c
){
var
e
;
c
.
dynamic
&&
c
.
mesh
&&
c
.
mesh
.
matrixWorld
?
e
=
this
.
makeRayLocal
(
b
,
c
.
mesh
):(
e
=
THREE
.
CollisionSystem
.
__r
,
e
.
origin
.
copy
(
b
.
origin
),
e
.
direction
.
copy
(
b
.
direction
));
var
f
=
0
,
g
=
0
,
k
=
0
,
h
=
0
,
m
=
0
,
n
=
0
,
o
=!
0
;
e
.
origin
.
x
<
c
.
min
.
x
?(
f
=
c
.
min
.
x
-
e
.
origin
.
x
,
f
/=
e
.
direction
.
x
,
o
=!
1
,
h
=-
1
):
e
.
origin
.
x
>
c
.
max
.
x
&&
(
f
=
c
.
max
.
x
-
e
.
origin
.
x
,
f
/=
e
.
direction
.
x
,
o
=!
1
,
h
=
1
);
e
.
origin
.
y
<
c
.
min
.
y
?(
g
=
c
.
min
.
y
-
e
.
origin
.
y
,
g
/=
e
.
direction
.
y
,
o
=!
1
,
m
=-
1
):
e
.
origin
.
y
>
c
.
max
.
y
&&
(
g
=
c
.
max
.
y
-
e
.
origin
.
y
,
g
/=
e
.
direction
.
y
,
o
=!
1
,
m
=
1
);
e
.
origin
.
z
<
c
.
min
.
z
?(
k
=
c
.
min
.
z
-
e
.
origin
.
z
,
k
/=
e
.
direction
.
z
,
o
=!
1
,
n
=-
1
):
e
.
origin
.
z
>
c
.
max
.
z
&&
(
k
=
c
.
max
.
z
-
e
.
origin
.
z
,
k
/=
e
.
direction
.
z
,
o
=!
1
,
n
=
1
);
if
(
o
)
return
-
1
;
o
=
0
;
g
>
f
&&
(
o
=
1
,
f
=
g
);
k
>
f
&&
(
o
=
2
,
f
=
k
);
switch
(
o
){
case
0
:
m
=
e
.
origin
.
y
+
e
.
direction
.
y
*
f
;
if
(
m
<
c
.
min
.
y
||
m
>
c
.
max
.
y
)
return
Number
.
MAX_VALUE
;
e
=
e
.
origin
.
z
+
e
.
direction
.
z
*
f
;
if
(
e
<
c
.
min
.
z
||
e
>
c
.
max
.
z
)
return
Number
.
MAX_VALUE
;
c
.
normal
.
set
(
h
,
0
,
0
);
break
;
case
1
:
h
=
e
.
origin
.
x
+
e
.
direction
.
x
*
f
;
if
(
h
<
c
.
min
.
x
||
h
>
c
.
max
.
x
)
return
Number
.
MAX_VALUE
;
e
=
e
.
origin
.
z
+
e
.
direction
.
z
*
...
...
build/custom/ThreeExtras.js
浏览文件 @
920ebceb
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录