微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Three.js 中将物理与导入的模型结合使用

如何解决在 Three.js 中将物理与导入的模型结合使用

我正在学习 Three.js。我正在尝试使用 Cannon-es 将圆柱体连接到我在搅拌机中创建的玫瑰网格上,使其落入花瓶中。我的问题是当我尝试更新玫瑰的位置以等于身体的位置时,它指出玫瑰没有位置元素,但我在用 gltf-loader 加载它后记录它并且它有一个位置,所以我想我只是没有正确编码。这是我试过的,谢谢你的帮助!

createRose 函数是从 dat.gui 按钮调用的,当底部的刻度函数中的代码被注释时,玫瑰和 Cannon 主体被创建得很好。

const objectsToUpdate = []

const createRose = (px,py,pz,rx,ry,rz) =>{
   gltfLoader.load('/models/pieces/Rose.glb',(gltf) =>{
      let rose = gltf.scene.children[0]
      rose.position.set(px,pz)
      rose.rotation.set(rx,rz)
      scene.add(rose)
   })

   // Cannon.js body
   const shape = new CANNON.Cylinder(2,1,5,20)
   const body = new CANNON.Body({
      mass: 1,position: new CANNON.Vec3(0,3,0),shape: shape,material: defaultMaterial
   })
   world.addBody(body)

   // Save in objects to update
   objectsToUpdate.push({ 
      roseAndBody:{
         rose: rose,body: body
      }
   })
}

这是一个叫做tick的函数,它被window.requestAnimationFrame(tick)更新

for(const object of objectsToUpdate){
    object.roseAndBody.rose.position.copy(object.roseAndBody.body.position)
    object.roseAndBody.rose.quaternion.copy(object.roseAndBody.body.quaternion)
 }

有关更多信息,我正在关注 Bruno SIMON 的付费教程,并且从他的物理课中修改了许多代码,我正在为此努力。我完全可以使用不同的格式或其他附加组件而不是 Cannon.js,无论如何都可以!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。