Commit a98153f8 authored by lukeph's avatar lukeph

Fixed a problem with terrain culling not updating as the camera FOV changes.

reported here: http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=30575

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@1633 dfc29bdd-3216-0410-991c-e03cc46cb475
parent 67b31578
...@@ -38,7 +38,7 @@ namespace scene ...@@ -38,7 +38,7 @@ namespace scene
OverrideDistanceThreshold(false), UseDefaultRotationPivot(true), ForceRecalculation(false), OverrideDistanceThreshold(false), UseDefaultRotationPivot(true), ForceRecalculation(false),
OldCameraPosition(core::vector3df(-99999.9f, -99999.9f, -99999.9f)), OldCameraPosition(core::vector3df(-99999.9f, -99999.9f, -99999.9f)),
OldCameraRotation(core::vector3df(-99999.9f, -99999.9f, -99999.9f)), OldCameraRotation(core::vector3df(-99999.9f, -99999.9f, -99999.9f)),
CameraMovementDelta(10.0f), CameraRotationDelta(1.0f), CameraMovementDelta(10.0f), CameraRotationDelta(1.0f),CameraFOVDelta(0.1f),
TCoordScale1(1.0f), TCoordScale2(1.0f), FileSystem(fs) TCoordScale1(1.0f), TCoordScale2(1.0f), FileSystem(fs)
{ {
#ifdef _DEBUG #ifdef _DEBUG
...@@ -451,6 +451,8 @@ namespace scene ...@@ -451,6 +451,8 @@ namespace scene
// Determine the camera rotation, based on the camera direction. // Determine the camera rotation, based on the camera direction.
const core::vector3df cameraPosition = SceneManager->getActiveCamera()->getAbsolutePosition(); const core::vector3df cameraPosition = SceneManager->getActiveCamera()->getAbsolutePosition();
const core::vector3df cameraRotation = core::line3d<f32>(cameraPosition, SceneManager->getActiveCamera()->getTarget()).getVector().getHorizontalAngle(); const core::vector3df cameraRotation = core::line3d<f32>(cameraPosition, SceneManager->getActiveCamera()->getTarget()).getVector().getHorizontalAngle();
const f32 CameraFOV = SceneManager->getActiveCamera()->getFOV();
// Only check on the Camera's Y Rotation // Only check on the Camera's Y Rotation
if (!ForceRecalculation) if (!ForceRecalculation)
...@@ -462,13 +464,18 @@ namespace scene ...@@ -462,13 +464,18 @@ namespace scene
(fabs(cameraPosition.Y - OldCameraPosition.Y) < CameraMovementDelta) && (fabs(cameraPosition.Y - OldCameraPosition.Y) < CameraMovementDelta) &&
(fabs(cameraPosition.Z - OldCameraPosition.Z) < CameraMovementDelta)) (fabs(cameraPosition.Z - OldCameraPosition.Z) < CameraMovementDelta))
{ {
return; if (fabs(CameraFOV-OldCameraFOV) < CameraFOVDelta)
{
return;
}
} }
} }
} }
OldCameraPosition = cameraPosition; OldCameraPosition = cameraPosition;
OldCameraRotation = cameraRotation; OldCameraRotation = cameraRotation;
OldCameraFOV = CameraFOV;
const SViewFrustum* frustum = SceneManager->getActiveCamera()->getViewFrustum(); const SViewFrustum* frustum = SceneManager->getActiveCamera()->getViewFrustum();
// Determine each patches LOD based on distance from camera ( and whether or not they are in // Determine each patches LOD based on distance from camera ( and whether or not they are in
......
...@@ -324,8 +324,10 @@ namespace scene ...@@ -324,8 +324,10 @@ namespace scene
core::vector3df OldCameraPosition; core::vector3df OldCameraPosition;
core::vector3df OldCameraRotation; core::vector3df OldCameraRotation;
f32 OldCameraFOV;
f32 CameraMovementDelta; f32 CameraMovementDelta;
f32 CameraRotationDelta; f32 CameraRotationDelta;
f32 CameraFOVDelta;
// needed for (de)serialization // needed for (de)serialization
f32 TCoordScale1; f32 TCoordScale1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment