1

シンプルなものを作成しましたbtCollisionShape(1 つの三角形から作成された triMesh から):

btTriangleMesh *mTriMesh = new btTriangleMesh();

btVector3 v0(1, 1,0);
btVector3 v1(-1,-1,0);
btVector3 v2(1,-1,0);

mTriMesh->addTriangle(v0,v1,v2);

btCollisionShape *mTriMeshShape = new btBvhTriangleMeshShape(mTriMesh,true);

私が作成しましたClosestRayResultCallback

btVector3 Start(-1, -1,-1);
btVector3 End(1,1,1);

btCollisionWorld::ClosestRayResultCallback RayCallback(Start, End);

光線の開始と終了があり、変換が適用btCollisionWorld::rayTestSingleされていない場合、どのように実行できますか?btCollisionShape

その間、私は全世界でrayccastを試しました(実際には必要ありません)が、間違っているようです =( no hasHit:

int i;

btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration();

btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration);

btBroadphaseInterface* overlappingPairCache = new btDbvtBroadphase();

btSequentialImpulseConstraintSolver* solver = new btSequentialImpulseConstraintSolver;

btDiscreteDynamicsWorld* World = new btDiscreteDynamicsWorld(dispatcher,overlappingPairCache,solver,collisionConfiguration);

btTriangleMesh *mTriMesh = new btTriangleMesh();

btVector3 v0(1, 1,0);
btVector3 v1(-1,-1,0);
btVector3 v2(1,-1,0);

mTriMesh->addTriangle(v0,v1,v2);

btCollisionShape *mTriMeshShape = new btBvhTriangleMeshShape(mTriMesh,true);
btCollisionObject *mTriMeshCO = new btCollisionObject ();

mTriMeshCO->setCollisionShape(mTriMeshShape);
World->addCollisionObject(mTriMeshCO);
btVector3 End(-1, -1,-1);
btVector3 Start(1,1,1);

btCollisionWorld::ClosestRayResultCallback RayCallback(Start, End);

World->rayTest(Start, End, RayCallback);

if(RayCallback.hasHit()) {
    btVector3 End = RayCallback.m_hitPointWorld;
    btVector3 Normal = RayCallback.m_hitNormalWorld;

    // Do some clever stuff here
}
4

1 に答える 1

2

ここに画像の説明を入力

上の画像をご覧ください。三角形とレイキャスト ベクトルを描画しようとしました。レイキャスト ベクトルは、(0,0,0) で XY 平面と交差します。ここで、点 (0,0,0) は実際には三角形の端にあります。ヒットがエッジにある場合、レイキャスト アルゴリズムがヒット テスト true を返すかどうかは、実装に依存します。これをテストしている場合は、変更されたレイキャスト ベクトルを試してみてください。これは、その内部の三角形に確実に当たることがわかっています。

于 2012-06-15T11:37:01.443 に答える