Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
ff1a50b8
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,发现更多精彩内容 >>
未验证
提交
ff1a50b8
编写于
1月 12, 2021
作者:
M
Mr.doob
提交者:
GitHub
1月 12, 2021
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #20932 from DVLP/FBXLoader-fix-parent-inheritance
FBXLoader fix transform inheritance, convert back to local
上级
1dd95a47
9615717a
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
30 addition
and
12 deletion
+30
-12
examples/js/loaders/FBXLoader.js
examples/js/loaders/FBXLoader.js
+30
-12
未找到文件。
examples/js/loaders/FBXLoader.js
浏览文件 @
ff1a50b8
...
@@ -822,11 +822,17 @@ THREE.FBXLoader = ( function () {
...
@@ -822,11 +822,17 @@ THREE.FBXLoader = ( function () {
if
(
node
.
userData
.
transformData
)
{
if
(
node
.
userData
.
transformData
)
{
if
(
node
.
parent
)
node
.
userData
.
transformData
.
parentMatrixWorld
=
node
.
parent
.
matrix
;
if
(
node
.
parent
)
{
node
.
userData
.
transformData
.
parentMatrix
=
node
.
parent
.
matrix
;
node
.
userData
.
transformData
.
parentMatrixWorld
=
node
.
parent
.
matrixWorld
;
}
var
transform
=
generateTransform
(
node
.
userData
.
transformData
);
var
transform
=
generateTransform
(
node
.
userData
.
transformData
);
node
.
applyMatrix4
(
transform
);
node
.
applyMatrix4
(
transform
);
node
.
updateWorldMatrix
();
}
}
...
@@ -3980,6 +3986,7 @@ THREE.FBXLoader = ( function () {
...
@@ -3980,6 +3986,7 @@ THREE.FBXLoader = ( function () {
var
lRotationPivotM
=
new
THREE
.
Matrix4
();
var
lRotationPivotM
=
new
THREE
.
Matrix4
();
var
lParentGX
=
new
THREE
.
Matrix4
();
var
lParentGX
=
new
THREE
.
Matrix4
();
var
lParentLX
=
new
THREE
.
Matrix4
();
var
lGlobalT
=
new
THREE
.
Matrix4
();
var
lGlobalT
=
new
THREE
.
Matrix4
();
var
inheritType
=
(
transformData
.
inheritType
)
?
transformData
.
inheritType
:
0
;
var
inheritType
=
(
transformData
.
inheritType
)
?
transformData
.
inheritType
:
0
;
...
@@ -4007,6 +4014,7 @@ THREE.FBXLoader = ( function () {
...
@@ -4007,6 +4014,7 @@ THREE.FBXLoader = ( function () {
var
array
=
transformData
.
postRotation
.
map
(
THREE
.
MathUtils
.
degToRad
);
var
array
=
transformData
.
postRotation
.
map
(
THREE
.
MathUtils
.
degToRad
);
array
.
push
(
transformData
.
eulerOrder
);
array
.
push
(
transformData
.
eulerOrder
);
lPostRotationM
.
makeRotationFromEuler
(
tempEuler
.
fromArray
(
array
)
);
lPostRotationM
.
makeRotationFromEuler
(
tempEuler
.
fromArray
(
array
)
);
lPostRotationM
.
invert
();
}
}
...
@@ -4019,37 +4027,44 @@ THREE.FBXLoader = ( function () {
...
@@ -4019,37 +4027,44 @@ THREE.FBXLoader = ( function () {
if
(
transformData
.
rotationPivot
)
lRotationPivotM
.
setPosition
(
tempVec
.
fromArray
(
transformData
.
rotationPivot
)
);
if
(
transformData
.
rotationPivot
)
lRotationPivotM
.
setPosition
(
tempVec
.
fromArray
(
transformData
.
rotationPivot
)
);
// parent transform
// parent transform
if
(
transformData
.
parentMatrixWorld
)
lParentGX
=
transformData
.
parentMatrixWorld
;
if
(
transformData
.
parentMatrixWorld
)
{
lParentLX
.
copy
(
transformData
.
parentMatrix
);
lParentGX
.
copy
(
transformData
.
parentMatrixWorld
);
}
var
lLRM
=
new
THREE
.
Matrix4
().
copy
(
lPreRotationM
).
multiply
(
lRotationM
).
multiply
(
lPostRotationM
);
// Global Rotation
// Global Rotation
var
lLRM
=
lPreRotationM
.
multiply
(
lRotationM
).
multiply
(
lPostRotationM
);
var
lParentGRM
=
new
THREE
.
Matrix4
();
var
lParentGRM
=
new
THREE
.
Matrix4
();
lParentG
X
.
extractRotation
(
lParentGRM
);
lParentG
RM
.
extractRotation
(
lParentGX
);
// Global Shear*Scaling
// Global Shear*Scaling
var
lParentTM
=
new
THREE
.
Matrix4
();
var
lParentTM
=
new
THREE
.
Matrix4
();
lParentTM
.
copyPosition
(
lParentGX
);
lParentTM
.
copyPosition
(
lParentGX
);
var
lParentGSM
=
new
THREE
.
Matrix4
();
var
lParentGSM
=
new
THREE
.
Matrix4
();
lParentGSM
.
copy
(
lParentGRM
).
invert
().
multiply
(
lParentGX
);
var
lParentGRSM
=
new
THREE
.
Matrix4
().
copy
(
lParentTM
).
invert
().
multiply
(
lParentGX
);
lParentGSM
.
copy
(
lParentGRM
).
invert
().
multiply
(
lParentGRSM
);
var
lLSM
=
lScalingM
;
var
lGlobalRS
=
new
THREE
.
Matrix4
();
var
lGlobalRS
=
new
THREE
.
Matrix4
();
if
(
inheritType
===
0
)
{
if
(
inheritType
===
0
)
{
lGlobalRS
.
copy
(
lParentGRM
).
multiply
(
lLRM
).
multiply
(
lParentGSM
).
multiply
(
l
Scaling
M
);
lGlobalRS
.
copy
(
lParentGRM
).
multiply
(
lLRM
).
multiply
(
lParentGSM
).
multiply
(
l
LS
M
);
}
else
if
(
inheritType
===
1
)
{
}
else
if
(
inheritType
===
1
)
{
lGlobalRS
.
copy
(
lParentGRM
).
multiply
(
lParentGSM
).
multiply
(
lLRM
).
multiply
(
l
Scaling
M
);
lGlobalRS
.
copy
(
lParentGRM
).
multiply
(
lParentGSM
).
multiply
(
lLRM
).
multiply
(
l
LS
M
);
}
else
{
}
else
{
var
lParentLSM
_inv
=
new
THREE
.
Matrix4
(
);
var
lParentLSM
=
new
THREE
.
Matrix4
().
scale
(
new
THREE
.
Vector3
().
setFromMatrixScale
(
lParentLX
)
);
lParentLSM_inv
.
copy
(
lScaling
M
).
invert
();
var
lParentLSM_inv
=
new
THREE
.
Matrix4
().
copy
(
lParentLS
M
).
invert
();
var
lParentGSM_noLocal
=
new
THREE
.
Matrix4
().
multipl
y
(
lParentGSM
).
multiply
(
lParentLSM_inv
);
var
lParentGSM_noLocal
=
new
THREE
.
Matrix4
().
cop
y
(
lParentGSM
).
multiply
(
lParentLSM_inv
);
lGlobalRS
.
copy
(
lParentGRM
).
multiply
(
lLRM
).
multiply
(
lParentGSM_noLocal
).
multiply
(
l
Scaling
M
);
lGlobalRS
.
copy
(
lParentGRM
).
multiply
(
lLRM
).
multiply
(
lParentGSM_noLocal
).
multiply
(
l
LS
M
);
}
}
...
@@ -4066,7 +4081,10 @@ THREE.FBXLoader = ( function () {
...
@@ -4066,7 +4081,10 @@ THREE.FBXLoader = ( function () {
var
lGlobalTranslation
=
new
THREE
.
Matrix4
().
copy
(
lParentGX
).
multiply
(
lLocalTWithAllPivotAndOffsetInfo
);
var
lGlobalTranslation
=
new
THREE
.
Matrix4
().
copy
(
lParentGX
).
multiply
(
lLocalTWithAllPivotAndOffsetInfo
);
lGlobalT
.
copyPosition
(
lGlobalTranslation
);
lGlobalT
.
copyPosition
(
lGlobalTranslation
);
lTransform
=
new
THREE
.
Matrix4
().
multiply
(
lGlobalT
).
multiply
(
lGlobalRS
);
lTransform
=
new
THREE
.
Matrix4
().
copy
(
lGlobalT
).
multiply
(
lGlobalRS
);
// from global to local
lTransform
.
premultiply
(
lParentGX
.
invert
()
);
return
lTransform
;
return
lTransform
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录