Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
53876c8d
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,发现更多精彩内容 >>
提交
53876c8d
编写于
7月 02, 2015
作者:
R
Ricardo Cabello
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #6768 from dubejf/raysq
Ray: Add distanceSqToPoint method
上级
51da9b99
399a7c74
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
42 addition
and
10 deletion
+42
-10
docs/api/math/Ray.html
docs/api/math/Ray.html
+8
-0
src/math/Ray.js
src/math/Ray.js
+9
-3
src/objects/PointCloud.js
src/objects/PointCloud.js
+4
-3
src/objects/Sprite.js
src/objects/Sprite.js
+5
-4
test/unit/math/Ray.js
test/unit/math/Ray.js
+16
-0
未找到文件。
docs/api/math/Ray.html
浏览文件 @
53876c8d
...
@@ -104,6 +104,14 @@
...
@@ -104,6 +104,14 @@
Get the distance of the closest approach between the [page:Ray] and the [page:Vector3].
Get the distance of the closest approach between the [page:Ray] and the [page:Vector3].
</div>
</div>
<h3>
[method:Float distanceSqToPoint]([page:Vector3 point])
</h3>
<div>
point -- [page:Vector3] The [page:Vector3] to compute a distance to.
</div>
<div>
Get the squared distance of the closest approach between the [page:Ray] and the [page:Vector3].
</div>
<h3>
[method:Boolean equals]([page:Ray ray])
</h3>
<h3>
[method:Boolean equals]([page:Ray ray])
</h3>
<div>
<div>
ray -- [page:Ray] The [page:Ray] to compare to.
ray -- [page:Ray] The [page:Ray] to compare to.
...
...
src/math/Ray.js
浏览文件 @
53876c8d
...
@@ -69,7 +69,13 @@ THREE.Ray.prototype = {
...
@@ -69,7 +69,13 @@ THREE.Ray.prototype = {
},
},
distanceToPoint
:
function
()
{
distanceToPoint
:
function
(
point
)
{
return
Math
.
sqrt
(
this
.
distanceSqToPoint
(
point
)
);
},
distanceSqToPoint
:
function
()
{
var
v1
=
new
THREE
.
Vector3
();
var
v1
=
new
THREE
.
Vector3
();
...
@@ -81,13 +87,13 @@ THREE.Ray.prototype = {
...
@@ -81,13 +87,13 @@ THREE.Ray.prototype = {
if
(
directionDistance
<
0
)
{
if
(
directionDistance
<
0
)
{
return
this
.
origin
.
distanceTo
(
point
);
return
this
.
origin
.
distanceTo
Squared
(
point
);
}
}
v1
.
copy
(
this
.
direction
).
multiplyScalar
(
directionDistance
).
add
(
this
.
origin
);
v1
.
copy
(
this
.
direction
).
multiplyScalar
(
directionDistance
).
add
(
this
.
origin
);
return
v1
.
distanceTo
(
point
);
return
v1
.
distanceTo
Squared
(
point
);
};
};
...
...
src/objects/PointCloud.js
浏览文件 @
53876c8d
...
@@ -41,13 +41,14 @@ THREE.PointCloud.prototype.raycast = ( function () {
...
@@ -41,13 +41,14 @@ THREE.PointCloud.prototype.raycast = ( function () {
}
}
var
localThreshold
=
threshold
/
(
(
this
.
scale
.
x
+
this
.
scale
.
y
+
this
.
scale
.
z
)
/
3
);
var
localThreshold
=
threshold
/
(
(
this
.
scale
.
x
+
this
.
scale
.
y
+
this
.
scale
.
z
)
/
3
);
var
localThresholdSq
=
localThreshold
*
localThreshold
;
var
position
=
new
THREE
.
Vector3
();
var
position
=
new
THREE
.
Vector3
();
var
testPoint
=
function
(
point
,
index
)
{
var
testPoint
=
function
(
point
,
index
)
{
var
rayPointDistance
=
ray
.
distance
ToPoint
(
point
);
var
rayPointDistance
Sq
=
ray
.
distanceSq
ToPoint
(
point
);
if
(
rayPointDistance
<
localThreshold
)
{
if
(
rayPointDistance
Sq
<
localThresholdSq
)
{
var
intersectPoint
=
ray
.
closestPointToPoint
(
point
);
var
intersectPoint
=
ray
.
closestPointToPoint
(
point
);
intersectPoint
.
applyMatrix4
(
object
.
matrixWorld
);
intersectPoint
.
applyMatrix4
(
object
.
matrixWorld
);
...
@@ -59,7 +60,7 @@ THREE.PointCloud.prototype.raycast = ( function () {
...
@@ -59,7 +60,7 @@ THREE.PointCloud.prototype.raycast = ( function () {
intersects
.
push
(
{
intersects
.
push
(
{
distance
:
distance
,
distance
:
distance
,
distanceToRay
:
rayPointDistance
,
distanceToRay
:
Math
.
sqrt
(
rayPointDistanceSq
)
,
point
:
intersectPoint
.
clone
(),
point
:
intersectPoint
.
clone
(),
index
:
index
,
index
:
index
,
face
:
null
,
face
:
null
,
...
...
src/objects/Sprite.js
浏览文件 @
53876c8d
...
@@ -38,9 +38,10 @@ THREE.Sprite.prototype.raycast = ( function () {
...
@@ -38,9 +38,10 @@ THREE.Sprite.prototype.raycast = ( function () {
matrixPosition
.
setFromMatrixPosition
(
this
.
matrixWorld
);
matrixPosition
.
setFromMatrixPosition
(
this
.
matrixWorld
);
var
distance
=
raycaster
.
ray
.
distanceToPoint
(
matrixPosition
);
var
distanceSq
=
raycaster
.
ray
.
distanceSqToPoint
(
matrixPosition
);
var
guessSizeSq
=
this
.
scale
.
x
*
this
.
scale
.
y
;
if
(
distance
>
this
.
scale
.
x
)
{
if
(
distanceSq
>
guessSizeSq
)
{
return
;
return
;
...
@@ -48,7 +49,7 @@ THREE.Sprite.prototype.raycast = ( function () {
...
@@ -48,7 +49,7 @@ THREE.Sprite.prototype.raycast = ( function () {
intersects
.
push
(
{
intersects
.
push
(
{
distance
:
distance
,
distance
:
Math
.
sqrt
(
distanceSq
)
,
point
:
this
.
position
,
point
:
this
.
position
,
face
:
null
,
face
:
null
,
object
:
this
object
:
this
...
...
test/unit/math/Ray.js
浏览文件 @
53876c8d
...
@@ -93,6 +93,22 @@ test( "distanceToPoint", function() {
...
@@ -93,6 +93,22 @@ test( "distanceToPoint", function() {
ok
(
d
===
0
,
"
Passed!
"
);
ok
(
d
===
0
,
"
Passed!
"
);
});
});
test
(
"
distanceSqToPoint
"
,
function
()
{
var
a
=
new
THREE
.
Ray
(
one3
.
clone
(),
new
THREE
.
Vector3
(
0
,
0
,
1
)
);
// behind the ray
var
b
=
a
.
distanceSqToPoint
(
zero3
);
ok
(
b
===
3
,
"
Passed!
"
);
// front of the ray
var
c
=
a
.
distanceSqToPoint
(
new
THREE
.
Vector3
(
0
,
0
,
50
)
);
ok
(
c
===
2
,
"
Passed!
"
);
// exactly on the ray
var
d
=
a
.
distanceSqToPoint
(
one3
);
ok
(
d
===
0
,
"
Passed!
"
);
});
test
(
"
isIntersectionSphere
"
,
function
()
{
test
(
"
isIntersectionSphere
"
,
function
()
{
var
a
=
new
THREE
.
Ray
(
one3
.
clone
(),
new
THREE
.
Vector3
(
0
,
0
,
1
)
);
var
a
=
new
THREE
.
Ray
(
one3
.
clone
(),
new
THREE
.
Vector3
(
0
,
0
,
1
)
);
var
b
=
new
THREE
.
Sphere
(
zero3
,
0.5
);
var
b
=
new
THREE
.
Sphere
(
zero3
,
0.5
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录