Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
e98f5783
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,发现更多精彩内容 >>
未验证
提交
e98f5783
编写于
3月 18, 2020
作者:
M
Mr.doob
提交者:
GitHub
3月 18, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #18911 from Mugen87/dev47
SelectionBox: Add support for OrthographicCamera.
上级
42c09065
80ff2d0f
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
188 addition
and
84 deletion
+188
-84
examples/js/interactive/SelectionBox.js
examples/js/interactive/SelectionBox.js
+94
-42
examples/jsm/interactive/SelectionBox.js
examples/jsm/interactive/SelectionBox.js
+94
-42
未找到文件。
examples/js/interactive/SelectionBox.js
浏览文件 @
e98f5783
...
...
@@ -16,6 +16,11 @@ THREE.SelectionBox = ( function () {
var
vecDownRight
=
new
THREE
.
Vector3
();
var
vecDownLeft
=
new
THREE
.
Vector3
();
var
vecFarTopLeft
=
new
THREE
.
Vector3
();
var
vecFarTopRight
=
new
THREE
.
Vector3
();
var
vecFarDownRight
=
new
THREE
.
Vector3
();
var
vecFarDownLeft
=
new
THREE
.
Vector3
();
var
vectemp1
=
new
THREE
.
Vector3
();
var
vectemp2
=
new
THREE
.
Vector3
();
var
vectemp3
=
new
THREE
.
Vector3
();
...
...
@@ -52,56 +57,103 @@ THREE.SelectionBox = ( function () {
this
.
camera
.
updateProjectionMatrix
();
this
.
camera
.
updateMatrixWorld
();
tmpPoint
.
copy
(
startPoint
);
tmpPoint
.
x
=
Math
.
min
(
startPoint
.
x
,
endPoint
.
x
);
tmpPoint
.
y
=
Math
.
max
(
startPoint
.
y
,
endPoint
.
y
);
endPoint
.
x
=
Math
.
max
(
startPoint
.
x
,
endPoint
.
x
);
endPoint
.
y
=
Math
.
min
(
startPoint
.
y
,
endPoint
.
y
);
vecNear
.
copy
(
this
.
camera
.
position
);
vecTopLeft
.
copy
(
tmpPoint
);
vecTopRight
.
set
(
endPoint
.
x
,
tmpPoint
.
y
,
0
);
vecDownRight
.
copy
(
endPoint
);
vecDownLeft
.
set
(
tmpPoint
.
x
,
endPoint
.
y
,
0
);
vecTopLeft
.
unproject
(
this
.
camera
);
vecTopRight
.
unproject
(
this
.
camera
);
vecDownRight
.
unproject
(
this
.
camera
);
vecDownLeft
.
unproject
(
this
.
camera
);
vectemp1
.
copy
(
vecTopLeft
).
sub
(
vecNear
);
vectemp2
.
copy
(
vecTopRight
).
sub
(
vecNear
);
vectemp3
.
copy
(
vecDownRight
).
sub
(
vecNear
);
vectemp1
.
normalize
();
vectemp2
.
normalize
();
vectemp3
.
normalize
();
vectemp1
.
multiplyScalar
(
this
.
deep
);
vectemp2
.
multiplyScalar
(
this
.
deep
);
vectemp3
.
multiplyScalar
(
this
.
deep
);
vectemp1
.
add
(
vecNear
);
vectemp2
.
add
(
vecNear
);
vectemp3
.
add
(
vecNear
);
var
planes
=
frustum
.
planes
;
planes
[
0
].
setFromCoplanarPoints
(
vecNear
,
vecTopLeft
,
vecTopRight
);
planes
[
1
].
setFromCoplanarPoints
(
vecNear
,
vecTopRight
,
vecDownRight
);
planes
[
2
].
setFromCoplanarPoints
(
vecDownRight
,
vecDownLeft
,
vecNear
);
planes
[
3
].
setFromCoplanarPoints
(
vecDownLeft
,
vecTopLeft
,
vecNear
);
planes
[
4
].
setFromCoplanarPoints
(
vecTopRight
,
vecDownRight
,
vecDownLeft
);
planes
[
5
].
setFromCoplanarPoints
(
vectemp3
,
vectemp2
,
vectemp1
);
planes
[
5
].
normal
.
multiplyScalar
(
-
1
);
if
(
this
.
camera
.
isPerspectiveCamera
)
{
tmpPoint
.
copy
(
startPoint
);
tmpPoint
.
x
=
Math
.
min
(
startPoint
.
x
,
endPoint
.
x
);
tmpPoint
.
y
=
Math
.
max
(
startPoint
.
y
,
endPoint
.
y
);
endPoint
.
x
=
Math
.
max
(
startPoint
.
x
,
endPoint
.
x
);
endPoint
.
y
=
Math
.
min
(
startPoint
.
y
,
endPoint
.
y
);
vecNear
.
copy
(
this
.
camera
.
position
);
vecTopLeft
.
copy
(
tmpPoint
);
vecTopRight
.
set
(
endPoint
.
x
,
tmpPoint
.
y
,
0
);
vecDownRight
.
copy
(
endPoint
);
vecDownLeft
.
set
(
tmpPoint
.
x
,
endPoint
.
y
,
0
);
vecTopLeft
.
unproject
(
this
.
camera
);
vecTopRight
.
unproject
(
this
.
camera
);
vecDownRight
.
unproject
(
this
.
camera
);
vecDownLeft
.
unproject
(
this
.
camera
);
vectemp1
.
copy
(
vecTopLeft
).
sub
(
vecNear
);
vectemp2
.
copy
(
vecTopRight
).
sub
(
vecNear
);
vectemp3
.
copy
(
vecDownRight
).
sub
(
vecNear
);
vectemp1
.
normalize
();
vectemp2
.
normalize
();
vectemp3
.
normalize
();
vectemp1
.
multiplyScalar
(
this
.
deep
);
vectemp2
.
multiplyScalar
(
this
.
deep
);
vectemp3
.
multiplyScalar
(
this
.
deep
);
vectemp1
.
add
(
vecNear
);
vectemp2
.
add
(
vecNear
);
vectemp3
.
add
(
vecNear
);
var
planes
=
frustum
.
planes
;
planes
[
0
].
setFromCoplanarPoints
(
vecNear
,
vecTopLeft
,
vecTopRight
);
planes
[
1
].
setFromCoplanarPoints
(
vecNear
,
vecTopRight
,
vecDownRight
);
planes
[
2
].
setFromCoplanarPoints
(
vecDownRight
,
vecDownLeft
,
vecNear
);
planes
[
3
].
setFromCoplanarPoints
(
vecDownLeft
,
vecTopLeft
,
vecNear
);
planes
[
4
].
setFromCoplanarPoints
(
vecTopRight
,
vecDownRight
,
vecDownLeft
);
planes
[
5
].
setFromCoplanarPoints
(
vectemp3
,
vectemp2
,
vectemp1
);
planes
[
5
].
normal
.
multiplyScalar
(
-
1
);
}
else
if
(
this
.
camera
.
isOrthographicCamera
)
{
if
(
startPoint
.
equals
(
endPoint
)
)
endPoint
.
addScalar
(
Number
.
EPSILON
);
// avoid invalid frustum
var
left
=
Math
.
min
(
startPoint
.
x
,
endPoint
.
x
);
var
top
=
Math
.
max
(
startPoint
.
y
,
endPoint
.
y
);
var
right
=
Math
.
max
(
startPoint
.
x
,
endPoint
.
x
);
var
down
=
Math
.
min
(
startPoint
.
y
,
endPoint
.
y
);
vecTopLeft
.
set
(
left
,
top
,
-
1
);
vecTopRight
.
set
(
right
,
top
,
-
1
);
vecDownRight
.
set
(
right
,
down
,
-
1
);
vecDownLeft
.
set
(
left
,
down
,
-
1
);
vecFarTopLeft
.
set
(
left
,
top
,
1
);
vecFarTopRight
.
set
(
right
,
top
,
1
);
vecFarDownRight
.
set
(
right
,
down
,
1
);
vecFarDownLeft
.
set
(
left
,
down
,
1
);
vecTopLeft
.
unproject
(
this
.
camera
);
vecTopRight
.
unproject
(
this
.
camera
);
vecDownRight
.
unproject
(
this
.
camera
);
vecDownLeft
.
unproject
(
this
.
camera
);
vecFarTopLeft
.
unproject
(
this
.
camera
);
vecFarTopRight
.
unproject
(
this
.
camera
);
vecFarDownRight
.
unproject
(
this
.
camera
);
vecFarDownLeft
.
unproject
(
this
.
camera
);
var
planes
=
frustum
.
planes
;
planes
[
0
].
setFromCoplanarPoints
(
vecTopLeft
,
vecFarTopLeft
,
vecFarTopRight
);
planes
[
1
].
setFromCoplanarPoints
(
vecTopRight
,
vecFarTopRight
,
vecFarDownRight
);
planes
[
2
].
setFromCoplanarPoints
(
vecFarDownRight
,
vecFarDownLeft
,
vecDownLeft
);
planes
[
3
].
setFromCoplanarPoints
(
vecFarDownLeft
,
vecFarTopLeft
,
vecTopLeft
);
planes
[
4
].
setFromCoplanarPoints
(
vecTopRight
,
vecDownRight
,
vecDownLeft
);
planes
[
5
].
setFromCoplanarPoints
(
vecFarDownRight
,
vecFarTopRight
,
vecFarTopLeft
);
planes
[
5
].
normal
.
multiplyScalar
(
-
1
);
}
else
{
console
.
error
(
'
THREE.SelectionBox: Unsupported camera type.
'
);
}
};
SelectionBox
.
prototype
.
searchChildInFrustum
=
function
(
frustum
,
object
)
{
if
(
object
.
isMesh
)
{
if
(
object
.
isMesh
||
object
.
isLine
||
object
.
isPoints
)
{
if
(
object
.
material
!==
undefined
)
{
object
.
geometry
.
computeBoundingSphere
();
if
(
object
.
geometry
.
boundingSphere
===
null
)
object
.
geometry
.
computeBoundingSphere
();
center
.
copy
(
object
.
geometry
.
boundingSphere
.
center
);
...
...
examples/jsm/interactive/SelectionBox.js
浏览文件 @
e98f5783
...
...
@@ -21,6 +21,11 @@ var SelectionBox = ( function () {
var
vecDownRight
=
new
Vector3
();
var
vecDownLeft
=
new
Vector3
();
var
vecFarTopLeft
=
new
Vector3
();
var
vecFarTopRight
=
new
Vector3
();
var
vecFarDownRight
=
new
Vector3
();
var
vecFarDownLeft
=
new
Vector3
();
var
vectemp1
=
new
Vector3
();
var
vectemp2
=
new
Vector3
();
var
vectemp3
=
new
Vector3
();
...
...
@@ -57,56 +62,103 @@ var SelectionBox = ( function () {
this
.
camera
.
updateProjectionMatrix
();
this
.
camera
.
updateMatrixWorld
();
tmpPoint
.
copy
(
startPoint
);
tmpPoint
.
x
=
Math
.
min
(
startPoint
.
x
,
endPoint
.
x
);
tmpPoint
.
y
=
Math
.
max
(
startPoint
.
y
,
endPoint
.
y
);
endPoint
.
x
=
Math
.
max
(
startPoint
.
x
,
endPoint
.
x
);
endPoint
.
y
=
Math
.
min
(
startPoint
.
y
,
endPoint
.
y
);
vecNear
.
copy
(
this
.
camera
.
position
);
vecTopLeft
.
copy
(
tmpPoint
);
vecTopRight
.
set
(
endPoint
.
x
,
tmpPoint
.
y
,
0
);
vecDownRight
.
copy
(
endPoint
);
vecDownLeft
.
set
(
tmpPoint
.
x
,
endPoint
.
y
,
0
);
vecTopLeft
.
unproject
(
this
.
camera
);
vecTopRight
.
unproject
(
this
.
camera
);
vecDownRight
.
unproject
(
this
.
camera
);
vecDownLeft
.
unproject
(
this
.
camera
);
vectemp1
.
copy
(
vecTopLeft
).
sub
(
vecNear
);
vectemp2
.
copy
(
vecTopRight
).
sub
(
vecNear
);
vectemp3
.
copy
(
vecDownRight
).
sub
(
vecNear
);
vectemp1
.
normalize
();
vectemp2
.
normalize
();
vectemp3
.
normalize
();
vectemp1
.
multiplyScalar
(
this
.
deep
);
vectemp2
.
multiplyScalar
(
this
.
deep
);
vectemp3
.
multiplyScalar
(
this
.
deep
);
vectemp1
.
add
(
vecNear
);
vectemp2
.
add
(
vecNear
);
vectemp3
.
add
(
vecNear
);
var
planes
=
frustum
.
planes
;
planes
[
0
].
setFromCoplanarPoints
(
vecNear
,
vecTopLeft
,
vecTopRight
);
planes
[
1
].
setFromCoplanarPoints
(
vecNear
,
vecTopRight
,
vecDownRight
);
planes
[
2
].
setFromCoplanarPoints
(
vecDownRight
,
vecDownLeft
,
vecNear
);
planes
[
3
].
setFromCoplanarPoints
(
vecDownLeft
,
vecTopLeft
,
vecNear
);
planes
[
4
].
setFromCoplanarPoints
(
vecTopRight
,
vecDownRight
,
vecDownLeft
);
planes
[
5
].
setFromCoplanarPoints
(
vectemp3
,
vectemp2
,
vectemp1
);
planes
[
5
].
normal
.
multiplyScalar
(
-
1
);
if
(
this
.
camera
.
isPerspectiveCamera
)
{
tmpPoint
.
copy
(
startPoint
);
tmpPoint
.
x
=
Math
.
min
(
startPoint
.
x
,
endPoint
.
x
);
tmpPoint
.
y
=
Math
.
max
(
startPoint
.
y
,
endPoint
.
y
);
endPoint
.
x
=
Math
.
max
(
startPoint
.
x
,
endPoint
.
x
);
endPoint
.
y
=
Math
.
min
(
startPoint
.
y
,
endPoint
.
y
);
vecNear
.
copy
(
this
.
camera
.
position
);
vecTopLeft
.
copy
(
tmpPoint
);
vecTopRight
.
set
(
endPoint
.
x
,
tmpPoint
.
y
,
0
);
vecDownRight
.
copy
(
endPoint
);
vecDownLeft
.
set
(
tmpPoint
.
x
,
endPoint
.
y
,
0
);
vecTopLeft
.
unproject
(
this
.
camera
);
vecTopRight
.
unproject
(
this
.
camera
);
vecDownRight
.
unproject
(
this
.
camera
);
vecDownLeft
.
unproject
(
this
.
camera
);
vectemp1
.
copy
(
vecTopLeft
).
sub
(
vecNear
);
vectemp2
.
copy
(
vecTopRight
).
sub
(
vecNear
);
vectemp3
.
copy
(
vecDownRight
).
sub
(
vecNear
);
vectemp1
.
normalize
();
vectemp2
.
normalize
();
vectemp3
.
normalize
();
vectemp1
.
multiplyScalar
(
this
.
deep
);
vectemp2
.
multiplyScalar
(
this
.
deep
);
vectemp3
.
multiplyScalar
(
this
.
deep
);
vectemp1
.
add
(
vecNear
);
vectemp2
.
add
(
vecNear
);
vectemp3
.
add
(
vecNear
);
var
planes
=
frustum
.
planes
;
planes
[
0
].
setFromCoplanarPoints
(
vecNear
,
vecTopLeft
,
vecTopRight
);
planes
[
1
].
setFromCoplanarPoints
(
vecNear
,
vecTopRight
,
vecDownRight
);
planes
[
2
].
setFromCoplanarPoints
(
vecDownRight
,
vecDownLeft
,
vecNear
);
planes
[
3
].
setFromCoplanarPoints
(
vecDownLeft
,
vecTopLeft
,
vecNear
);
planes
[
4
].
setFromCoplanarPoints
(
vecTopRight
,
vecDownRight
,
vecDownLeft
);
planes
[
5
].
setFromCoplanarPoints
(
vectemp3
,
vectemp2
,
vectemp1
);
planes
[
5
].
normal
.
multiplyScalar
(
-
1
);
}
else
if
(
this
.
camera
.
isOrthographicCamera
)
{
if
(
startPoint
.
equals
(
endPoint
)
)
endPoint
.
addScalar
(
Number
.
EPSILON
);
// avoid invalid frustum
var
left
=
Math
.
min
(
startPoint
.
x
,
endPoint
.
x
);
var
top
=
Math
.
max
(
startPoint
.
y
,
endPoint
.
y
);
var
right
=
Math
.
max
(
startPoint
.
x
,
endPoint
.
x
);
var
down
=
Math
.
min
(
startPoint
.
y
,
endPoint
.
y
);
vecTopLeft
.
set
(
left
,
top
,
-
1
);
vecTopRight
.
set
(
right
,
top
,
-
1
);
vecDownRight
.
set
(
right
,
down
,
-
1
);
vecDownLeft
.
set
(
left
,
down
,
-
1
);
vecFarTopLeft
.
set
(
left
,
top
,
1
);
vecFarTopRight
.
set
(
right
,
top
,
1
);
vecFarDownRight
.
set
(
right
,
down
,
1
);
vecFarDownLeft
.
set
(
left
,
down
,
1
);
vecTopLeft
.
unproject
(
this
.
camera
);
vecTopRight
.
unproject
(
this
.
camera
);
vecDownRight
.
unproject
(
this
.
camera
);
vecDownLeft
.
unproject
(
this
.
camera
);
vecFarTopLeft
.
unproject
(
this
.
camera
);
vecFarTopRight
.
unproject
(
this
.
camera
);
vecFarDownRight
.
unproject
(
this
.
camera
);
vecFarDownLeft
.
unproject
(
this
.
camera
);
var
planes
=
frustum
.
planes
;
planes
[
0
].
setFromCoplanarPoints
(
vecTopLeft
,
vecFarTopLeft
,
vecFarTopRight
);
planes
[
1
].
setFromCoplanarPoints
(
vecTopRight
,
vecFarTopRight
,
vecFarDownRight
);
planes
[
2
].
setFromCoplanarPoints
(
vecFarDownRight
,
vecFarDownLeft
,
vecDownLeft
);
planes
[
3
].
setFromCoplanarPoints
(
vecFarDownLeft
,
vecFarTopLeft
,
vecTopLeft
);
planes
[
4
].
setFromCoplanarPoints
(
vecTopRight
,
vecDownRight
,
vecDownLeft
);
planes
[
5
].
setFromCoplanarPoints
(
vecFarDownRight
,
vecFarTopRight
,
vecFarTopLeft
);
planes
[
5
].
normal
.
multiplyScalar
(
-
1
);
}
else
{
console
.
error
(
'
THREE.SelectionBox: Unsupported camera type.
'
);
}
};
SelectionBox
.
prototype
.
searchChildInFrustum
=
function
(
frustum
,
object
)
{
if
(
object
.
isMesh
)
{
if
(
object
.
isMesh
||
object
.
isLine
||
object
.
isPoints
)
{
if
(
object
.
material
!==
undefined
)
{
object
.
geometry
.
computeBoundingSphere
();
if
(
object
.
geometry
.
boundingSphere
===
null
)
object
.
geometry
.
computeBoundingSphere
();
center
.
copy
(
object
.
geometry
.
boundingSphere
.
center
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录