Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
车家大少爷
three.js
提交
50260c2c
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,发现更多精彩内容 >>
提交
50260c2c
编写于
11月 29, 2016
作者:
M
Mr.doob
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
DragControls: Simplified code using THREE.Plane approach.
上级
7b529ccc
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
24 addition
and
66 deletion
+24
-66
examples/js/controls/DragControls.js
examples/js/controls/DragControls.js
+23
-65
examples/webgl_geometry_spline_editor.html
examples/webgl_geometry_spline_editor.html
+1
-1
未找到文件。
examples/js/controls/DragControls.js
浏览文件 @
50260c2c
...
...
@@ -13,15 +13,14 @@ THREE.DragControls = function ( _objects, _camera, _domElement ) {
}
var
_plane
=
new
THREE
.
Plane
();
var
_raycaster
=
new
THREE
.
Raycaster
();
var
_mouse
=
new
THREE
.
Vector3
(),
_offset
=
new
THREE
.
Vector3
();
var
_selected
,
_hovered
=
null
;
var
_mouse
=
new
THREE
.
Vector2
();
var
_offset
=
new
THREE
.
Vector3
();
var
_intersection
=
new
THREE
.
Vector3
();
var
p3subp1
=
new
THREE
.
Vector3
();
var
targetposition
=
new
THREE
.
Vector3
();
this
.
enabled
=
true
;
var
_selected
=
null
,
_hovered
=
null
;
//
...
...
@@ -58,60 +57,15 @@ THREE.DragControls = function ( _objects, _camera, _domElement ) {
_raycaster
.
setFromCamera
(
_mouse
,
_camera
);
var
ray
=
_raycaster
.
ray
;
if
(
_selected
&&
scope
.
enabled
)
{
var
normal
=
_selected
.
normal
;
// I found this article useful about plane-line intersections
// http://paulbourke.net/geometry/planeline/
var
denom
=
normal
.
dot
(
ray
.
direction
);
if
(
denom
==
0
)
{
// bail
console
.
log
(
'
no or infinite solutions
'
);
return
;
}
var
num
=
normal
.
dot
(
p3subp1
.
copy
(
_selected
.
point
).
sub
(
ray
.
origin
)
);
var
u
=
num
/
denom
;
targetposition
.
copy
(
ray
.
direction
).
multiplyScalar
(
u
).
add
(
ray
.
origin
).
sub
(
_offset
);
// _selected.object.position.copy(targetposition);
var
xLock
,
yLock
;
var
moveX
,
moveY
,
moveZ
;
if
(
xLock
)
{
moveX
=
true
;
moveY
=
false
;
moveZ
=
false
;
if
(
_raycaster
.
ray
.
intersectPlane
(
_plane
,
_intersection
)
)
{
}
else
if
(
yLock
)
{
moveX
=
false
;
moveY
=
true
;
moveZ
=
false
;
}
else
{
moveX
=
moveY
=
moveZ
=
true
;
_selected
.
position
.
copy
(
_intersection
.
sub
(
_offset
)
);
}
// Reverse Matrix?
if
(
moveX
)
_selected
.
object
.
position
.
x
=
targetposition
.
x
;
if
(
moveY
)
_selected
.
object
.
position
.
y
=
targetposition
.
y
;
if
(
moveZ
)
_selected
.
object
.
position
.
z
=
targetposition
.
z
;
scope
.
dispatchEvent
(
{
type
:
'
drag
'
,
object
:
_selected
.
object
}
);
scope
.
dispatchEvent
(
{
type
:
'
drag
'
,
object
:
_selected
}
);
return
;
...
...
@@ -125,6 +79,8 @@ THREE.DragControls = function ( _objects, _camera, _domElement ) {
var
object
=
intersects
[
0
].
object
;
_plane
.
setFromNormalAndCoplanarPoint
(
_camera
.
getWorldDirection
(
_plane
.
normal
),
object
.
position
);
if
(
_hovered
!==
object
)
{
scope
.
dispatchEvent
(
{
type
:
'
hoveron
'
,
object
:
object
}
);
...
...
@@ -153,24 +109,23 @@ THREE.DragControls = function ( _objects, _camera, _domElement ) {
event
.
preventDefault
();
_mouse
.
x
=
(
event
.
clientX
/
_domElement
.
width
)
*
2
-
1
;
_mouse
.
y
=
-
(
event
.
clientY
/
_domElement
.
height
)
*
2
+
1
;
_raycaster
.
setFromCamera
(
_mouse
,
_camera
);
var
intersects
=
_raycaster
.
intersectObjects
(
_objects
);
var
ray
=
_raycaster
.
ray
;
var
normal
=
ray
.
direction
;
// normal ray to the camera position
if
(
intersects
.
length
>
0
)
{
_selected
=
intersects
[
0
];
_selected
.
ray
=
ray
;
_selected
.
normal
=
normal
;
_offset
.
copy
(
_selected
.
point
).
sub
(
_selected
.
object
.
position
);
_selected
=
intersects
[
0
].
object
;
if
(
_raycaster
.
ray
.
intersectPlane
(
_plane
,
_intersection
)
)
{
_offset
.
copy
(
_intersection
).
sub
(
_selected
.
position
);
}
_domElement
.
style
.
cursor
=
'
move
'
;
scope
.
dispatchEvent
(
{
type
:
'
dragstart
'
,
object
:
_selected
.
object
}
);
scope
.
dispatchEvent
(
{
type
:
'
dragstart
'
,
object
:
_selected
}
);
}
...
...
@@ -183,7 +138,8 @@ THREE.DragControls = function ( _objects, _camera, _domElement ) {
if
(
_selected
)
{
scope
.
dispatchEvent
(
{
type
:
'
dragend
'
,
object
:
_selected
.
object
}
);
scope
.
dispatchEvent
(
{
type
:
'
dragend
'
,
object
:
_selected
}
);
_selected
=
null
;
}
...
...
@@ -196,6 +152,8 @@ THREE.DragControls = function ( _objects, _camera, _domElement ) {
// API
this
.
enabled
=
true
;
this
.
activate
=
activate
;
this
.
deactivate
=
deactivate
;
this
.
dispose
=
dispose
;
...
...
examples/webgl_geometry_spline_editor.html
浏览文件 @
50260c2c
...
...
@@ -167,7 +167,7 @@
}
);
var
dragcontrols
=
new
THREE
.
DragControls
(
splineHelperObjects
,
camera
,
renderer
.
domElement
);
//
dragcontrols
.
enabled
=
false
;
dragcontrols
.
addEventListener
(
'
hoveron
'
,
function
(
event
)
{
transformControl
.
attach
(
event
.
object
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录