- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试将 Bullet Physics 仅用于碰撞检测。我不需要它为我移动任何对象或使用回调处理渲染。我只想更新每一帧的对象位置,并在发生碰撞时用它来告诉我。为了获得最简单的示例,我试图找到以 btBoxShape 作为其形状的对象之间的碰撞。一切运行良好,没有崩溃或明显的内存泄漏,但我没有发生碰撞,所以我一定是在某个地方犯了一些错误。我尽量保持简短,不会遗漏任何重要内容。
这是我的世界设置函数:
collisionConfig = new btDefaultCollisionConfiguration();
dispatcher = new btCollisionDispatcher(collisionConfig);
overlappingPairCache = new btDbvtBroadphase();
solver = new btSequentialImpulseConstraintSolver;
dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher,
overlappingPairCache, solver, collisionConfig);
dynamicsWorld->setGravity(btVector3(0.0f, -9.8f, 0.0f));
现在我有类型为 btCollisionObject* 的玩家和敌人对象。我正在这样设置它们:
mPlayerBox = new btBoxShape(btVector3(1,3,1));
mPlayerObject = new btCollisionObject();
mPlayerObject->setCollisionShape(mPlayerBox);
btTransform playerWorld;
playerWorld.setIdentity();
//playerPos is a D3DXVECTOR3 that holds the camera position.
playerWorld.setOrigin(btVector3(playerPos.x, playerPos.y, playerPos.z));
mPlayerObject->setWorldTransform(playerWorld);
mPlayerObject->forceActivationState(DISABLE_DEACTIVATION);//maybe not needed
dynamicsWorld->addCollisionObject(mPlayerObject);
我对我的敌对对象做了基本相同的事情。
然后每一帧我都用这样的东西更新我所有的对象:
btTransform updatedWorld;
updatedWorld.setIdentity();
updatedWorld.setOrigin(btVector3(position.x, position.y, position.z));
mPlayerObject->setWorldTransform(updatedWorld);
//do the same for my enemies, and then...
dynamicsWorld->performDiscreteCollisionDetection();
//Also tried doing this with stepSimulation(deltaTime, 7), but nothing changed.
//stepSimulation seems to only be for letting Bullet set world Transforms?
//check collisions with player
dynamicsWorld->contactTest(mPlayerObject, resultCallback);
int numManifolds = dynamicsWorld->getDispatcher()->getNumManifolds();
if(numManifolds > 0)
{
//there's a collision, execute blah blah blah
}
最后,这是定义我的结果回调的结构:
struct rCallBack : public btCollisionWorld::ContactResultCallback
{
btScalar rCallback::addSingleResult(btManifoldPoint& cp, const btCollisionObject*
colObj0, int partId0, int index0, const btCollisionObject* colObj1, int partId1,
int index1)
{
btVector3 ptA = cp.getPositionWorldOnA();
btVector3 ptB = cp.getPositionWorldOnB();
return 0;
}
}
我看了很多演示,但它们似乎主要将移动留给了 Bullet,并且由于我以设定的速度移动角色,而当它们发生碰撞时没有任何特殊物理,我很难适应示例到我的应用程序中。结果回调实际上来自论坛上的这篇帖子: http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=6816它是关于使用三角形网格,但它似乎最接近我试图实现的。
无论如何,如果你读到这里,谢谢你!!非常感谢您提供任何建议或链接。
最佳答案
我正在编写一个 IOS 应用程序,其中有飞行器在 3D 场景中相互射击。我使用子弹物理学进行碰撞检测我将飞行器设置为运动学对象,我的逻辑移动飞行器,然后更新运动学对象的 btMotionState worldTransform。我也没有得到任何碰撞检测,直到我更改以下两个语句(将玩家和敌人的掩码和组设置为相同)
dynamicsWorld->addRigidBody(mPlayerObject,1,1);
dynamicsWorld->addRigidBody(mEnemyObject,1,1);
...
dynamicsWorld->setInternalTickCallback(myTickCallback);
然后我可以看到
void myTickCallback(btDynamicsWorld *world, btScalar timeStep) {
int numManifolds = world->getDispatcher()->getNumManifolds();
printf("numManifolds = %d\n",numManifolds);
}
当物体发生碰撞时,numManifolds 值变为 1。
关于c++ - Bullet Physics 最简单的碰撞示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11175694/
我正在做一个需要翻译的项目 qemu-guest物理地址来托管虚拟/物理地址。 我正在使用 VMI(虚拟机自省(introspection))来自省(introspection) qemu 进程(KV
我正在使用下面的类,但给出了类似 Caused by: org.hibernate.DuplicateMappingException: Table [] contains physical colu
我正在 3D 中进行刚体模拟。现在我在旋转方面遇到了精度问题。最终,物体(没有外力)的方向会收敛到围绕具有最小惯性矩的轴。降低 dt 有帮助,但不是太多。有没有办法最大限度地减少这种漂移? 这是我目前
我正在尝试做一个基本版本的太空 war (http://en.wikipedia.org/wiki/Spacewar_%28video_game%29),但我不知道如何做惯性部分 那是我的代码:我应该
哪些技术用于实时模拟水等流体,例如在电子游戏中? 特别是,我正在为 Uni 的(不幸的是相当短的)物理项目寻找一个项目创意,所以越简单越好(如果流体模拟中有任何“简单”之类的东西......) 最佳答
怎么办数值积分 (什么数值方法,使用什么技巧)用于无限范围内的一维积分,其中被积函数中的一个或多个函数是 1d quantum harmonic oscillator波函数。其中,我想计算谐振子基中某
我正在遵循处理书中的一个示例,该示例描述了如何计算非正交碰撞(在非水平平面上弹跳的球),但是,我并不真正理解这四个表达式背后的逻辑。 float groundXTemp = cosine * del
在足球比赛中,我正在使用转向行为来计算转向力。这部分没问题。 但是,我正在寻找实现简单的2D人类运动的最佳方法。 例如,当转向力与当前速度或航向矢量之间的cos(角度)小于0.5时,玩家不应“转向”(
我正在写一个小船的模拟(一艘有动力而不是帆的帆船)。它有一个方向 Helm 和一个龙骨,我有大部分的物理处理推力和阻力。我已经模拟了穿过船的阻力高于沿船的阻力,以减少侧向滑动。 然而,它的行为并不完全
我的问题很简单。我有两个四面体,每个四面体都有一个当前位置、一个空间线速度、一个角速度和一个质心(实际上是旋转中心)。 有了这些数据,我试图找到一个(快速)算法,它可以精确地确定(1)它们是否会在某个
有人可以向我解释为什么Verlet集成优于Euler集成吗?为什么RK4比Verlet更好?我不明白为什么这是一种更好的方法。 最佳答案 Verlet方法擅长于仿真节能系统,其原因是辛。为了理解该语句
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 4年前关闭。 Improve this questi
我最近在排练Sprite Kit,遇到了一个很奇怪的问题。当缩放(改变其比例)父节点时,通过 SKPhysicsJointPin 连接在一起的实体逐渐彼此分离,然后关节断裂。让我给你看一下图像。 这是
Box2d中刚体的定义是 A chunk of matter that is so strong that the distance between any two bits of matter on
我正在制作一款游戏,如果您使用的是 Windows 或 Linux,您可以在这里看到:http://insertnamehere.org/birdsofprey/ 如果您在鸟上单击并按住鼠标,您可以看
我想模拟自由落体和与地面的碰撞(例如弹跳球)。物体将在真空中下落——可以忽略空气阻力。与地面的碰撞会导致一些能量损失,因此物体最终会停止移动。我使用 JOGL 渲染一个点,它是我的下落物体。重力恒定
我正在编写一个模拟,其中我们需要对一些盒子在一组传送带上移动时进行相当准确的建模。目前,我们检测盒子是否与静态传送带表面碰撞,并根据传送带的预期速度向每个盒子施加脉冲。有没有办法让实际的输送机表面移动
我正在使用 Ogre 编写物理模拟和 MOC . 我有一个从相机位置拍摄的球体,它使用相机的前向矢量沿相机面向的方向行进。 我想知道如何检测我的球体和另一个网格之间的碰撞点。 如何使用 MOC 或 O
我目前正忙于为我的 Win32 API 和 C++ 编程类(class)编写一个小球物理引擎。我已经完成了 GDI 后缓冲渲染器和整个 GUI(还有一些需要调整的东西),但我已经接近完成了。最后唯一的
我希望利用子弹物理学或类似的物理引擎来创建具有两条腿的类人 body 的逼真骨架模拟。也就是说,创建一个由圆形质量制成的“ body ”模拟在两条“腿”之上,其中每条腿由通过 3 个关节连接的 3 个
我是一名优秀的程序员,十分优秀!