Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
acaa0b7a
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,发现更多精彩内容 >>
提交
acaa0b7a
编写于
6月 17, 2015
作者:
G
Greg Tatum
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
mrdoobapproves styling
上级
f62d9318
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
109 addition
and
104 deletion
+109
-104
docs/api/objects/SkinnedMesh.html
docs/api/objects/SkinnedMesh.html
+6
-6
docs/scenes/bones-browser.html
docs/scenes/bones-browser.html
+103
-98
未找到文件。
docs/api/objects/SkinnedMesh.html
浏览文件 @
acaa0b7a
...
...
@@ -21,22 +21,22 @@
var geometry = new THREE.CylinderGeometry( 5, 5, 5, 5, 15, 5, 30 );
//Create the skin indices and skin weights
for
( var i=0; i
<
geometry.vertices.length
;
i
++
)
{
for
( var i = 0; i
<
geometry.vertices.length
;
i
++
)
{
//
Imaginary
functions
to
calculate
the
indices
and
weights
var
skinIndex =
calculateSkinIndex(
geometry.vertices
,
i
);
var
skinWeight =
calculateSkinWeight(
geometry.vertices
,
i
);
//
Ease
between
each
bone
geometry.skinIndices.push
(
new
THREE.Vector4
(
skinIndex
,
skinIndex
+
1,
0,
0
)
);
geometry.skinWeights.push
(
new
THREE.Vector4
(
1
-
skinWeight
,
skinWeight
,
0,
0
)
);
geometry.skinIndices.push
(
new
THREE.Vector4
(
skinIndex
,
skinIndex
+
1,
0,
0
)
);
geometry.skinWeights.push
(
new
THREE.Vector4
(
1
-
skinWeight
,
skinWeight
,
0,
0
)
);
}
var
mesh =
THREE.SkinnedMesh(
geometry
,
material
);
//
See
example
from
THREE.Skeleton
for
the
armSkeleton
var
rootBone =
armSkeleton.bones[
0
];
var
rootBone =
armSkeleton.bones[
0
];
mesh.add
(
rootBone
);
//
Bind
the
skeleton
to
the
mesh
...
...
@@ -46,8 +46,8 @@
armSkeleton.calculateInverses
();
//
Move
the
bones
and
manipulate
the
model
armSkeleton.bones[
0
].rotation.x =
-0.1;
armSkeleton.bones[
1
].rotation.x =
0.2;
armSkeleton.bones
[
0
].rotation.x =
-0.1;
armSkeleton.bones
[
1
].rotation.x =
0.2;
</
code
>
...
...
docs/scenes/bones-browser.html
浏览文件 @
acaa0b7a
...
...
@@ -39,25 +39,27 @@
<script
src=
"../../examples/js/controls/OrbitControls.js"
></script>
<script>
var
gui
,
scene
,
camera
,
renderer
,
orbit
,
ambientLight
,
lights
,
mesh
,
bones
,
skeletonHelper
;
var
state
=
{
animateBones
:
false
};
function
initScene
()
{
gui
=
new
dat
.
GUI
();
scene
=
new
THREE
.
Scene
();
camera
=
new
THREE
.
PerspectiveCamera
(
75
,
window
.
innerWidth
/
window
.
innerHeight
,
0.1
,
200
);
camera
=
new
THREE
.
PerspectiveCamera
(
75
,
window
.
innerWidth
/
window
.
innerHeight
,
0.1
,
200
);
camera
.
position
.
z
=
30
;
camera
.
position
.
y
=
30
;
renderer
=
new
THREE
.
WebGLRenderer
(
{
antialias
:
true
}
);
renderer
=
new
THREE
.
WebGLRenderer
(
{
antialias
:
true
}
);
renderer
.
setSize
(
window
.
innerWidth
,
window
.
innerHeight
);
document
.
body
.
appendChild
(
renderer
.
domElement
);
orbit
=
new
THREE
.
OrbitControls
(
camera
,
renderer
.
domElement
);
orbit
.
noZoom
=
true
;
...
...
@@ -65,33 +67,34 @@
scene
.
add
(
ambientLight
);
lights
=
[];
lights
[
0
]
=
new
THREE
.
PointLight
(
0xffffff
,
1
,
0
);
lights
[
1
]
=
new
THREE
.
PointLight
(
0xffffff
,
1
,
0
);
lights
[
2
]
=
new
THREE
.
PointLight
(
0xffffff
,
1
,
0
);
lights
[
0
].
position
.
set
(
0
,
200
,
0
);
lights
[
1
].
position
.
set
(
100
,
200
,
100
);
lights
[
2
].
position
.
set
(
-
100
,
-
200
,
-
100
);
lights
[
0
]
=
new
THREE
.
PointLight
(
0xffffff
,
1
,
0
);
lights
[
1
]
=
new
THREE
.
PointLight
(
0xffffff
,
1
,
0
);
lights
[
2
]
=
new
THREE
.
PointLight
(
0xffffff
,
1
,
0
);
lights
[
0
].
position
.
set
(
0
,
200
,
0
);
lights
[
1
].
position
.
set
(
100
,
200
,
100
);
lights
[
2
].
position
.
set
(
-
100
,
-
200
,
-
100
);
scene
.
add
(
lights
[
0
]
);
scene
.
add
(
lights
[
1
]
);
scene
.
add
(
lights
[
2
]
);
scene
.
add
(
lights
[
0
]
);
scene
.
add
(
lights
[
1
]
);
scene
.
add
(
lights
[
2
]
);
window
.
addEventListener
(
'
resize
'
,
function
()
{
camera
.
aspect
=
window
.
innerWidth
/
window
.
innerHeight
;
camera
.
updateProjectionMatrix
();
renderer
.
setSize
(
window
.
innerWidth
,
window
.
innerHeight
);
},
false
);
initBones
();
setupDatGui
();
}
function
createGeometry
(
sizing
)
{
var
geometry
=
new
THREE
.
CylinderGeometry
(
5
,
// radiusTop
5
,
// radiusBottom
...
...
@@ -100,88 +103,90 @@
sizing
.
segmentCount
*
3
,
// heightSegments
true
// openEnded
);
for
(
var
i
=
0
;
i
<
geometry
.
vertices
.
length
;
i
++
)
{
var
vertex
=
geometry
.
vertices
[
i
];
var
y
=
(
vertex
.
y
+
sizing
.
halfHeight
);
for
(
var
i
=
0
;
i
<
geometry
.
vertices
.
length
;
i
++
)
{
var
vertex
=
geometry
.
vertices
[
i
];
var
y
=
(
vertex
.
y
+
sizing
.
halfHeight
);
var
skinIndex
=
Math
.
floor
(
y
/
sizing
.
segmentHeight
);
var
skinWeight
=
(
y
%
sizing
.
segmentHeight
)
/
sizing
.
segmentHeight
;
geometry
.
skinIndices
.
push
(
new
THREE
.
Vector4
(
skinIndex
,
skinIndex
+
1
,
0
,
0
)
);
geometry
.
skinWeights
.
push
(
new
THREE
.
Vector4
(
1
-
skinWeight
,
skinWeight
,
0
,
0
)
);
var
skinWeight
=
(
y
%
sizing
.
segmentHeight
)
/
sizing
.
segmentHeight
;
geometry
.
skinIndices
.
push
(
new
THREE
.
Vector4
(
skinIndex
,
skinIndex
+
1
,
0
,
0
)
);
geometry
.
skinWeights
.
push
(
new
THREE
.
Vector4
(
1
-
skinWeight
,
skinWeight
,
0
,
0
)
);
}
return
geometry
;
};
function
createBones
(
sizing
)
{
bones
=
[];
var
prevBone
=
new
THREE
.
Bone
();
bones
.
push
(
prevBone
);
prevBone
.
position
.
y
=
-
sizing
.
halfHeight
;
for
(
var
i
=
0
;
i
<
sizing
.
segmentCount
;
i
++
)
{
for
(
var
i
=
0
;
i
<
sizing
.
segmentCount
;
i
++
)
{
var
bone
=
new
THREE
.
Bone
();
bone
.
position
.
y
=
sizing
.
segmentHeight
;
bones
.
push
(
bone
);
prevBone
.
add
(
bone
);
prevBone
=
bone
;
}
return
bones
;
};
function
createMesh
(
geometry
,
bones
)
{
var
material
=
new
THREE
.
MeshPhongMaterial
({
var
material
=
new
THREE
.
MeshPhongMaterial
(
{
skinning
:
true
,
color
:
0x156289
,
emissive
:
0x072534
,
side
:
THREE
.
DoubleSide
,
shading
:
THREE
.
FlatShading
});
}
);
var
mesh
=
new
THREE
.
SkinnedMesh
(
geometry
,
material
);
var
skeleton
=
new
THREE
.
Skeleton
(
bones
);
mesh
.
add
(
bones
[
0
]
);
mesh
.
add
(
bones
[
0
]
);
mesh
.
bind
(
skeleton
);
skeleton
.
calculateInverses
();
skeletonHelper
=
new
THREE
.
SkeletonHelper
(
mesh
);
skeletonHelper
.
material
.
linewidth
=
2
;
scene
.
add
(
skeletonHelper
);
return
mesh
;
};
function
setupDatGui
()
{
var
folder
=
gui
.
addFolder
(
"
General Options
"
);
folder
.
add
(
state
,
"
animateBones
"
);
folder
.
__controllers
[
0
].
name
(
"
Animate Bones
"
);
folder
.
__controllers
[
0
].
name
(
"
Animate Bones
"
);
folder
.
add
(
mesh
,
"
pose
"
);
folder
.
__controllers
[
1
].
name
(
"
.pose()
"
);
folder
.
__controllers
[
1
].
name
(
"
.pose()
"
);
var
bones
=
mesh
.
skeleton
.
bones
;
for
(
var
i
=
0
;
i
<
bones
.
length
;
i
++
)
{
var
bone
=
bones
[
i
];
for
(
var
i
=
0
;
i
<
bones
.
length
;
i
++
)
{
var
bone
=
bones
[
i
];
folder
=
gui
.
addFolder
(
"
Bone
"
+
i
);
folder
.
add
(
bone
.
position
,
'
x
'
,
-
10
+
bone
.
position
.
x
,
10
+
bone
.
position
.
x
);
folder
.
add
(
bone
.
position
,
'
y
'
,
-
10
+
bone
.
position
.
y
,
10
+
bone
.
position
.
y
);
folder
.
add
(
bone
.
position
,
'
z
'
,
-
10
+
bone
.
position
.
z
,
10
+
bone
.
position
.
z
);
...
...
@@ -189,76 +194,76 @@
folder
.
add
(
bone
.
rotation
,
'
x
'
,
-
Math
.
PI
*
0.5
,
Math
.
PI
*
0.5
);
folder
.
add
(
bone
.
rotation
,
'
y
'
,
-
Math
.
PI
*
0.5
,
Math
.
PI
*
0.5
);
folder
.
add
(
bone
.
rotation
,
'
z
'
,
-
Math
.
PI
*
0.5
,
Math
.
PI
*
0.5
);
folder
.
add
(
bone
.
scale
,
'
x
'
,
0
,
2
);
folder
.
add
(
bone
.
scale
,
'
y
'
,
0
,
2
);
folder
.
add
(
bone
.
scale
,
'
z
'
,
0
,
2
);
folder
.
__controllers
[
0
].
name
(
"
position.x
"
);
folder
.
__controllers
[
1
].
name
(
"
position.y
"
);
folder
.
__controllers
[
2
].
name
(
"
position.z
"
);
folder
.
__controllers
[
3
].
name
(
"
rotation.x
"
);
folder
.
__controllers
[
4
].
name
(
"
rotation.y
"
);
folder
.
__controllers
[
5
].
name
(
"
rotation.z
"
);
folder
.
__controllers
[
6
].
name
(
"
scale.x
"
);
folder
.
__controllers
[
7
].
name
(
"
scale.y
"
);
folder
.
__controllers
[
8
].
name
(
"
scale.z
"
);
folder
.
__controllers
[
0
].
name
(
"
position.x
"
);
folder
.
__controllers
[
1
].
name
(
"
position.y
"
);
folder
.
__controllers
[
2
].
name
(
"
position.z
"
);
folder
.
__controllers
[
3
].
name
(
"
rotation.x
"
);
folder
.
__controllers
[
4
].
name
(
"
rotation.y
"
);
folder
.
__controllers
[
5
].
name
(
"
rotation.z
"
);
folder
.
__controllers
[
6
].
name
(
"
scale.x
"
);
folder
.
__controllers
[
7
].
name
(
"
scale.y
"
);
folder
.
__controllers
[
8
].
name
(
"
scale.z
"
);
}
}
function
initBones
()
{
var
segmentHeight
=
8
;
var
segmentCount
=
4
;
var
height
=
segmentHeight
*
segmentCount
;
var
halfHeight
=
height
*
0.5
;
var
sizing
=
{
segmentHeight
:
segmentHeight
,
segmentCount
:
segmentCount
,
height
:
height
,
halfHeight
:
halfHeight
};
var
geometry
=
createGeometry
(
sizing
);
var
bones
=
createBones
(
sizing
);
mesh
=
createMesh
(
geometry
,
bones
);
mesh
.
scale
.
multiplyScalar
(
1
);
scene
.
add
(
mesh
);
};
function
render
()
{
requestAnimationFrame
(
render
);
var
time
=
Date
.
now
()
*
0.001
;
var
bone
=
mesh
;
//Wiggle the bones
if
(
state
.
animateBones
)
{
for
(
var
i
=
0
;
i
<
mesh
.
skeleton
.
bones
.
length
;
i
++
)
{
mesh
.
skeleton
.
bones
[
i
].
rotation
.
z
=
Math
.
sin
(
time
)
*
2
/
mesh
.
skeleton
.
bones
.
length
;
if
(
state
.
animateBones
)
{
for
(
var
i
=
0
;
i
<
mesh
.
skeleton
.
bones
.
length
;
i
++
)
{
mesh
.
skeleton
.
bones
[
i
].
rotation
.
z
=
Math
.
sin
(
time
)
*
2
/
mesh
.
skeleton
.
bones
.
length
;
}
}
skeletonHelper
.
update
();
renderer
.
render
(
scene
,
camera
);
};
initScene
();
render
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录