First and foremost i did use the 'search button' and did not find anything to help me.. many examples but nothing that helped
I'm trying to get collision detection with my terrain which is a obj mesh thrown into a coppercube scene and then exported to .irr
Here is a cube and the terrain i'm trying to cast a ray to:
I am trying to cast a ray from a cube on the map to 9,000 units below the the cube and praying that it hits the terrain
Here is the code of me initializing the cube
Code: Select all
IAnimatedMesh* cube = smgr->getMesh("../media/cube.obj");
if (!cube)
{
device->drop();
}
p = smgr->addAnimatedMeshSceneNode(cube);
Here is the code initializing the terrian
Code: Select all
smgr->loadScene("../media/scene.irr");
core::array<scene::ISceneNode *> nodes;
smgr->getSceneNodesFromType(scene::ESNT_ANY, nodes); // Find all nodes
scene::IMetaTriangleSelector * meta = smgr->createMetaTriangleSelector();
for (u32 i=0; i < nodes.size(); ++i)
{
scene::ISceneNode * node = nodes[i];
scene::ITriangleSelector * selector = 0;
switch(node->getType())
{
case scene::ESNT_CUBE:
case scene::ESNT_ANIMATED_MESH:
// Because the selector won't animate with the mesh,
// and is only being used for camera collision, we'll just use an approximate
// bounding box instead of ((scene::IAnimatedMeshSceneNode*)node)->getMesh(0)
selector = smgr->createTriangleSelectorFromBoundingBox(node);
break;
case scene::ESNT_MESH:
case scene::ESNT_SPHERE: // Derived from IMeshSceneNode
selector = smgr->createTriangleSelector(((scene::IMeshSceneNode*)node)->getMesh(), node);
break;
case scene::ESNT_TERRAIN:
selector = smgr->createTerrainTriangleSelector((scene::ITerrainSceneNode*)node);
break;
case scene::ESNT_OCTREE:
selector = smgr->createOctreeTriangleSelector(((scene::IMeshSceneNode*)node)->getMesh(), node);
break;
default:
// Don't create a selector for this node type
break;
}
if(selector)
{
// Add it to the meta selector, which will take a reference to it
meta->addTriangleSelector(selector);
// And drop my reference to it, so that the meta selector owns it.
selector->drop();
}
}
Code: Select all
core::line3d<f32> ray;
vector3df pos;
vector3df pos2;
pos = p->getPosition();
pos2 = p->getPosition();
pos2.Y-=9000;
ray.start =pos;
ray.end = pos2;
vector3df a;
ray.getClosestPoint(a);
core::vector3df intersection;
core::triangle3df hitTriangle;
scene::ISceneNode * selectedSceneNode =
collMan->getSceneNodeAndCollisionPointFromRay(ray,intersection,hitTriangle);
and ray.getClosestPoint the a = 0,0,0
I am confused on why my ray is not picking up anything on the terrain..
If you need more information to help me solve this just let me know.
Thanks in advance