diff -abBdpuNPr --exclude='*.svn' irrlicht-svn-ss/trunk/source/Irrlicht/CSceneCollisionManager.cpp Irrlicht_starsonata/source/Irrlicht/CSceneCollisionManager.cpp --- irrlicht-svn-ss/trunk/source/Irrlicht/CSceneCollisionManager.cpp 2007-07-26 02:11:08.000000000 +0200 +++ Irrlicht_starsonata/source/Irrlicht/CSceneCollisionManager.cpp 2008-06-05 08:16:32.000000000 +0200 @@ -616,37 +616,36 @@ core::vector3df CSceneCollisionManager:: core::line3d CSceneCollisionManager::getRayFromScreenCoordinates( core::position2d pos, ICameraSceneNode* camera) { - core::line3d ln(0,0,0,0,0,0); + core::line3d ln(0,0,0,0,0,0); if (!SceneManager) - return ln; + return core::line3d(); if (!camera) camera = SceneManager->getActiveCamera(); if (!camera) - return ln; + return core::line3d(); const scene::SViewFrustum* f = camera->getViewFrustum(); - core::vector3df farLeftUp = f->getFarLeftUp(); - core::vector3df lefttoright = f->getFarRightUp() - farLeftUp; - core::vector3df uptodown = f->getFarLeftDown() - farLeftUp; + core::vector3d farLeftUp(f->getFarLeftUp().X, f->getFarLeftUp().Y, f->getFarLeftUp().Z); + core::vector3d lefttoright = core::vector3d(f->getFarRightUp().X, f->getFarRightUp().Y, f->getFarRightUp().Z) - farLeftUp; + core::vector3d uptodown = core::vector3d(f->getFarLeftDown().X, f->getFarLeftDown().Y, f->getFarLeftDown().Z) - farLeftUp; core::rect viewPort = Driver->getViewPort(); core::dimension2d screenSize(viewPort.getWidth(), viewPort.getHeight()); - f32 dx = pos.X / (f32)screenSize.Width; - f32 dy = pos.Y / (f32)screenSize.Height; + f64 dx = pos.X / (f64)screenSize.Width; + f64 dy = pos.Y / (f64)screenSize.Height; + ln.start = core::vector3d(f->cameraPosition.X, f->cameraPosition.Y, f->cameraPosition.Z); if (camera->isOrthogonal()) - ln.start = f->cameraPosition + (lefttoright * (dx-0.5f)) + (uptodown * (dy-0.5f)); - else - ln.start = f->cameraPosition; + ln.start += (lefttoright * (dx-0.5)) + (uptodown * (dy-0.5)); ln.end = farLeftUp + (lefttoright * dx) + (uptodown * dy); - return ln; + return core::line3d((f32)ln.start.X, (f32)ln.start.Y, (f32)ln.start.Z, (f32)ln.end.X, (f32)ln.end.Y, (f32)ln.end.Z); }