Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
fktz008
three.js
提交
06b0238b
T
three.js
项目概览
fktz008
/
three.js
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
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,发现更多精彩内容 >>
提交
06b0238b
编写于
4月 12, 2012
作者:
M
Mr.doob
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'AddictArts/dev_colladaMatrixXforms' into dev
上级
3d8ec5b3
1dacb71d
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
175 addition
and
42 deletion
+175
-42
examples/webgl_loader_collada_keyframe.html
examples/webgl_loader_collada_keyframe.html
+36
-36
src/extras/loaders/ColladaLoader.js
src/extras/loaders/ColladaLoader.js
+139
-6
未找到文件。
examples/webgl_loader_collada_keyframe.html
浏览文件 @
06b0238b
...
...
@@ -44,27 +44,24 @@
if
(
!
Detector
.
webgl
)
Detector
.
addGetWebGLMessage
();
var
container
,
stats
,
camera
,
scene
,
renderer
,
pointLight
,
model
,
animations
,
kfAnimations
=
[
],
loader
=
new
THREE
.
ColladaLoader
(),
lastTimestamp
,
startTime
,
progress
=
0
;
var
stats
;
var
scene
;
var
camera
;
var
renderer
;
var
model
;
var
animations
;
var
kfAnimations
=
[
];
var
kfAnimationsLength
=
0
;
var
loader
=
new
THREE
.
ColladaLoader
();
var
lastTimestamp
;
var
progress
=
0
;
loader
.
load
(
'
./models/collada/pump/pump.dae
'
,
function
(
collada
)
{
model
=
collada
.
scene
;
animations
=
collada
.
animations
;
model
.
scale
.
x
=
model
.
scale
.
y
=
model
.
scale
.
z
=
0.125
;
model
.
updateMatrix
();
kfAnimationsLength
=
animations
.
length
;
model
.
scale
.
x
=
model
.
scale
.
y
=
model
.
scale
.
z
=
0.125
;
// 1/8 scale, modeled in cm
init
();
start
();
...
...
@@ -74,14 +71,15 @@
function
init
()
{
container
=
document
.
createElement
(
'
div
'
);
var
container
=
document
.
createElement
(
'
div
'
);
document
.
body
.
appendChild
(
container
);
model
.
getChildByName
(
'
camEye_camera
'
,
true
).
visible
=
false
;
model
.
getChildByName
(
'
camTarget_camera
'
,
true
).
visible
=
false
;
// Scene
scene
=
new
THREE
.
Scene
();
// Camera
camera
=
new
THREE
.
PerspectiveCamera
(
40
,
window
.
innerWidth
/
window
.
innerHeight
,
0.01
,
1000
);
camera
.
position
.
set
(
-
5.00181875
,
3.42631375
,
11.3102925
);
camera
.
lookAt
(
new
THREE
.
Vector3
(
-
1.224774125
,
2.18410625
,
4.57969125
)
);
...
...
@@ -90,21 +88,17 @@
// KeyFrame Animations
var
animHandler
=
THREE
.
AnimationHandler
,
toConvert
=
{
};
var
animHandler
=
THREE
.
AnimationHandler
;
for
(
var
i
=
0
,
il
=
animations
.
length
;
i
<
il
;
++
i
)
{
var
node
=
animations
[
i
].
node
;
toConvert
[
node
.
id
]
=
node
;
}
for
(
var
i
=
0
;
i
<
kfAnimationsLength
;
++
i
)
{
for
(
var
i
=
0
,
il
=
animations
.
length
;
i
<
il
;
++
i
)
{
var
animation
=
animations
[
i
];
animHandler
.
add
(
animation
);
var
kfAnimation
=
new
THREE
.
KeyFrameAnimation
(
toConvert
[
animation
.
node
.
id
]
,
animation
.
name
);
var
kfAnimation
=
new
THREE
.
KeyFrameAnimation
(
animation
.
node
,
animation
.
name
);
kfAnimation
.
timeScale
=
1
;
kfAnimations
.
push
(
kfAnimation
);
}
// Grid
...
...
@@ -127,20 +121,25 @@
// Add the COLLADA
model
.
getChildByName
(
'
camEye_camera
'
,
true
).
visible
=
false
;
model
.
getChildByName
(
'
camTarget_camera
'
,
true
).
visible
=
false
;
scene
.
add
(
model
);
// Lights
pointLight
=
new
THREE
.
PointLight
(
0xffffff
,
1.5
);
pointLight
=
new
THREE
.
PointLight
(
0xffffff
,
1.
7
5
);
pointLight
.
position
=
camera
.
position
;
pointLight
.
rotation
=
camera
.
rotation
;
pointLight
.
scale
=
camera
.
scale
;
scene
.
add
(
pointLight
);
// Renderer
renderer
=
new
THREE
.
WebGLRenderer
(
{
antialias
:
true
}
);
renderer
.
setSize
(
window
.
innerWidth
,
window
.
innerHeight
);
container
.
appendChild
(
renderer
.
domElement
);
// Stats
...
...
@@ -148,28 +147,29 @@
stats
=
new
Stats
();
stats
.
domElement
.
style
.
position
=
'
absolute
'
;
stats
.
domElement
.
style
.
top
=
'
0px
'
;
container
.
appendChild
(
stats
.
domElement
);
}
function
start
()
{
for
(
var
i
=
0
,
il
=
kfAnimations
.
length
;
i
<
il
;
++
i
)
{
for
(
var
i
=
0
;
i
<
kfAnimationsLength
;
++
i
)
{
var
animation
=
kfAnimations
[
i
];
for
(
var
h
=
0
,
hl
=
animation
.
hierarchy
.
length
;
h
<
hl
;
h
++
)
{
var
keys
=
animation
.
data
.
hierarchy
[
h
].
keys
,
sids
=
animation
.
data
.
hierarchy
[
h
].
sids
,
obj
=
animation
.
hierarchy
[
h
];
var
keys
=
animation
.
data
.
hierarchy
[
h
].
keys
;
var
sids
=
animation
.
data
.
hierarchy
[
h
].
sids
;
var
obj
=
animation
.
hierarchy
[
h
];
if
(
keys
.
length
&&
sids
)
{
for
(
var
s
=
0
;
s
<
sids
.
length
;
s
++
)
{
var
sid
=
sids
[
s
]
,
next
=
animation
.
getNextKeyWith
(
sid
,
h
,
0
);
var
sid
=
sids
[
s
]
;
var
next
=
animation
.
getNextKeyWith
(
sid
,
h
,
0
);
if
(
next
)
next
.
apply
(
sid
);
...
...
@@ -196,7 +196,7 @@
if
(
progress
>=
0
&&
progress
<
48
)
{
for
(
var
i
=
0
,
il
=
kfAnimations
.
length
;
i
<
il
;
++
i
)
{
for
(
var
i
=
0
;
i
<
kfAnimationsLength
;
++
i
)
{
kfAnimations
[
i
].
update
(
frameTime
);
...
...
@@ -204,7 +204,7 @@
}
else
if
(
progress
>=
48
)
{
for
(
var
i
=
0
,
il
=
kfAnimations
.
length
;
i
<
il
;
++
i
)
{
for
(
var
i
=
0
;
i
<
kfAnimationsLength
;
++
i
)
{
kfAnimations
[
i
].
stop
();
...
...
src/extras/loaders/ColladaLoader.js
浏览文件 @
06b0238b
...
...
@@ -1003,10 +1003,26 @@ THREE.ColladaLoader = function () {
var
channel
=
node
.
channels
[
i
],
fullSid
=
channel
.
fullSid
,
member
=
getConvertedMember
(
channel
.
member
),
sampler
=
channel
.
sampler
,
input
=
sampler
.
input
,
transform
=
node
.
getTransformBySid
(
channel
.
sid
);
transform
=
node
.
getTransformBySid
(
channel
.
sid
),
member
;
if
(
channel
.
arrIndices
)
{
member
=
[];
for
(
var
j
=
0
,
jl
=
channel
.
arrIndices
.
length
;
j
<
jl
;
j
++
)
{
member
[
j
]
=
getConvertedIndex
(
channel
.
arrIndices
[
j
]
);
}
}
else
{
member
=
getConvertedMember
(
channel
.
member
);
}
if
(
transform
)
{
...
...
@@ -1125,7 +1141,11 @@ THREE.ColladaLoader = function () {
prevData
=
prevTarget
.
data
,
data
;
if
(
prevData
.
length
)
{
if
(
prevTarget
.
type
===
'
matrix
'
)
{
data
=
prevData
;
}
else
if
(
prevData
.
length
)
{
data
=
[];
...
...
@@ -1927,16 +1947,80 @@ THREE.ColladaLoader = function () {
Transform
.
prototype
.
update
=
function
(
data
,
member
)
{
var
members
=
[
'
X
'
,
'
Y
'
,
'
Z
'
,
'
ANGLE
'
];
switch
(
this
.
type
)
{
case
'
matrix
'
:
console
.
log
(
'
Currently not handling matrix transform updates
'
);
if
(
!
member
)
{
this
.
obj
.
copy
(
data
);
}
else
if
(
member
.
length
===
1
)
{
switch
(
member
[
0
]
)
{
case
0
:
this
.
obj
.
n11
=
data
[
0
];
this
.
obj
.
n21
=
data
[
1
];
this
.
obj
.
n31
=
data
[
2
];
this
.
obj
.
n41
=
data
[
3
];
break
;
case
1
:
this
.
obj
.
n12
=
data
[
0
];
this
.
obj
.
n22
=
data
[
1
];
this
.
obj
.
n32
=
data
[
2
];
this
.
obj
.
n42
=
data
[
3
];
break
;
case
2
:
this
.
obj
.
n13
=
data
[
0
];
this
.
obj
.
n23
=
data
[
1
];
this
.
obj
.
n33
=
data
[
2
];
this
.
obj
.
n43
=
data
[
3
];
break
;
case
3
:
this
.
obj
.
n14
=
data
[
0
];
this
.
obj
.
n24
=
data
[
1
];
this
.
obj
.
n34
=
data
[
2
];
this
.
obj
.
n44
=
data
[
3
];
break
;
}
}
else
if
(
member
.
length
===
2
)
{
var
propName
=
'
n
'
+
(
member
[
0
]
+
1
)
+
(
member
[
1
]
+
1
);
this
.
obj
[
propName
]
=
data
;
}
else
{
console
.
log
(
'
Incorrect addressing of matrix in transform.
'
);
}
break
;
case
'
translate
'
:
case
'
scale
'
:
if
(
Object
.
prototype
.
toString
.
call
(
member
)
===
'
[object Array]
'
)
{
member
=
members
[
member
[
0
]
];
}
switch
(
member
)
{
case
'
X
'
:
...
...
@@ -1967,6 +2051,12 @@ THREE.ColladaLoader = function () {
case
'
rotate
'
:
if
(
Object
.
prototype
.
toString
.
call
(
member
)
===
'
[object Array]
'
)
{
member
=
members
[
member
[
0
]
];
}
switch
(
member
)
{
case
'
X
'
:
...
...
@@ -3329,6 +3419,25 @@ THREE.ColladaLoader = function () {
switch
(
child
.
nodeName
)
{
case
'
animation
'
:
var
anim
=
(
new
Animation
()
).
parse
(
child
);
for
(
var
src
in
anim
.
source
)
{
this
.
source
[
src
]
=
anim
.
source
[
src
];
}
for
(
var
j
=
0
;
j
<
anim
.
channel
.
length
;
j
++
)
{
this
.
channel
.
push
(
anim
.
channel
[
j
]
);
this
.
sampler
.
push
(
anim
.
sampler
[
j
]
);
}
break
;
case
'
source
'
:
var
src
=
(
new
Source
()
).
parse
(
child
);
...
...
@@ -3527,7 +3636,11 @@ THREE.ColladaLoader = function () {
var
data
;
if
(
this
.
strideOut
>
1
)
{
if
(
type
===
'
matrix
'
&&
this
.
strideOut
===
16
)
{
data
=
this
.
output
[
ndx
];
}
else
if
(
this
.
strideOut
>
1
)
{
data
=
[];
ndx
*=
this
.
strideOut
;
...
...
@@ -3555,6 +3668,10 @@ THREE.ColladaLoader = function () {
}
}
else
if
(
this
.
strideOut
===
4
&&
type
===
'
matrix
'
)
{
fixCoords
(
data
,
-
1
);
}
}
else
{
...
...
@@ -3642,7 +3759,7 @@ THREE.ColladaLoader = function () {
nextTarget
=
nextKey
.
getTarget
(
target
.
sid
),
data
;
if
(
nextTarget
)
{
if
(
target
.
transform
.
type
!==
'
matrix
'
&&
nextTarget
)
{
var
scale
=
(
time
-
this
.
time
)
/
(
nextKey
.
time
-
this
.
time
),
nextData
=
nextTarget
.
data
,
...
...
@@ -4150,6 +4267,22 @@ THREE.ColladaLoader = function () {
};
function
getConvertedIndex
(
index
)
{
if
(
index
>
-
1
&&
index
<
3
)
{
var
members
=
[
'
X
'
,
'
Y
'
,
'
Z
'
],
indices
=
{
X
:
0
,
Y
:
1
,
Z
:
2
};
index
=
getConvertedMember
(
members
[
index
]
);
index
=
indices
[
index
];
}
return
index
;
};
function
getConvertedMember
(
member
)
{
if
(
options
.
convertUpAxis
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录