使用球形节点,圆柱形骨骼和锥形扭曲约束,我设法在3维中创建一个简单的骨架.我正在使用子弹物理库的分支(@chandlerprall的physijs,以及threejs).
现在我想补充肌肉.在过去的两天里,我一直试图获得某种滑动约束或通用6自由度约束,以使肌肉能够收缩并将两个节点拉向彼此.
我得到各种疯狂的结果,我开始认为我会以错误的方式解决这个问题.我不认为我可以简单地使用两个锥形扭曲约束,然后沿着其长度轴缩放肌肉,因为缩放碰撞网格显然相当昂贵.
我需要的只是一个"肌肉",它可以连接到两个节点并"收缩"以拉入其两个节点.
任何人都可以提供一些关于如何使用子弹引擎(或者真的,任何物理引擎)最好地解决这个问题的建议吗?
编辑:如果我不需要肌肉发生碰撞怎么办?说我只需要一个约束2个节点的视觉肌肉:
这两个节点线性约束到肌肉碰撞网格,它不是一个大的网格,只是一个小的,只有在那里保持视觉肌肉的几何形状,并提供一个轴约束节点.
然后,我可以使用滑动约束附带的线性马达沿轴移动节点.任何人都可以看到这个问题吗?我最初的问题是较小的碰撞网格有点不稳定,似乎在整个地方移动......
我有一些关于子弹物理库的一般性问题.
以下是我目前的理解:
btDiscreteDynamicsWorld - 最简单的物理世界,只处理刚体,也许它具有更好的性能.
btSoftRigidDynamicsWorld - 唯一可以使用大型jello模具的物理世界
btContinuousDynamicsWorld - 如果你有真正的快速物体,这将阻止它们互相预先穿过或相互飞行,但其他方面就像btDiscreteDynamicsWorld.
我对btDiscreetDynamicsWorld,btContinuousDynamicsWorld和btSoftRigidDynamicsWorld类在功能,目的和性能方面的理解是否正确?
为什么用户手册会推荐btDiscreteDynamicsWorld类?
btSoftRigidDynamicsWorld似乎是唯一可以处理软体的世界,那么如果我们想要连续物理整合和软体呢?
考虑使用btContinuousDynamicsWorld的速度有多快,使用它有什么缺点?
编辑:My Buddy Mako也在The Bullet论坛上发布了这个问题:http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php? f = 9&t = 4863
我在哪里可以找到夹具预设,可用于刚体物理引擎,如Box2D来模拟不同材料的行为?
我正在寻找常见材料的密度,摩擦力和恢复原状值,例如:
除了设置这些值以实现真实结果的试验和错误之外,还有其他方法吗?
我为我的游戏编写了一个玩家控制器,它使用刚体给玩家物理.我将恢复原状和摩擦设置为0,将质量设置为80.我的地形具有完全相同的属性,只是质量也是0.每当玩家从高处坠落时,它会在地形表面上反弹几次.这不是我希望我的玩家做出反应的方式.有没有办法防止这种行为?
这是一个说明我的问题的视频.它有点滞后,因为我使用QuickTime录制它,但它应该得到重点.
我想测试子弹物理的春季约束。因此,我创建了一个悬停在地面上方的静态框,并将第二个动态框悬于其下。但是激活弹簧行为无济于事!盒子确实可以自由悬挂。我知道是因为它可以自由旋转。但它不会振荡或发生任何变化。
btCollisionShape *boxShape = createBoxShape(0.2f, 0.2f, 0.2f);
btRigidBody *box1 = createStatic(boxShape);
btRigidBody *box2 = createDynamic(1.0f /*mass*/, boxShape);
box1->setWorldTransform(btTransform(btQuaternion::getIdentity(), { 0.0f, 2.0f, 1.0f }));
box2->setWorldTransform(btTransform(btQuaternion::getIdentity(), { 0.0f, 1.0f, 1.0f }));
btGeneric6DofSpring2Constraint *spring = new btGeneric6DofSpring2Constraint(
*box1, *box2,
btTransform(btQuaternion::getIdentity(), { 0.0f, -1.0f, 0.0f }),
btTransform(btQuaternion::getIdentity(), { 0.0f, 0.0f, 0.0f })
);
// I thought maybe the linear movement is locked, but even using these lines do not help.
// spring->setLinearUpperLimit(btVector3(0.0f, 0.1, 0.0f));
// spring->setLinearLowerLimit(btVector3(0.0f, -0.1, 0.0f));
// Enabling the spring …Run Code Online (Sandbox Code Playgroud) 我希望利用子弹物理或类似的物理引擎来创建一个逼真的骨架模拟人体样的两条腿.也就是说,在两条"腿"的顶部创建一个由圆形质量制成的"身体"模拟,其中每条腿由3个实心连接,通过3个关节连接,每个关节具有一定的自由度和有限的移动范围.每个方向,类似于人体臀部,膝盖和脚踝.
我的目标是一个真实的模型,因此只有当所有关节都正确平衡时它才会"站立",否则它将会下降.
任何有关现有教程或资源的指示,建议或指示都表示赞赏!这看起来像是从头开始做的大量工作......
simulation physics game-physics bulletphysics physics-engine
我对Bullet有两个问题,但它们是相关的.
在HelloWorldApp中,目标是让一个球在一个盒子上弹跳吧?如果我想测试一架飞机,我可以加btCollisionObject一个btStaticPlaneShape而不是一个盒子吗?
如何为每个对象设置自定义恢复,静态和动态摩擦?
我正在使用Blender创建我的模型,并将它们加载到Libgdx中,如果我使用如下所示的模型中心中的Origin创建它们,然后使用此代码创建刚体,则一切正常
Vector3 hescoWallHalfExtents = new Vector3(hescoWall.calculateBoundingBox(bounds).getDimensions()).scl(0.5f);
Run Code Online (Sandbox Code Playgroud)

但是,如果我像这样将模型的底部放置在地面上

然后btRigidbody像这样偏移

有什么明显的方法可以抵消刚体的高度吗?
非常感谢。
斯普里西
我正在将 bullet/ammo.js 与three.js 一起使用。我有一个 3d 网格,我想使用精确的形状与软体进行碰撞检测。有没有办法从网格(在three.js中)创建一个3d刚体(在子弹中)?
下面是一个例子:http : //kidzinski.com/miamisura/lazy3d/(请稍等片刻,下载 3d 模型)。我有一块布落在 3d 身体上,我需要模拟这块布与身体的碰撞。
如果我从根本上误解了某些东西,我是这些框架的新手,抱歉。
我想为Visual Studio 2012构建项目符号物理源代码,但我不确定是否必须使用编译目标Visual Studio 2012或Visual Studio 2012 Win64.
32/64是指我的操作系统还是我要构建的源代码?
问候
首先一些事实:我尝试使用 Visual Studio 2012 在 C++ 中使用 Bullet 实现碰撞检测。到目前为止,我有一个球体:
btCollisionShape* fallShape = new btSphereShape(100);
btDefaultMotionState* fallMotionState =
new btDefaultMotionState(btTransform(btQuaternion(0,0,0,1),btVector3(0,500,0)));
btScalar mass = 1000;
btVector3 fallInertia(0,0,0);
fallShape->calculateLocalInertia(mass,fallInertia);
btRigidBody::btRigidBodyConstructionInfo fallRigidBodyCI(mass,fallMotionState,fallShape,fallInertia);
btRigidBody* fallRigidBody = new btRigidBody(fallRigidBodyCI);
physicsWorld->addRigidBody(fallRigidBody);
Run Code Online (Sandbox Code Playgroud)
我的水平,实现为 btBvhTriangleMeshShape:
triangles.addTriangle(btVector3 (0, 0, 0),btVector3 (0, 0, 0),btVector3 (0, 0, 0));
btCollisionShape* levelShape = new btBvhTriangleMeshShape(&triangles, true, true);
btDefaultMotionState* levelMotionState = new btDefaultMotionState(btTransform(btQuaternion(0,0,0,1),btVector3(0,0,0)));
btRigidBody::btRigidBodyConstructionInfo
levelRigidBodyCI(0,levelMotionState,levelShape,btVector3(0,0,0));
btRigidBody* levelRigidBody = new btRigidBody(levelRigidBodyCI);
physicsWorld->addRigidBody(levelRigidBody);
Run Code Online (Sandbox Code Playgroud)
我知道三角形中只有一个三角形,但它们会发生碰撞。
我现在的问题是,当它们发生碰撞时,我的程序会关闭,没有任何特定错误,只是来自 Visual Studio 的未处理异常窗口。
有人有想法吗?
PhysX FleX很酷。但是我更喜欢Bullet。但是,我在那里找不到任何类似的功能。
有什么建议么?
我正在使用Bullet Physics Engine.我创建的世界基于:
每个运动和动态之间的碰撞按预期工作.
然而,当一个运动碰撞另一个时,它会超越,我需要它们碰撞并"对这个碰撞做出反应"(就像一个Dinamic身体)
我一直在寻找答案,但我没有找到任何解决方案.我能做什么?谢谢
collision-detection bullet kinematics collision bulletphysics
bulletphysics ×13
bullet ×5
c++ ×4
game-physics ×4
physics ×3
three.js ×2
ammo.js ×1
box2d ×1
box2d-iphone ×1
chipmunk ×1
cmake ×1
collision ×1
jbox2d ×1
kinematics ×1
libgdx ×1
rigid-bodies ×1
simulation ×1