问题标签 [jbullet]
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.
java - 使用 Jbullet 进行 3D java 碰撞检测
因此,我花了很长时间尝试从头开始为自己的游戏引擎开发碰撞检测系统,但由于时间不足而无果而终。最后我决定尝试使用 Jbullet 来让事情变得更快。现在文档基本上没用了,我在尝试将项目符号代码传输到 java 时遇到了一些困难(或者我传输的内容不起作用)。我一直在扯头发试图搜索库代码,但是我希望节省的时间几乎没有用。所以,我将解释我在做什么,也许你们可以帮助我。我只是在寻找简单的碰撞检测,就像你撞到东西然后现在只打印一行。其余的我可能可以自己解决。
所以我创造了我的世界:
所以我有我的实体类,在那里我有另一个类,用于存储附加到该实体的物理对象的所有信息。这让我可以简单地做: entity.getPhysics().getCollisionObject()/.setPosition() 等等...
然后我在该类中创建我的 CollisionObject:
我相信这会从 LWJGL 库的 Vector3f 和 Jbullets Vector3f 转换已经制作的网格,我用它来渲染我的实体。然后它从网格中的这些顶点创建一个 ConvexHullShape,我相信:
应该是为了简化网格(来自文档)。然后我只创建碰撞对象。很简单,我觉得...
我创建了我的刚体(虽然我不确定我需要一个刚体还是只是一个碰撞对象,如果有人能让我知道这是不是真的,那就太好了):
然后我通过我的游戏循环:
我是从某人那里得到的……不过我忘记了在哪里。所以,基本上什么都没有发生......我不确定,但也许我必须将对象添加到流形中,或者类似的东西。不知道该怎么做。有什么帮助吗?
编辑:我现在所做的是创建碰撞形状,就像一个随机大小的盒子:
然后我创建了幽灵身体:
那我就照你说的做,它仍然没有返回“命中”;
编辑2:
所以我在我的实体类中像这样创建对象:
并更新位置和内容:
好的,这是我的 PhysicsEntity 类,我在其中设置它:
谢谢,
java - 在 IntelliJ 中运行 JBullet 演示
有没有人在 IntelliJ 中成功运行过 JBullet 的演示?当我使用 ant 构建脚本运行演示时,我发现了这样的错误:
C:\Users\halin_000\ProgrammingProjects\Java\CS351L\JBullet\build.xml:77: java.lang.IllegalStateException: Stack.alloc(Class) 的第一个参数必须是常量(在 com.bulletphysics.collision.dispatch 类中。 ConvexConcaveCollisionAlgorithm, 方法 processCollision)
你如何解决问题?
android - Jbullet 的 Android Lollipop 5.0 垃圾收集问题(特别是 gbullet)
我正在尝试使用 jbullet 特别是 gbullet 实现 raycast 车辆,但我在 android 5.0 Lollipop 中遇到了一些垃圾收集器问题。我确实使用纯 Java 端口,所以它在 GLThread 上运行。我用的是三星 Galaxy 5S。这是堆栈跟踪:
android - 将屏幕坐标转换为 OpenGL 坐标
我正在为 Android 创建一个骰子滚轮应用程序。使用 Kotlin、OpenGL-ES 和 jBullet。我已经实现了骰子。现在我需要创建墙壁,否则骰子会滚出屏幕。
因为屏幕可以有不同的纵横比,我试图用 来确定墙壁的位置glUnProject
,但我无法弄清楚。我收到的坐标不正确。
java - LWJGL Mesh to JBullet collider
我正在努力在 LWJGL 3 中创建体素引擎,我已经掌握了所有基础知识(块、网格渲染等)。
现在我正在使用 JBullet 添加物理。这是我第一次直接使用 JBullet,但我之前在其他 3D 引擎中使用过 Bullet。
从这里我收集到,创建与我的网格形状相同的碰撞对象所需要做的就是将顶点和索引插入 aTriangleIndexVertexArray
并将其用于 a BvhTriangleMeshShape
。
这是我的代码:
我知道顶点和索引是有效的,因为我在绘制网格后将它们放在这里。
这似乎有点工作,但是当我尝试将一个立方体刚体放到地形上时,它似乎在地形上方碰撞!(我知道立方体设置正确,因为如果我移除网格对撞机,它会在 处撞击基础接地平面y=0
)。
我想这可能是一个扩展问题(虽然我不明白这可能是怎么回事),所以我尝试改变:
colObject.setWorldTransform(new Transform(new Matrix4f(new Quat4f(0, 0, 0, 1), new Vector3f(position.x, position.y, position.z), 1f)));
至:
colObject.setWorldTransform(new Transform(new Matrix4f(new Quat4f(0, 0, 0, 1), new Vector3f(position.x, position.y, position.z), 0.5f)));
但是在改变比例之后,1
它就像网格对撞机不存在一样。
很难找到 JBullet 围绕网格碰撞的任何资源或代码,我已经为此工作了将近 2 天,所以我希望你们中的一些以前做过的人可以帮助我:)
更新1:
我创建了 IDebugDrawer 的实现,以便可以在场景中绘制调试信息。
为了测试它,我只用一个基本的地平面和一个下降的立方体来运行它。我注意到当立方体下落时,aabb 与立方体的大小相匹配,但是当它撞到地板时,aabb 变得比原来大得多。
我将假设这是由于碰撞弹跳导致的正常 Bullet 行为,稍后再看,因为它不会影响我当前的问题。
我重新启用了从块网格中生成对撞机,并看到了这个:
看起来块的 aabb 可视化比实际块高很多(我知道我对整个碰撞对象的 y 定位是正确的)。
我将尝试弄清楚是否可以绘制实际的碰撞网格。
更新 2:
据我看到的源,碰撞器的网格应该在调试中绘制,所以我不确定为什么它不是。
我尝试将 Box 刚体更改为球体,它实际上滚过可视化 aabb 的顶部,用于地形对撞机。它只是滚平了,并没有撞到或下到那里的山丘或地形的斜坡上,所以它显然只是在 aabb 的平坦顶部滚动。
java - 如何使用子弹 HeightfieldTerrainShape
HeightfieldTerrainShape
我正在努力从 JBullet 物理库中找出如何使用。如我所见,有 2 个构造函数可用:
和
heightScale
, minHeight
,maxHeight
并且upAxis
是自我解释的。但究竟什么是“heightStick”?我如何确定它的宽度和长度?heightfieldData 的预期格式是什么?我假设这只是浮点数的字节缓冲区?
callback - 当 JBullet 检测到碰撞时如何执行回调?
所以目前我有一个在自己的线程上运行的 JBullet 实例,我不知道如何获取有关 JBullet 20101010-1 上的冲突的信息。
我尝试调用 ContactAddedCallback,如下所示,但没有任何反应。