シンプルなものを作成しました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
}