javascript - 创建霰弹枪传播模式 (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
}
}
我想我在数学方面遗漏了一些东西。我也尝试过使用其他旋转方法,以获得相同的结果。
有人对如何使两条线之间的角度保持不变有任何提示吗?谢谢你。
解决方案
谢谢你的回答!你猜对了,我使用的是scene.pick。我已经测试了你的方法并且效果很好,我还能够在枪管和场景中选取的点之间创建一个圆锥体。但我并不是很满意。尽管我认为无论选择的点在哪里,您的方法都无法制作出一致的图案,所以我最终做了其他事情。我创建了第二个“假”相机,它可以旋转并准确定位到真相机所在的位置,这要归功于:
fakeCamera.rotationQuaternion = BABYLON.Quaternion.RotationYawPitchRoll(camera.rotation.y, camera.rotation.x, camera.rotation.z)
通过这种方式,我可以将 .rotationQuaternion 添加到具有位置的假的,并从真实的旋转转换(我不能为真实的相机添加四元数,它会弄乱控件)。最后,我能够根据场景中的pickPoint和假相机的rotationQuaternion值来定位每条光线。
推荐阅读
- android-studio - 运行应用程序显示项目中不再存在的旧 XML 布局
- html - 生产与开发时的 CSS 差异
- javascript - 区分2个数组,即添加和删除哪些项目
- react-virtualized - React-Virtualized:如何插入/删除一行而不重新渲染它下面的行?
- mysql - ER图,实体标识为一个属性或另一个属性
- c# - ObservableCollection 更新 GridView 时闪烁的单元格
- javascript - 有人可以修复我的代码以复制按钮吗?(Visual Studio 代码)
- angular - Angular 将字符串发布到 MVC 控制器
- keras - 实现一个 Keras 层,该层为区域提议网络(功能 API)采用不同形状的输入
- rust - C++ 的 shared_from_this 的 Rust 等价物是什么?