首页 > 解决方案 > 创建霰弹枪传播模式 (babylon.js)

问题描述

您好,我是 babylonjs 的新手,几天来我一直在尝试在 babylon.js 中制作一个恒定的霰弹枪传播模式。

目前,我的方法包括准备好几行以显示在数组中:

       let sgPellets = [
            BABYLON.Mesh.CreateLines("lines", [
                        shotgunPosition,
                        meshFound.pickedPoint
            ], this.Player.game.scene),
            BABYLON.Mesh.CreateLines("lines", [
                        shotgunPosition,
                        meshFound.pickedPoint
            ], this.Player.game.scene),
        ] 

whereshotgunPosition是霰弹枪网格在世界上的绝对位置,meshFound.pickedPoint是我瞄准的位置(在网格上)。

所以我可以在霰弹枪网格和我点击的网格之间画一条线(在这种情况下是数组的第一条)。

现在对于第二行,我希望它从第一行在 y 轴上旋转一点(这正是我的目标)所以:

          for(let k=0; k<sgPellets.length; k++){
            sgPellets[k].setPivotPoint(shotgunPosition);
            sgPellets[k].isPickable = false;
            switch(k){
                case 1:
                    sgPellets[k].rotation.y += 0.1
                    break
            }
           }

当我从侧面看时,它确实很好用在此处输入图像描述

但不是当我向上或向下看时。在此处输入图像描述

我想我在数学方面遗漏了一些东西。我也尝试过使用其他旋转方法,以获得相同的结果。

有人对如何使两条线之间的角度保持不变有任何提示吗?谢谢你。

标签: javascript3dbabylonjs

解决方案


谢谢你的回答!你猜对了,我使用的是scene.pick。我已经测试了你的方法并且效果很好,我还能够在枪管和场景中选取的点之间创建一个圆锥体。但我并不是很满意。尽管我认为无论选择的点在哪里,您的方法都无法制作出一致的图案,所以我最终做了其他事情。我创建了第二个“假”相机,它可以旋转并准确定位到真相机所在的位置,这要归功于:

fakeCamera.rotationQuaternion = BABYLON.Quaternion.RotationYawPitchRoll(camera.rotation.y, camera.rotation.x, camera.rotation.z)

通过这种方式,我可以将 .rotationQuaternion 添加到具有位置的假的,并从真实的旋转转换(我不能为真实的相机添加四元数,它会弄乱控件)。最后,我能够根据场景中的pickPoint和假相机的rotationQuaternion值来定位每条光线。


推荐阅读