Occlusion culling: Add comments, minor code improvements
authorparamat <mat.gregory@virginmedia.com>
Tue, 8 Nov 2016 16:07:56 +0000 (16:07 +0000)
committerparamat <mat.gregory@virginmedia.com>
Wed, 9 Nov 2016 00:09:35 +0000 (00:09 +0000)
Remove unnecessary code.
Use '/ 2.0f' because endoff is a float.

src/clientmap.cpp

index 1d856520b7aaa0e2e146f04cd8d33a6a47621a5a..8691cc0b21798450824851578b9b804b8686d7f4 100644 (file)
@@ -293,14 +293,19 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver)
                        float step = BS * 1;
                        float stepfac = 1.1;
                        float startoff = BS * 1;
-                       // - Length of the diagonal of a mapblock.
+                       // The occlusion search of 'isOccluded()' must stop short of the target
+                       // point by distance 'endoff' (end offset) to not enter the target mapblock.
+                       // For the 8 mapblock corners 'endoff' must therefore be the maximum diagonal
+                       // of a mapblock, because we must consider all view angles.
+                       // sqrt(1^2 + 1^2 + 1^2) = 1.732
                        float endoff = -BS * MAP_BLOCKSIZE * 1.732050807569;
-                       v3s16 spn = cam_pos_nodes + v3s16(0, 0, 0);
+                       v3s16 spn = cam_pos_nodes;
                        s16 bs2 = MAP_BLOCKSIZE / 2 + 1;
                        u32 needed_count = 1;
                        if (occlusion_culling_enabled &&
-                                       isOccluded(this, spn, cpn + v3s16(0, 0, 0),
-                                               step, stepfac, startoff, endoff / 2, needed_count, nodemgr) &&
+                                       // For the central point of the mapblock 'endoff' can be halved
+                                       isOccluded(this, spn, cpn,
+                                               step, stepfac, startoff, endoff / 2.0f, needed_count, nodemgr) &&
                                        isOccluded(this, spn, cpn + v3s16(bs2,bs2,bs2),
                                                step, stepfac, startoff, endoff, needed_count, nodemgr) &&
                                        isOccluded(this, spn, cpn + v3s16(bs2,bs2,-bs2),