具有方向矢量的A架物理系统复合碰撞器

时间:2019-03-01 18:35:12

标签: game-physics collision aframe

使用here提供的A框架物理系统组件,我一直在尝试创建类似于文档中示例的复合对撞机。但是,每当我向任何对撞机添加方向矢量时,其体形似乎就会从地面静态物体中掉落并掉下来。

关于如何使用这些组件将旋转形状实现为复合对撞机的任何建议?使用记录在案的方法很难进行故障排除。我还考虑过创建单独的实体并通过锁定约束将它们连接起来,但是这样做会在单独的实体之间存在过多重叠时引发问题。

这是我根据组件文档尝试的一种模型的初始实现:

<a-entity gltf-model="#rams-horn" body="type: dynamic; shape: none; mass: 1;" id="ramsHorn" class="seed" position="0 5 0" scale="1 1 1" rotation="180 45 45"
                 shape__main="shape: sphere;
                              radius: 0.085;
                              offset: -0.145 0.136 0.165;"
                 shape__body1="shape: sphere;
                               radius: 0.06;
                               offset: -0.083 0.243 0.198;"
                 shape__body2="shape: sphere;
                               radius: 0.06;
                               offset: -0.173 0.029 0.118;"
                 shape__bodyTop="shape: box;
                                 halfExtents: 0.084 0.103 0.105;
                                 offset: -0.157 0.098 0.038;
                                 orientation: 48.823 151.396 128.878 1;"

                 shape__leftArm="shape: box;
                                 halfExtents: 0.137 0.0445 0.0325;
                                 offset: 0.005 -0.244 0.06;
                                 orientation: 14.802 -1.075 -11.758 1;"
                 shape__leftArm1="shape: box;
                                  halfExtents: 0.13 0.041 0.0305;
                                  offset: 0.249 -0.271 0.017;
                                  orientation: 4.774 21.49 5.687 1;"
                 shape__leftArm2="shape: box;
                                  halfExtents: 0.09 0.0365 0.02;
                                  offset: 0.412 -0.203 -0.073;
                                  orientation: -5.452 37.235 41.454 1;"
                 shape__leftArm3="shape: box;
                                  halfExtents: 0.0485 0.0305 0.02;
                                  offset: 0.482 -0.107 -0.142;
                                  orientation: -8.285 39.333 53.542 1;"
                 shape__leftArm4="shape: box;
                                  halfExtents: 0.091 0.0285 0.013;
                                  offset: 0.487 0.007 -0.18;
                                  orientation: -16.037 12.177 114.669 1;"

                 shape__rightArm="shape: box;
                                  halfExtents: 0.026 0.044 0.1045;
                                  offset: -0.171 -0.098 -0.15;
                                  orientation: 8.467 -17.253 -43.762 1;"
                 shape__rightArm1="shape: box;
                                   halfExtents: 0.12 0.0245 0.0355;
                                   offset: -0.073 -0.048 -0.325;
                                   orientation: -19.243 36.415 23.184 1;"
                 shape__rightArm2="shape: box;
                                   halfExtents: 0.1065 0.032 0.0205;
                                   offset: 0.092 0.02 -0.43;
                                   orientation: 72.192 124.564 108.909 1;"
                 shape__rightArm3="shape: box;
                                   halfExtents: 0.0865 0.025 0.0145;
                                   offset: 0.263 0.07 -0.436;
                                   orientation: 75.904 92.023 107.88 1;"
                 shape__rightArm4="shape: box;
                                   halfExtents: 0.0455 0.0165 0.0145;
                                   offset: 0.371 0.101 -0.386;
                                   orientation: 70.206 100.066 148.711 1;"
                 shape__rightArm5="shape: box;
                                   halfExtents: 0.0515 0.022 0.01;
                                   offset: 0.407 0.11 -0.31;
                                   orientation: 70.356 103.559 -174.73 1;" shadow>

2 个答案:

答案 0 :(得分:0)

愚蠢的错误,使用度数表示方位而不是弧度:(其他有类似问题的人都应该参考Three.js中的四元数文档

答案 1 :(得分:0)

愚蠢的错误愚蠢的第一答案。 Three.js和CANNON.js中四元数的单位是弧度,但是Euler坐标和四元数之间的转换也是必需的。您可以编写转换工具或使用CANNON.js中Quaternion类支持的方法。我使用online calculator是因为对撞机仅由几个基本元素组成。