问题标签 [bullet]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 项目符号:btBvhTriangleMeshShape 崩溃
所以我有这行代码:
这使我的程序崩溃。显然,函数内部的某处有一条assert(numIndices>0)
线,导致崩溃。
如果false
我在行尾再添加一个参数,它看起来像:
我告诉它不要生成包围体数据,它继续正常(没有崩溃)。所以我的问题是:为什么当我明确有索引时meshInterface
,它会崩溃并说我没有索引。
附加信息:
meshInterface
是这样创建的:
我已经在另一个对象中设置了我的数据,我只是将它加载到项目符号设置中。
在这里你可以看到我的meshInterface
. 网格是平面。
actionscript-3 - AS3 - 为子弹轨迹着色
我正在构建一个 shmup(子弹地狱,射击他们),并为所有艺术作品使用位图数据。我存储了一个具有不同颜色的 bitmapDatas 向量,并从向量中提取我需要的颜色来为粒子(子弹、命中粒子等)着色一个正方形。子弹是紫色的 rgb(255, 0, 255),我想做的是从每个子弹上画出一条淡入另一种颜色的轨迹。当我看到这个例子时,我非常感兴趣,但不幸的是,他们甚至不知道他们是如何开始对这些子弹的烟雾(轨迹)进行编程的。
http://www.asahi-net.or.jp/~cs8k-cyu/bulletml/bulletml_applet_e.html
现在我的子弹有一个速度和一个方向,我可以在飞行中轻松更新、改变方向/速度等。而我一直在做的只是随着时间的推移慢慢淡出子弹的位图。
不是每个人都在寻找代码,如果有人可以提供帮助,只是概述如何执行此操作。
ogre - Ogre3D 与 OgreBullet
实际问题
我正在使用 Ogre3D 1.7,并且正在尝试构建 OgreBullet 库(Bullet 2.82 物理库的包装器),但我遇到了一些铸造错误:
我没有修改代码所以我不明白为什么它不能编译?有人有这个错误吗?
编辑(以前的错误已解决):
如果你有这个错误
尝试在以下几行中将static_cast替换为const_cast :
game-physics - 使用 Ammo.js 的 3D 软体物理?
我听说软体物理没有移植到 Ammo.js。所以有几个问题:
- 为什么?对 JavaScript 来说计算量会不会太大?
- 有没有包含 Bullet 引擎的软体物理部分的 JavaScript 构建?
- Bullet 的软体物理是否足够可靠,可以让我尝试使用 JavaScript 版本?
EDIT1:哦,作为备份:如果 Ammo.js 不可能或非常困难,还有其他选择吗?
c++ - 子弹物理多球体被地面吸入
我已经做了几次尝试来解决这个问题,并阅读了我在这里/论坛/谷歌可以找到的所有内容。我使用的 CCD 阈值糊状物低于我的物体移动速度,并且使用的 CCD 半径远小于物体的半半径。这样做的唯一一件事就是让多球体卡在接缝上。我还尝试将 ERP/ERP2 设置为 0.9/1.0。[编辑] 好的,经过更多阅读;如果球体已经接触地面,CCD 将不起作用,如果我理解正确,ERP 只会影响带有关节的物体。
地面是在 Blender 中制作的三角网格,并使用 gainStaticNodeShape 获取形状。我试图缩放网格以获得更小的多边形,但即使是最小的(对于游戏可接受的)尺寸也不起作用,大约 32k 索引和 11k 多边形,500x500 单位,多球体的半径为 0.45 单位。[编辑] 多球体是两个相互重叠的球体,它们仅限于围绕 Y 轴的角运动,因此不能滚动。
球体通过地面快速“吸”,它不会慢慢下沉。我试图用 64 个子步使固定时间步更小 1/420 并没有给出更好的结果。这种情况最常发生在上坡或下坡时。我的地面是缓坡的,但 20% 的坡度似乎足以让它跌倒很多,但它也可能发生在水平地面上,只是不那么频繁。
当我进行第一次测试时,我使用了一个展开的大立方体作为地面,效果很好。
所以我现在的问题是我什至不知道为什么会这样,所以我不知道下一步该尝试什么?谁能给我一个解决方案或一些指示。
增加多球体大小有什么用(对于游戏,我不能增加超过 25-30%)我没有明确设置任何碰撞边距,但我认为这只会让我的球体漂浮在地面上?将地面从静态物体变为运动物体有什么好处吗?
如果球体低于地面,直接从球体向下使用射线测试并将其向上推是否有效?我认为不是,如果它首先能探测到地面,为什么它会掉下来..?
[编辑:附加信息] 在论坛和堆栈溢出时,有很多类似的问题出现。大多数似乎是关于非常小的物体。小物体(>0.2m)显然不是子弹的好选择,除非您想大量增加模拟步骤的数量。我的问题似乎不属于这一类,因为我最小的物体直径为 0.9m?
我现在还进行了调试绘制,以查看我用作地面的修剪的法线。我找不到法线的任何错误。
我还尝试增加球体的碰撞余量,但无济于事。
我进一步尝试使用建议的设置: ((btDefaultCollisionConfiguration)world.collisionConfiguration).setPlaneConvexMultipointIterations(3,3); ((btDefaultCollisionConfiguration)world.collisionConfiguration).setConvexConvexMultipointIterations(3, 3); 没有不同。
然而,我确实读到过关于光线投射效果不佳的大三角网格,我的网格是 512x512 的大单位,但我不确定这是否会导致我的对象从网格中掉下来?
我还读到球体形状存在三角形问题,但我再次不确定这是否是我的情况?我正在使用的球体被锁定以在所有轴上旋转。
我也尝试过使用 btCapsule 但它给出了相同的结果.. 气缸会更好吗?[编辑] 我尝试使用圆柱体,因为球体和胶囊不起作用。气缸工作得更好。不过,我仍然让它失败了一次。在通过球体/胶囊会非常快速和轻松地通过的地方之前,圆柱体一直在晃动。也许这可能是潜在问题的线索?不过,圆柱体并不是最适合角色形状的……
另一个可能的原因可能是网格中的三角形的边太长或边之间的比率很大。我在我的球体总是落下的斜坡上发现了一些。如果这确实是问题,除了在 Blender 中手动编辑网格外,我可以做些什么吗?
正如您所看到的,有很多这些问题和很多可能的答案,我不知道哪一个与我的情况相对应,有更好洞察力的人提供一些指示意义重大,谢谢!
libgdx - Libgdx 摧毁多个身体
所以基本上我在尝试破坏不在屏幕范围内的物体时遇到错误。当其他类型的主体被破坏时,我的一种类型的主体也开始表现得很奇怪(示例子弹开始向后移动)这里是代码示例:
主游戏循环类:
其他类:
bullet - 将 btSoftBodyHelpers::CreateFromTriMesh 与 trimesh 一起使用
我一直在尝试在我的项目中获得对软体的支持,我已经添加了所有基元,包括静态三角形网格,如下所示:
我现在一直在尝试实现软体。正如我所提到的,我确实有三角形,我想我可以重新使用三角测量代码来创建具有以下功能的软体对象:
我用硬编码的兔子网格成功地做到了这一点,但现在我想将任何三角网格插入到这个函数中。但是我有点迷失了确切地确定要发送哪些参数(如何从我的三角网格中获取正确的参数)。
你们中有人有这方面的例子吗?(不是硬编码的,而是来自
类型对象?)
它确实适用于子弹具有的预定义类型形状,所以我的更新循环和所有工作都很好。
opengl - 尝试渲染时出现意外的飞行框
因此,对于图片中的快速示例:
这个是正常的:
这是在 X 或 Y 轴上旋转 180 度之后:
我根本不明白为什么会这样。我正在使用 OpenTK 渲染一个简单的子弹物理场景。代码很简单,处理矩阵的方式似乎有问题。这是直接的渲染代码:
我试过把它分解成它的组件:平移向量很好,缩放很好,在 Z 轴上旋转看起来很好......当你在 X 或 Y 轴上添加旋转时,它开始飞行。我有控制台输出:在两个图像中,框在 Z 轴上正好是 6.9999。
我哪里错了?我错过了什么?我该如何解决?!
javascript - BulletPhysics (ammo.js) - 你将如何对物体施加力?
澄清一下 -ammo.js
是使用 mscripten 的 Bullet Physics 的一个端口
我有一个需要用力推动的角色(本质上是一个障碍)。我已经尝试了(我认为)所有的力量方法,但我仍然无法移动方块。
setVelocity(1,0,0)
甚至不移动块 - 它只是阻止重力作用于它!
applyImpulse([0,0,200000],[0,0,0])
绝对什么都不做。
applyForce([0,0,200000],[0,0,0])
绝对什么都不做。
3d - 找到一种在边缘碰撞中修复错误碰撞法线的方法
主要问题是 Bullet 2(具体来说是 2.82 - 也许 Bullet 3 还没有检查过它)糟糕地处理边缘碰撞,产生倾斜的反应法线。
测试用例 1:一个小的btBoxShape
,定位 (0,9,0),垂直对齐,落在另一个盒子的(btBoxShape
也由它制成)面上,并列。法线计算正确,碰撞仅发生在 Y(垂直)轴上。盒子在 OY 轴上轻微反弹并保持围绕它的中心。
测试用例 2:一个小盒子,位于 (0,9,0) 垂直对齐,(同上)落在另一个盒子的面上,(这次btBvhTriangleMeshShape
由 2 个共面三角形组成),也对齐。法线计算不正确,碰撞发生在所有轴上。盒子反弹到一边,有时(取决于特定的碰撞坐标)非常明显。
即使对法线进行硬编码并基于它重新计算碰撞点(见下文)也无济于事。
尽管正确设置 tri info 并验证代码执行正常,但使用 NBbtAdjustInternalEdgeContacts
并没有任何明显的帮助。虽然它确实有效并且对模拟的可靠性有一些小的改进(尽管 CPU 成本很高),但它仍然不能解决这个特定问题。
问题是:如何修复案例 2 的行为以匹配案例 1。任何如何避免这种情况的建议(欢迎使用代码),或者为什么这不能按应有的方式工作。
进一步参考:
https://github.com/bulletphysics/bullet3/issues/92
http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php?f=9&t=8113
https://bullet.googlecode.com/files/GDC10_Coumans_Erwin_Contact.pdf
https://code.google.com/p/bullet/issues/detail?id=27
http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php?f=9&t=4603