1

今天,我尝试玩转 Physx 和 Physx 可视化调试器,和往常一样,新手有问题和疑问。我会尽量用我糟糕的英语技能来描述我的问题。

1)我设法创建了一个 physx 场景。添加了一个动态actor并对其进行了操作。我在 Visual Debugger 中看到它的动作。这是一个标准的 PxSphereGeometry 球。但是,当我在场景中添加第二个球时,第二个球是不可见的,但我可以看到发生了碰撞。这是代码,如果有人能指出我有什么问题,我将不胜感激:

PxMaterial* mMaterial;

mMaterial = mPhysics->createMaterial(0.5f, 0.5f, 0.5f); //static friction, dynamic friction, restitution

if(!mMaterial)
error("createMaterial failed!");

PxVec3 position(0, 50, 0);
PxRigidDynamic* aSphereActor =  PxCreateDynamic(*mPhysics, PxTransform(position), PxSphereGeometry(3), *mMaterial, 1.f);
PxRigidDynamic* aTrActor =  PxCreateDynamic(*mPhysics, PxTransform(PxVec3(3, 1, 1)), PxSphereGeometry(3), *mMaterial, 1.1f);

if(!aSphereActor)
error("Unable to create sphere actor");

aSphereActor->setMass(1);

aTrActor->setMass(10);

PxRigidStatic* plane = PxCreatePlane(*mPhysics, PxPlane(PxVec3(0,1,0), 0), *mMaterial);
if (!plane)
error("create shape failed!");

mScene->addActor(*plane);
mScene->addActor(*aSphereActor);
mScene->addActor(*aTrActor);


while(true)
{
mScene->simulate(1.0f / 30.0f);
if(!mScene->fetchResults(true))
error("cant fetch result");
Sleep(10);
}

在这个场景中,aSphereActor 与 aTrActor 发生碰撞,但我在 Visual Debugger 中看不到 aTrActor,但碰撞完全可见。

2) Nvidia 的文档非常非常差。对于像我这样的新手来说,找到它的方式是一种折磨。所以我想知道如何导入 3d 模型并将其添加到场景中。我知道有一个适用于 3ds max、maya 等的 Physx 插件。假设我有一个用这个插件导出的模型,我如何将它导入我的应用程序并将其添加到场景中?

3) 在创建场景期间

sceneDesc.gravity = PxVec3(0.0f, -9.81f, 0.0f);

,我应该提供什么值来获得真正的重力,我们在地球上拥有的重力

4)我可以为演员分配质量,但我不知道质量是哪个测量单位。例如,如果我设置 aSphereActor->setMass(1); aSphereActor 会是 1 公斤、克还是什么?

非常感谢大家。我感谢您的帮助。

4

1 回答 1

2

首先,我在这个季度做我的第一个 Physx 项目。(读作,我可能在编造这个)
1)
  你不检查 aTrActor 的创作,但我不认为这是你的问题。
  检查您的绘制/更新回调中是否有 aTrActor。
2) 不知道3)
  -9.81   m/s^2 是地球重力的加速度。   我猜 PxVec3 是相对于每个轴的重力。   因此,PxVec3(0.0, -9.81, 0.0) 没有 x 或 z 加速度和 -9.81 m/s^2 y 加速度。 4)   #3 的答案表明单位是公制的。   您可能可以将它们全部放在标准中,但 metric > 标准 imo。








只是看看日期,这可能对戴维塔没有帮助,但希望它对某人有用。

于 2013-02-10T04:26:48.657 回答