From 1726b82a16a9778c2c9d34f3676ebed7500cc45a Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Wed, 2 Nov 2011 18:13:56 +0200 Subject: occlusion culling fix, a little reshaping of map rendering for more useful profiler output and dynamic profiler text size --- src/utility.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'src/utility.cpp') diff --git a/src/utility.cpp b/src/utility.cpp index 0139281fa..7ffbe7160 100644 --- a/src/utility.cpp +++ b/src/utility.cpp @@ -236,21 +236,21 @@ bool isBlockInSight(v3s16 blockpos_b, v3f camera_pos, v3f camera_dir, // If block is (nearly) touching the camera, don't // bother validating further (that is, render it anyway) - if(d > block_max_radius) - { - // Cosine of the angle between the camera direction - // and the block direction (camera_dir is an unit vector) - f32 cosangle = dforward / d; - - // Compensate for the size of the block - // (as the block has to be shown even if it's a bit off FOV) - // This is an estimate. - cosangle += block_max_radius / dforward; + if(d < block_max_radius) + return true; + + // Cosine of the angle between the camera direction + // and the block direction (camera_dir is an unit vector) + f32 cosangle = dforward / d; + + // Compensate for the size of the block + // (as the block has to be shown even if it's a bit off FOV) + // This is an estimate, plus an arbitary factor + cosangle += block_max_radius / d * 0.5; - // If block is not in the field of view, skip it - if(cosangle < cos(camera_fov / 2)) - return false; - } + // If block is not in the field of view, skip it + if(cosangle < cos(camera_fov / 2)) + return false; return true; } -- cgit v1.2.3