Code: Select all
void wxirrlichtFrm::wxirrlichtFrmKeyDown(wxKeyEvent& event)
{
// insert your code here
if (!cam) return;
float sp = 10.0f;
int k = event.GetKeyCode();
core::vector3df whereat = cam->getPosition();
core::vector3df lookat = cam->getTarget();
core::vector3df delta = (whereat - lookat).normalize();
if (event.GetModifiers() == wxMOD_SHIFT) sp = 1.0f;
if (k == WXK_UP) {
whereat.X -= delta.X*sp; whereat.Z -= delta.Z*sp;
lookat.X -= delta.X*sp; lookat.Z -= delta.Z*sp;
}
if (k == WXK_DOWN) {
whereat.X += delta.X*sp; whereat.Z += delta.Z*sp;
lookat.X += delta.X*sp; lookat.Z += delta.Z*sp;
}
if (k == WXK_LEFT) {
delta.rotateXZBy(90.0f,core::vector3df(0,0,0));
whereat.X -= delta.X*sp; whereat.Z -= delta.Z*sp;
lookat.X -= delta.X*sp; lookat.Z -= delta.Z*sp;
}
if (k == WXK_RIGHT) {
delta.rotateXZBy(90.0f,core::vector3df(0,0,0));
whereat.X += delta.X*sp; whereat.Z += delta.Z*sp;
lookat.X += delta.X*sp; lookat.Z += delta.Z*sp;
}
if (k == WXK_PAGEUP) {
whereat.Y += 10.0f;
lookat.Y += 10.0f;
}
if (k == WXK_PAGEDOWN) {
whereat.Y -= 10.0f;
lookat.Y -= 10.0f;
}
cam->setPosition(whereat);
cam->setTarget(lookat);
cam->updateAbsolutePosition();
}
Code: Select all
ITerrainSceneNode* terrain = (ITerrainSceneNode*) smgr->getSceneNodeFromType(ESNT_TERRAIN);
if (terrain) {
ITriangleSelector* world = smgr->createTriangleSelector(terrain->getMesh(),terrain);
terrain->setTriangleSelector(world);
world->drop();
if (world) {
ISceneNodeAnimator* anim = smgr->createCollisionResponseAnimator(world, cam, core::vector3df(30.0f,60.0f,30.0f), core::vector3df(0.0f,0.0f,0.0f), core::vector3df(0.0f,0.0f,0.0f));
if (anim) {
cam->addAnimator(anim);
anim->drop();
}
else Log("Camera collision response animator creation failed.");
}
else Log("Terrain triangle selector creation failed.");
}
else Log("No terrain with which to create collision.");