今天,我尝试玩Physx和Physx视觉调试器,一如既往,新手遇到问题。我将以英语水平不佳尽我所能描述自己的问题。

1)我设法创建了一个physx场景。添加了动态 Actor 并对其进行了操纵。我在Visual Debugger中看到了它的 Action 。这是标准的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);

,我应该提供什么值(value)才能获得真实的引力,

4)我可以给 Actor 分配质量,但是我不知道质量是哪个度量单位。例如,如果我设置aSphereActor-> setMass(1); aSphereActor将是1kg,克还是什么?

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

最佳答案

首先,我正在本季度完成我的第一个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> standard imo。
只是看一下日期,这可能对达维塔没有帮助,但希望对某些人有用。

关于c++ - Physx 3的几个新手问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11353224/

10-11 14:44