Physx 三角网烹饪仅在一侧发生碰撞

Posted

技术标签:

【中文标题】Physx 三角网烹饪仅在一侧发生碰撞【英文标题】:Physx triangle mesh cooking colliding only in one side 【发布时间】:2022-01-17 03:04:06 【问题描述】:

我正在为 uni 进行一个项目,该项目是关于使用我们自己的引擎并使用 Physx 制作一个简单的 3d 游戏。 现在我成功地从高度图创建了一个 3D 地形并对其进行了烹饪,这样我就可以在上面放置一个对撞机。

您可以在下图中看到它的外观,但我有一个问题。在地形的这一侧时,我实际上可以通过

但是当我在这边时(所以在下面):

我不能,因为碰撞很好。现在我想把它倒过来,我想在地形的顶部而不是从下面发生碰撞。

这是我的代码:

    meshDesc.points.count = static_cast<PxU32>(vertexes.size());
    meshDesc.points.data = vertices;
    meshDesc.points.stride = sizeof(PxVec3);
    meshDesc.triangles.count = static_cast<PxU32>(faces.size())/3;
    meshDesc.triangles.data = indices;
    meshDesc.triangles.stride = 3 * sizeof(PxU32);

    PxTolerancesScale scale1;
    PxCookingParams params(scale1);
    
    // disable mesh cleaning - perform mesh validation on development configurations
    params.meshPreprocessParams |= PxMeshPreprocessingFlag::eDISABLE_CLEAN_MESH;
    // disable edge precompute, edges are set for each triangle, slows contact generation
    params.meshPreprocessParams |= PxMeshPreprocessingFlag::eDISABLE_ACTIVE_EDGES_PRECOMPUTE;
    // lower hierarchy for internal mesh
    params.midphaseDesc.mBVH33Desc.meshCookingHint = PxMeshCookingHint::eCOOKING_PERFORMANCE;

    PhysXManager::get().getPxCooking()->setParams(params);
    PxTriangleMesh* triMesh = NULL;
    triMesh = PhysXManager::get().getPxCooking()->createTriangleMesh(meshDesc, 
    PhysXManager::get().getgPhysx()->getPhysicsInsertionCallback());
    
    
    PxMeshScale geomScale = PxMeshScale((PxVec3(scale)));
    PxTriangleMeshGeometry geom = physx::PxTriangleMeshGeometry(triMesh, geomScale);
    
    body = PhysXManager::get().createTerrain(PxTransform(pos), geom,scene);

在 createTerrain() 中:

PxRigidStatic* PhysXManager::createTerrain(const PxTransform& t, PxTriangleMeshGeometry& geom, int scene) 
    PxShape* shape = PhysXManager::get().getgPhysx()->createShape(geom, *gMaterial, true);
    shape->setName("Terrain");
    PxRigidStatic* body = gPhysics->createRigidStatic(t);
    body->attachShape(*shape);
    addToScene(body, scene);
    return body;

你能帮我弄清楚该怎么做吗?

谢谢!

【问题讨论】:

【参考方案1】:

在做了一些测试之后,我只是愚蠢!另一方面,Physx 被渲染为参考,在将其提供给烹饪之前反转列表解决了我的问题。关闭这个。

【讨论】:

以上是关于Physx 三角网烹饪仅在一侧发生碰撞的主要内容,如果未能解决你的问题,请参考以下文章

具有动态和静态刚体的 PhysX 碰撞过滤器

如何检测我在 OnCollisionExit2D() 上退出的对象的哪一侧

unity学习笔记(碰撞器与触发器)

碰撞检测算法 - 圆柱体内的图像 [关闭]

OpenGL 3.0 窗口碰撞检测

碰撞时,我的玩家以外的物理实体不会调用 didBeginContact