今天,我试着使用Physx和Physx可视化调试器,像往常一样,新手有问题和问题。我会尽量用我糟糕的英语能力来描述我的问题。
1)我设法创建了一个物理场景。添加了一个动态参与者并对其进行了操作。我在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发生碰撞,但我在可视调试器中看不到aTrActor,但是碰撞是完全可见的。
2) Nvidia的文档非常非常差。对于像我这样的新手来说,找到它的方法是一种折磨。所以我想知道如何导入3d模型并将其添加到场景中。我知道有一个用于3ds max,maya等的Physx插件。假设我有一个用这个插件导出的模型,我如何在我的应用程序中导入它并将其添加到场景中?
3)在场景创建过程中
sceneDesc.gravity = PxVec3(0.0f, -9.81f, 0.0f);,我应该提供什么值来获得真正的重力,我们在地球上拥有的重力?
4)我可以将质量分配给参与者,但是我不知道质量在哪个度量单位中。例如,如果我设置了一个aSphereActor >setMass(1);aSphereActor将是1 1kg,g还是其他值?
非常感谢大家。我很感谢你的帮助。
发布于 2013-02-10 12:26:49
首先,本季度我正在做我的第一个Physx项目。(读起来,这可能是我编造的)
1)
你不检查aTrActor的创作,但我不认为这是你的问题。
检查绘图/更新回调中是否存在aTrActor。
2)
*邓诺
3)
-9.81米/秒^2是地球引力的加速度。
我猜想PxVec3就是相对于每个轴的重力。
因此,PxVec3(0.0,-9.81,0.0)是无x或z加速度和-9.81m/s^2y加速度。
4)
#3的答案表明单位是公制的。
“你可以在标准的,但公制的>标准的imo中把所有这些都放在一起。
只是看了一下日期,这可能对Davita没有帮助,但希望它能对某些人有用。
https://stackoverflow.com/questions/11353224
复制相似问题