使用子弹物理将物理应用于玩家

时间:2014-03-24 21:56:56

标签: c++ opengl-3 bulletphysics

所以我试图通过使用子弹物理来正确地将物理应用到游戏中时遇到了很多问题。我已经尝试过运动机构不成功。我现在正在尝试使用一个我没有成功的刚体。下面粘贴的是玩家矩阵和刚体位置的更新代码。我的问题是如何才能正确更新玩家的位置。

更新玩家的刚体和相机的矩阵* gCamera.matrix只是投影和视图矩阵的倍增在一起

 physics.PlayerBody->getMotionState()->getWorldTransform(k);
k.getOpenGLMatrix(glm::value_ptr(gCamera.matrix));

btVector3 j;
j = physics.PlayerBody->getLinearVelocity();

gCamera.position.x = j.getX();
gCamera.position.y = j.getY();
gCamera.position.z = j.getZ();


btVector3 pastPos;
pastPos.setX(gCamera.position.x);
pastPos.setY(gCamera.position.y);
pastPos.setZ(gCamera.position.z);

gCamera.GetInput(window);


float lVelocityX = sin(gCamera.horizontalAngle * 3.14159265359 / 180) * 2;
float lVelocityY = physics.PlayerBody->getLinearVelocity().y();
float lVelocityZ = cos(gCamera.verticalAngle * 3.14159265359 / 180) * 2;
//physics.PlayerBody->setLinearVelocity(btVector3(lVelocityX, lVelocityY, lVelocityZ));
physics.PlayerBody->setLinearVelocity(btVector3(gCamera.position.x, gCamera.position.y, gCamera.position.z));

btTransform t;
t.setFromOpenGLMatrix(glm::value_ptr(gCamera.matrix));
physics.PlayerBody->getMotionState()->setWorldTransform(t);
physics.PlayerBody->setCenterOfMassTransform(t);

1 个答案:

答案 0 :(得分:1)

如果您想控制玩家的位置,请使用运动学。我知道你遇到了麻烦,但这只是最好的解决方案。

如果你想让物理学移动玩家,你需要一个僵硬的身体并施加力量来移动它。

不可能以可靠的方式自己移动刚体。在过去,我不得不传送物品,我已经移除了并添加了一个新的刚体,但是你不想为你的玩家做每一帧。