因此,在尝试通过使用子弹物理学将物理正确地应用于游戏中时,我遇到了很多问题。我尝试过运动机构失败。我现在正在尝试使用刚获得很少成功的刚体。下面粘贴的是玩家矩阵和刚体位置的更新代码。我的问题是如何正确更新玩家的位置。

更新Player的刚体和相机的矩阵* 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);

最佳答案

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

如果要让物理学家移动播放器,则需要一个刚体并施加力使其移动。

您自己不可能以可靠的方式移动刚体。过去我不得不传送物体的地方,我已经删除并添加了一个新的刚体,但是您不想为您的播放器做每一帧。

关于c++ - 使用子弹物理将物理应用于玩家,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22621452/

10-13 07:01