【问题标题】:How to position bones in a three.js colladaloader object (skeletal animation)如何在 three.js colladaloader 对象中定位骨骼(骨骼动画)
【发布时间】:2023-03-23 00:22:01
【问题描述】:

我已经使用 colladaloader 加载了一个 Biped 角色网格。

我可以通过改变 dae 对象的位置和旋转来移动网格。

dae.rotation.y+=0.01;
dae.updateMatrix();

工作正常

但我似乎无法移动单个骨头……知道该怎么做吗?

dae.children[0].rotation.z += 0.1;
dae.children[0].quaternion._x += 0.1;
dae.children[0].position.x += 0.1;
dae.children[0].matrixAutoUpdate = true;
dae.children[0].matrixWorldNeedsUpdate = true;
dae.children[0].updateMatrix();

不起作用

整个项目:

https://codenvy.com/ide/tmp-9q4s6enl9imzzs

运行链接:(可能会随着人们更新/重新运行项目而改变)

http://app-slm37q4a3tzdf3c7.apprun4.codenvycorp.com/

(每次有人执行“运行”>“运行”应用程序时都会发生变化,因此此处列出的运行 url 毫无意义..)

【问题讨论】:

    标签: three.js collada


    【解决方案1】:

    在你的函数 animate 中,你需要在调用 render() 之前添加这个: requestAnimationFrame(动画); 目前,即使在对骨骼进行更改之前,您也正在重新运行函数 animate。所以很明显,什么都没有动。 这完全取决于代码的顺序。

    如果这不起作用,你能告诉我你的控制台是否有错误吗?

    【讨论】:

    • 读了一些书,不一定是孩子[0]。如果您在 console.log 中“打印”您的模型(dae),也许您可​​以弄清楚要解决什么问题。你会从那里得到很多信息
    【解决方案2】:

    这并不像我希望的那么简单。加载器创建对象的层次结构,但是移动它们不会影响几何体的顶点。

    必须实施的过程称为“蒙皮方程”,以使用加权骨骼方向以及其他矩阵来转换顶点几何形状。

    也指: COLLADA: Inverse bind pose in the wrong space?

    【讨论】:

      【解决方案3】:

      我想让这个答案成为对原始问题的评论,因为它建议消除 Codenvy 应用程序运行时每次点击都会更改 URL 的问题。粘贴到响应中的 URL 是临时工作区 URL。因此,一旦项目空闲 10 分钟,该工作区就会被破坏。如果发布此项目的用户可以将他们的项目复制到他们的帐户工作区中,则有一个名为“Share->Factory”的选项将生成一个 URL,它是 a) 永久的,b) 将为每个人创建一个完全克隆的工作区点击它的人。如果您将文件发送给我们或共享您的帐户,我们可以创建可添加到原始问题的工厂,以便所有查看者都能看到功能齐全的克隆。

      【讨论】:

        猜你喜欢
        • 2014-10-16
        • 2021-08-03
        • 1970-01-01
        • 2013-11-03
        • 2013-12-24
        • 2012-10-17
        • 2017-05-05
        • 2016-09-13
        • 2013-09-22
        相关资源
        最近更新 更多