Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
e5e34773
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,发现更多精彩内容 >>
提交
e5e34773
编写于
1月 24, 2014
作者:
W
WestLangley
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
OrbitControls: Improved memory management. Minor cleanup.
上级
ae993477
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
47 addition
and
29 deletion
+47
-29
examples/js/controls/OrbitControls.js
examples/js/controls/OrbitControls.js
+47
-29
未找到文件。
examples/js/controls/OrbitControls.js
浏览文件 @
e5e34773
...
...
@@ -34,6 +34,7 @@ THREE.OrbitControls = function ( object, domElement ) {
// "target" sets the location of focus, where the control orbits around
// and where it pans with respect to.
this
.
target
=
new
THREE
.
Vector3
();
// center is old, deprecated; use "target" instead
this
.
center
=
this
.
target
;
...
...
@@ -41,6 +42,7 @@ THREE.OrbitControls = function ( object, domElement ) {
// backwards compatibility
this
.
noZoom
=
false
;
this
.
zoomSpeed
=
1.0
;
// Limits to how far you can dolly in and out
this
.
minDistance
=
0
;
this
.
maxDistance
=
Infinity
;
...
...
@@ -64,6 +66,7 @@ THREE.OrbitControls = function ( object, domElement ) {
// Set to true to disable use of the keys
this
.
noKeys
=
false
;
// The four arrow keys
this
.
keys
=
{
LEFT
:
37
,
UP
:
38
,
RIGHT
:
39
,
BOTTOM
:
40
};
...
...
@@ -81,6 +84,9 @@ THREE.OrbitControls = function ( object, domElement ) {
var
panStart
=
new
THREE
.
Vector2
();
var
panEnd
=
new
THREE
.
Vector2
();
var
panDelta
=
new
THREE
.
Vector2
();
var
panOffset
=
new
THREE
.
Vector3
();
var
offset
=
new
THREE
.
Vector3
();
var
dollyStart
=
new
THREE
.
Vector2
();
var
dollyEnd
=
new
THREE
.
Vector2
();
...
...
@@ -94,13 +100,13 @@ THREE.OrbitControls = function ( object, domElement ) {
var
lastPosition
=
new
THREE
.
Vector3
();
var
STATE
=
{
NONE
:
-
1
,
ROTATE
:
0
,
DOLLY
:
1
,
PAN
:
2
,
TOUCH_ROTATE
:
3
,
TOUCH_DOLLY
:
4
,
TOUCH_PAN
:
5
};
var
state
=
STATE
.
NONE
;
// events
var
changeEvent
=
{
type
:
'
change
'
};
this
.
rotateLeft
=
function
(
angle
)
{
if
(
angle
===
undefined
)
{
...
...
@@ -128,11 +134,11 @@ THREE.OrbitControls = function ( object, domElement ) {
// pass in distance in world space to move left
this
.
panLeft
=
function
(
distance
)
{
var
panOffset
=
new
THREE
.
Vector3
();
var
te
=
this
.
object
.
matrix
.
elements
;
// get X column of matrix
panOffset
.
set
(
te
[
0
],
te
[
1
],
te
[
2
]
);
panOffset
.
multiplyScalar
(
-
distance
);
panOffset
.
set
(
te
[
0
],
te
[
1
],
te
[
2
]
);
panOffset
.
multiplyScalar
(
-
distance
);
pan
.
add
(
panOffset
);
...
...
@@ -141,18 +147,19 @@ THREE.OrbitControls = function ( object, domElement ) {
// pass in distance in world space to move up
this
.
panUp
=
function
(
distance
)
{
var
panOffset
=
new
THREE
.
Vector3
();
var
te
=
this
.
object
.
matrix
.
elements
;
// get Y column of matrix
panOffset
.
set
(
te
[
4
],
te
[
5
],
te
[
6
]
);
panOffset
.
multiplyScalar
(
distance
);
panOffset
.
set
(
te
[
4
],
te
[
5
],
te
[
6
]
);
panOffset
.
multiplyScalar
(
distance
);
pan
.
add
(
panOffset
);
};
//
main entry point; pass in Vector2
of change desired in pixel space,
//
pass in x,y
of change desired in pixel space,
// right and down are positive
this
.
pan
=
function
(
delta
)
{
this
.
pan
=
function
(
delta
X
,
deltaY
)
{
var
element
=
scope
.
domElement
===
document
?
scope
.
domElement
.
body
:
scope
.
domElement
;
...
...
@@ -164,20 +171,21 @@ THREE.OrbitControls = function ( object, domElement ) {
var
targetDistance
=
offset
.
length
();
// half of the fov is center to top of screen
targetDistance
*=
Math
.
tan
(
(
scope
.
object
.
fov
/
2
)
*
Math
.
PI
/
180.0
);
targetDistance
*=
Math
.
tan
(
(
scope
.
object
.
fov
/
2
)
*
Math
.
PI
/
180.0
);
// we actually don't use screenWidth, since perspective camera is fixed to screen height
scope
.
panLeft
(
2
*
delta
.
x
*
targetDistance
/
element
.
clientHeight
);
scope
.
panUp
(
2
*
delta
.
y
*
targetDistance
/
element
.
clientHeight
);
scope
.
panLeft
(
2
*
delta
X
*
targetDistance
/
element
.
clientHeight
);
scope
.
panUp
(
2
*
delta
Y
*
targetDistance
/
element
.
clientHeight
);
}
else
if
(
scope
.
object
.
top
!==
undefined
)
{
// orthographic
scope
.
panLeft
(
delta
.
x
*
(
scope
.
object
.
right
-
scope
.
object
.
left
)
/
element
.
clientWidth
);
scope
.
panUp
(
delta
.
y
*
(
scope
.
object
.
top
-
scope
.
object
.
bottom
)
/
element
.
clientHeight
);
scope
.
panLeft
(
delta
X
*
(
scope
.
object
.
right
-
scope
.
object
.
left
)
/
element
.
clientWidth
);
scope
.
panUp
(
delta
Y
*
(
scope
.
object
.
top
-
scope
.
object
.
bottom
)
/
element
.
clientHeight
);
}
else
{
// camera neither orthographic or perspective
- warn user
// camera neither orthographic or perspective
console
.
warn
(
'
WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.
'
);
}
...
...
@@ -211,7 +219,8 @@ THREE.OrbitControls = function ( object, domElement ) {
this
.
update
=
function
()
{
var
position
=
this
.
object
.
position
;
var
offset
=
position
.
clone
().
sub
(
this
.
target
);
offset
.
copy
(
position
).
sub
(
this
.
target
);
// angle from z-axis around y-axis
...
...
@@ -255,7 +264,7 @@ THREE.OrbitControls = function ( object, domElement ) {
thetaDelta
=
0
;
phiDelta
=
0
;
scale
=
1
;
pan
.
set
(
0
,
0
,
0
);
pan
.
set
(
0
,
0
,
0
);
if
(
lastPosition
.
distanceTo
(
this
.
object
.
position
)
>
0
)
{
...
...
@@ -308,7 +317,6 @@ THREE.OrbitControls = function ( object, domElement ) {
}
// Greggman fix: https://github.com/greggman/three.js/commit/fde9f9917d6d8381f06bf22cdff766029d1761be
scope
.
domElement
.
addEventListener
(
'
mousemove
'
,
onMouseMove
,
false
);
scope
.
domElement
.
addEventListener
(
'
mouseup
'
,
onMouseUp
,
false
);
...
...
@@ -331,6 +339,7 @@ THREE.OrbitControls = function ( object, domElement ) {
// rotating across whole screen goes 360 degrees around
scope
.
rotateLeft
(
2
*
Math
.
PI
*
rotateDelta
.
x
/
element
.
clientWidth
*
scope
.
rotateSpeed
);
// rotating up and down along whole screen attempts to go 360, but limited to 180
scope
.
rotateUp
(
2
*
Math
.
PI
*
rotateDelta
.
y
/
element
.
clientHeight
*
scope
.
rotateSpeed
);
...
...
@@ -362,13 +371,12 @@ THREE.OrbitControls = function ( object, domElement ) {
panEnd
.
set
(
event
.
clientX
,
event
.
clientY
);
panDelta
.
subVectors
(
panEnd
,
panStart
);
scope
.
pan
(
panDelta
);
scope
.
pan
(
panDelta
.
x
,
panDelta
.
y
);
panStart
.
copy
(
panEnd
);
}
// Greggman fix: https://github.com/greggman/three.js/commit/fde9f9917d6d8381f06bf22cdff766029d1761be
scope
.
update
();
}
...
...
@@ -377,7 +385,6 @@ THREE.OrbitControls = function ( object, domElement ) {
if
(
scope
.
enabled
===
false
)
return
;
// Greggman fix: https://github.com/greggman/three.js/commit/fde9f9917d6d8381f06bf22cdff766029d1761be
scope
.
domElement
.
removeEventListener
(
'
mousemove
'
,
onMouseMove
,
false
);
scope
.
domElement
.
removeEventListener
(
'
mouseup
'
,
onMouseUp
,
false
);
...
...
@@ -389,8 +396,6 @@ THREE.OrbitControls = function ( object, domElement ) {
if
(
scope
.
enabled
===
false
||
scope
.
noZoom
===
true
)
return
;
event
.
preventDefault
();
var
delta
=
0
;
if
(
event
.
wheelDelta
!==
undefined
)
{
// WebKit / Opera / Explorer 9
...
...
@@ -424,19 +429,22 @@ THREE.OrbitControls = function ( object, domElement ) {
switch
(
event
.
keyCode
)
{
case
scope
.
keys
.
UP
:
scope
.
pan
(
new
THREE
.
Vector2
(
0
,
scope
.
keyPanSpeed
)
);
scope
.
pan
(
0
,
scope
.
keyPanSpeed
);
scope
.
update
();
break
;
case
scope
.
keys
.
BOTTOM
:
scope
.
pan
(
new
THREE
.
Vector2
(
0
,
-
scope
.
keyPanSpeed
)
);
scope
.
pan
(
0
,
-
scope
.
keyPanSpeed
);
scope
.
update
();
break
;
case
scope
.
keys
.
LEFT
:
scope
.
pan
(
new
THREE
.
Vector2
(
scope
.
keyPanSpeed
,
0
)
);
scope
.
pan
(
scope
.
keyPanSpeed
,
0
);
scope
.
update
();
break
;
case
scope
.
keys
.
RIGHT
:
scope
.
pan
(
new
THREE
.
Vector2
(
-
scope
.
keyPanSpeed
,
0
)
);
scope
.
pan
(
-
scope
.
keyPanSpeed
,
0
);
scope
.
update
();
break
;
...
...
@@ -451,6 +459,7 @@ THREE.OrbitControls = function ( object, domElement ) {
switch
(
event
.
touches
.
length
)
{
case
1
:
// one-fingered touch: rotate
if
(
scope
.
noRotate
===
true
)
return
;
state
=
STATE
.
TOUCH_ROTATE
;
...
...
@@ -459,6 +468,7 @@ THREE.OrbitControls = function ( object, domElement ) {
break
;
case
2
:
// two-fingered touch: dolly
if
(
scope
.
noZoom
===
true
)
return
;
state
=
STATE
.
TOUCH_DOLLY
;
...
...
@@ -470,6 +480,7 @@ THREE.OrbitControls = function ( object, domElement ) {
break
;
case
3
:
// three-fingered touch: pan
if
(
scope
.
noPan
===
true
)
return
;
state
=
STATE
.
TOUCH_PAN
;
...
...
@@ -478,9 +489,11 @@ THREE.OrbitControls = function ( object, domElement ) {
break
;
default
:
state
=
STATE
.
NONE
;
}
}
function
touchmove
(
event
)
{
...
...
@@ -495,6 +508,7 @@ THREE.OrbitControls = function ( object, domElement ) {
switch
(
event
.
touches
.
length
)
{
case
1
:
// one-fingered touch: rotate
if
(
scope
.
noRotate
===
true
)
return
;
if
(
state
!==
STATE
.
TOUCH_ROTATE
)
return
;
...
...
@@ -512,6 +526,7 @@ THREE.OrbitControls = function ( object, domElement ) {
break
;
case
2
:
// two-fingered touch: dolly
if
(
scope
.
noZoom
===
true
)
return
;
if
(
state
!==
STATE
.
TOUCH_DOLLY
)
return
;
...
...
@@ -538,13 +553,14 @@ THREE.OrbitControls = function ( object, domElement ) {
break
;
case
3
:
// three-fingered touch: pan
if
(
scope
.
noPan
===
true
)
return
;
if
(
state
!==
STATE
.
TOUCH_PAN
)
return
;
panEnd
.
set
(
event
.
touches
[
0
].
pageX
,
event
.
touches
[
0
].
pageY
);
panDelta
.
subVectors
(
panEnd
,
panStart
);
scope
.
pan
(
panDelta
);
scope
.
pan
(
panDelta
.
x
,
panDelta
.
y
);
panStart
.
copy
(
panEnd
);
...
...
@@ -552,6 +568,7 @@ THREE.OrbitControls = function ( object, domElement ) {
break
;
default
:
state
=
STATE
.
NONE
;
}
...
...
@@ -563,6 +580,7 @@ THREE.OrbitControls = function ( object, domElement ) {
if
(
scope
.
enabled
===
false
)
return
;
state
=
STATE
.
NONE
;
}
this
.
domElement
.
addEventListener
(
'
contextmenu
'
,
function
(
event
)
{
event
.
preventDefault
();
},
false
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录