经过3D模压轧制而无需更换面部纹理,即可获得所需的值

时间:2018-10-24 08:05:59

标签: three.js quaternions cannon.js

我正在制作3D骰子游戏,但遇到一个问题,我无法解决问题,所以我向您寻求帮助。

在场景/世界中(将threejs与cannonjs结合使用),我有一个飞机和一个骰子,我正将它们扔在飞机上(此处的屏幕快照为http://prntscr.com/l9rat5,结果为http://prntscr.com/l9rdeb)。一切正常,直到我想在诸如1之类的模具上抛出一些特定值。

由于我使用加载的模型而不是立方体表面的纹理图像,因此无法仅通过在threejs中更改立方体的表面来处理此问题(因为模型有100个)。因此,我希望可以通过改变主体的初始四元数(将其预旋转)来使模具落在特定的一侧来实现这一目标。模具网格正好跟随身体的位置和四元数。

我有以下问题:

这甚至有可能做到吗?也许当我更改四元数预掷时,它总是会导致最终的四元数不同,而我无法确定?如果不可能使用四元数,有什么建议吗?

如果可能的话,我该如何确定我需要将哪个四元数与初始四元数相乘才能得到所需的结果值1?我有最终的四元数,而且我知道从模拟投掷中每张面孔上都有哪些值,所以我尝试使用四元数反比,但没有运气。

如果我只是旋转初始物体,以使面1旋转到结果面(例如6),它在某些情况下会起作用(当模拟结果为6时,我抛出1),但是当抛出变得更加复杂(旋转更多时) )这当然是行不通的,因为我没有指望所有可能的轮换。

如果不清楚我的意思,请告诉我。

非常感谢 m

2 个答案:

答案 0 :(得分:0)

首先,请确保使用固定步长仿真。您可以通过将3个参数传递给world.step()而不是一个参数来实现。这样可以确保无论帧频如何,每次仿真的行为都相同。

还要确保每次掷骰时,模具的初始位置,速度和作用力都相同。

如果使用内置的加农炮函数(例如.setFromAxisAngle())构造四元数,那么所有这些都应该很好。...使用.setFromAxisAngle()绕不同的轴具有90度的角度。为什么要使用四元数反函数呢?

如果要旋转骰子的另一种方法,请将网格放置在场景中的空父网格下方。在仿真期间,将cannon.js输出复制到父网格。然后旋转子模具网格以获得所需的初始(和结束)旋转。

答案 1 :(得分:0)

对于注释,我通过仅在threejs中旋转几何体(而不是网格)并且完全不接触身体的四元数来解决它。