Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
498c106c
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,发现更多精彩内容 >>
提交
498c106c
编写于
5月 21, 2012
作者:
M
Mr.doob
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
GUI: Adding selection box. Wiring panel properties.
上级
56d94a5b
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
150 addition
and
30 deletion
+150
-30
gui/index.html
gui/index.html
+18
-6
gui/js/UI.js
gui/js/UI.js
+7
-2
gui/js/ui/Panel.js
gui/js/ui/Panel.js
+43
-9
gui/js/ui/Viewport.js
gui/js/ui/Viewport.js
+82
-13
未找到文件。
gui/index.html
浏览文件 @
498c106c
...
...
@@ -29,32 +29,44 @@
<script>
var
events
=
{
var
SIGNALS
=
signals
;
windowResize
:
new
signals
.
Signal
()
var
signals
=
{
objectAdded
:
new
SIGNALS
.
Signal
(),
objectSelected
:
new
SIGNALS
.
Signal
(),
windowResize
:
new
SIGNALS
.
Signal
()
};
//
var
viewport
=
new
Viewport
(
event
s
);
var
viewport
=
new
Viewport
(
signal
s
);
viewport
.
setWidth
(
'
-webkit-calc(100% - 300px)
'
);
viewport
.
setWidth
(
'
-moz-calc(100% - 300px)
'
);
viewport
.
setWidth
(
'
calc(100% - 300px)
'
);
viewport
.
setHeight
(
'
100%
'
);
document
.
body
.
appendChild
(
viewport
.
dom
);
var
panel
=
new
Panel
(
event
s
);
var
panel
=
new
Panel
(
signal
s
);
panel
.
setX
(
'
-webkit-calc(100% - 300px)
'
);
panel
.
setX
(
'
-moz-calc(100% - 300px)
'
);
panel
.
setX
(
'
calc(100% - 300px)
'
);
document
.
body
.
appendChild
(
panel
.
dom
);
//
//
var
geometry
=
new
THREE
.
SphereGeometry
(
75
,
25
,
15
);
var
material
=
new
THREE
.
MeshBasicMaterial
(
{
color
:
Math
.
random
()
*
0xffffff
}
);
var
mesh
=
new
THREE
.
Mesh
(
geometry
,
material
);
signals
.
objectAdded
.
dispatch
(
mesh
);
//
var
onWindowResize
=
function
(
event
)
{
event
s
.
windowResize
.
dispatch
();
signal
s
.
windowResize
.
dispatch
();
};
...
...
gui/js/UI.js
浏览文件 @
498c106c
...
...
@@ -160,9 +160,14 @@ UI.Panel = function ( position ) {
UI
.
Panel
.
prototype
=
new
UI
.
Element
();
UI
.
Panel
.
prototype
.
constructor
=
UI
.
Panel
;
UI
.
Panel
.
prototype
.
add
=
function
(
node
)
{
UI
.
Panel
.
prototype
.
add
=
function
()
{
for
(
var
i
=
0
;
i
<
arguments
.
length
;
i
++
)
{
this
.
dom
.
appendChild
(
arguments
[
i
].
dom
);
}
this
.
dom
.
appendChild
(
node
.
dom
);
return
this
;
};
...
...
gui/js/ui/Panel.js
浏览文件 @
498c106c
...
...
@@ -4,6 +4,7 @@ var Panel = function ( signals ) {
container
.
setWidth
(
'
300px
'
).
setHeight
(
'
100%
'
);
container
.
setBackgroundColor
(
'
#eee
'
);
var
selected
=
null
;
// Properties
...
...
@@ -16,29 +17,62 @@ var Panel = function ( signals ) {
properties
.
add
(
new
UI
.
Break
()
);
properties
.
add
(
new
UI
.
Text
().
setText
(
'
position
'
).
setColor
(
'
#666
'
)
);
properties
.
add
(
new
UI
.
FloatNumber
(
'
absolute
'
).
setX
(
'
90px
'
)
);
properties
.
add
(
new
UI
.
FloatNumber
(
'
absolute
'
).
setX
(
'
160px
'
)
);
properties
.
add
(
new
UI
.
FloatNumber
(
'
absolute
'
).
setX
(
'
230px
'
)
);
var
positionX
=
new
UI
.
FloatNumber
(
'
absolute
'
).
setX
(
'
90px
'
);
var
positionY
=
new
UI
.
FloatNumber
(
'
absolute
'
).
setX
(
'
160px
'
);
var
positionZ
=
new
UI
.
FloatNumber
(
'
absolute
'
).
setX
(
'
230px
'
);
properties
.
add
(
positionX
,
positionY
,
positionZ
);
properties
.
add
(
new
UI
.
HorizontalRule
()
);
properties
.
add
(
new
UI
.
Text
().
setText
(
'
rotation
'
).
setColor
(
'
#666
'
)
);
properties
.
add
(
new
UI
.
FloatNumber
(
'
absolute
'
).
setX
(
'
90px
'
)
);
properties
.
add
(
new
UI
.
FloatNumber
(
'
absolute
'
).
setX
(
'
160px
'
)
);
properties
.
add
(
new
UI
.
FloatNumber
(
'
absolute
'
).
setX
(
'
230px
'
)
);
var
rotationX
=
new
UI
.
FloatNumber
(
'
absolute
'
).
setX
(
'
90px
'
);
var
rotationY
=
new
UI
.
FloatNumber
(
'
absolute
'
).
setX
(
'
160px
'
);
var
rotationZ
=
new
UI
.
FloatNumber
(
'
absolute
'
).
setX
(
'
230px
'
);
properties
.
add
(
rotationX
,
rotationY
,
rotationZ
);
properties
.
add
(
new
UI
.
HorizontalRule
()
);
properties
.
add
(
new
UI
.
Text
().
setText
(
'
scale
'
).
setColor
(
'
#666
'
)
);
properties
.
add
(
new
UI
.
FloatNumber
(
'
absolute
'
).
setNumber
(
1
).
setX
(
'
90px
'
)
);
properties
.
add
(
new
UI
.
FloatNumber
(
'
absolute
'
).
setNumber
(
1
).
setX
(
'
160px
'
)
);
properties
.
add
(
new
UI
.
FloatNumber
(
'
absolute
'
).
setNumber
(
1
).
setX
(
'
230px
'
)
);
var
scaleX
=
new
UI
.
FloatNumber
(
'
absolute
'
).
setNumber
(
1
).
setX
(
'
90px
'
);
var
scaleY
=
new
UI
.
FloatNumber
(
'
absolute
'
).
setNumber
(
1
).
setX
(
'
160px
'
);
var
scaleZ
=
new
UI
.
FloatNumber
(
'
absolute
'
).
setNumber
(
1
).
setX
(
'
230px
'
);
properties
.
add
(
scaleX
,
scaleY
,
scaleZ
);
properties
.
add
(
new
UI
.
Break
()
);
properties
.
add
(
new
UI
.
Break
()
);
container
.
add
(
properties
);
//
signals
.
objectSelected
.
add
(
function
(
object
)
{
selected
=
object
;
if
(
object
)
{
positionX
.
setNumber
(
object
.
position
.
x
);
positionY
.
setNumber
(
object
.
position
.
y
);
positionZ
.
setNumber
(
object
.
position
.
z
);
rotationX
.
setNumber
(
object
.
rotation
.
x
);
rotationY
.
setNumber
(
object
.
rotation
.
y
);
rotationZ
.
setNumber
(
object
.
rotation
.
z
);
scaleX
.
setNumber
(
object
.
scale
.
x
);
scaleY
.
setNumber
(
object
.
scale
.
y
);
scaleZ
.
setNumber
(
object
.
scale
.
z
);
}
}
);
// Geometry
...
...
gui/js/ui/Viewport.js
浏览文件 @
498c106c
...
...
@@ -29,6 +29,10 @@ var Viewport = function ( signals ) {
var
grid
=
new
THREE
.
Line
(
geometry
,
material
,
THREE
.
LinePieces
);
sceneHelpers
.
add
(
grid
);
var
selectionBox
=
new
THREE
.
Mesh
(
new
THREE
.
CubeGeometry
(
1
,
1
,
1
),
new
THREE
.
MeshBasicMaterial
(
{
color
:
0xffff00
,
wireframe
:
true
}
)
);
selectionBox
.
visible
=
false
;
sceneHelpers
.
add
(
selectionBox
);
//
var
scene
=
new
THREE
.
Scene
();
...
...
@@ -48,12 +52,88 @@ var Viewport = function ( signals ) {
controls
.
dynamicDampingFactor
=
0.3
;
controls
.
addEventListener
(
'
change
'
,
render
);
// object picking
var
projector
=
new
THREE
.
Projector
();
container
.
dom
.
addEventListener
(
'
mousedown
'
,
function
(
event
)
{
event
.
preventDefault
();
var
vector
=
new
THREE
.
Vector3
(
(
event
.
clientX
/
container
.
dom
.
offsetWidth
)
*
2
-
1
,
-
(
event
.
clientY
/
container
.
dom
.
offsetHeght
)
*
2
+
1
,
0.5
);
projector
.
unprojectVector
(
vector
,
camera
);
var
ray
=
new
THREE
.
Ray
(
camera
.
position
,
vector
.
subSelf
(
camera
.
position
).
normalize
()
);
var
intersects
=
ray
.
intersectObjects
(
scene
.
children
);
if
(
intersects
.
length
)
{
signals
.
objectSelected
.
dispatch
(
intersects
[
0
].
object
);
// controls.enabled = false;
}
else
{
signals
.
objectSelected
.
dispatch
(
null
);
}
},
false
);
// events
signals
.
objectAdded
.
add
(
function
(
object
)
{
scene
.
add
(
object
);
render
();
}
);
signals
.
objectSelected
.
add
(
function
(
object
)
{
if
(
object
===
null
)
{
selectionBox
.
visible
=
false
;
}
else
{
var
geometry
=
object
.
geometry
;
if
(
geometry
.
boundingBox
===
null
)
{
geometry
.
computeBoundingBox
();
}
selectionBox
.
scale
.
x
=
geometry
.
boundingBox
.
max
.
x
-
geometry
.
boundingBox
.
min
.
x
;
selectionBox
.
scale
.
y
=
geometry
.
boundingBox
.
max
.
y
-
geometry
.
boundingBox
.
min
.
y
;
selectionBox
.
scale
.
z
=
geometry
.
boundingBox
.
max
.
z
-
geometry
.
boundingBox
.
min
.
z
;
selectionBox
.
visible
=
true
;
}
render
();
}
);
signals
.
windowResize
.
add
(
function
()
{
camera
.
aspect
=
container
.
dom
.
offsetWidth
/
container
.
dom
.
offsetHeight
;
camera
.
updateProjectionMatrix
();
renderer
.
setSize
(
container
.
dom
.
offsetWidth
,
container
.
dom
.
offsetHeight
);
render
();
}
);
//
var
renderer
=
new
THREE
.
WebGLRenderer
(
{
antialias
:
true
}
);
renderer
.
autoClear
=
false
;
container
.
dom
.
appendChild
(
renderer
.
domElement
);
signals
.
windowResize
.
add
(
update
);
animate
();
//
...
...
@@ -73,17 +153,6 @@ var Viewport = function ( signals ) {
}
function
update
()
{
camera
.
aspect
=
container
.
dom
.
offsetWidth
/
container
.
dom
.
offsetHeight
;
camera
.
updateProjectionMatrix
();
renderer
.
setSize
(
container
.
dom
.
offsetWidth
,
container
.
dom
.
offsetHeight
);
render
();
}
return
container
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录