forked from Mirrorlandia_minetest/minetest
master #6
@ -350,18 +350,21 @@ void RemoteClient::GetNextBlocks (
|
|||||||
if (!block->getIsUnderground() && !block->getDayNightDiff())
|
if (!block->getIsUnderground() && !block->getDayNightDiff())
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Check occlusion cache first.
|
Check occlusion cache first.
|
||||||
*/
|
*/
|
||||||
if (m_blocks_occ.find(p) != m_blocks_occ.end())
|
if (m_blocks_occ.find(p) != m_blocks_occ.end())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (m_occ_cull && !block_not_found &&
|
/*
|
||||||
env->getMap().isBlockOccluded(block, cam_pos_nodes, d >= d_cull_opt)) {
|
Note that we do this even before the block is loaded as this does not depend on its contents.
|
||||||
m_blocks_occ.insert(p);
|
*/
|
||||||
continue;
|
if (m_occ_cull &&
|
||||||
}
|
env->getMap().isBlockOccluded(p * MAP_BLOCKSIZE, cam_pos_nodes, d >= d_cull_opt)) {
|
||||||
|
m_blocks_occ.insert(p);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1155,7 +1155,7 @@ bool Map::isOccluded(const v3s16 &pos_camera, const v3s16 &pos_target,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Map::isBlockOccluded(MapBlock *block, v3s16 cam_pos_nodes, bool simple_check)
|
bool Map::isBlockOccluded(v3s16 pos_relative, v3s16 cam_pos_nodes, bool simple_check)
|
||||||
{
|
{
|
||||||
// Check occlusion for center and all 8 corners of the mapblock
|
// Check occlusion for center and all 8 corners of the mapblock
|
||||||
// Overshoot a little for less flickering
|
// Overshoot a little for less flickering
|
||||||
@ -1172,7 +1172,7 @@ bool Map::isBlockOccluded(MapBlock *block, v3s16 cam_pos_nodes, bool simple_chec
|
|||||||
v3s16(-1, -1, -1) * bs2,
|
v3s16(-1, -1, -1) * bs2,
|
||||||
};
|
};
|
||||||
|
|
||||||
v3s16 pos_blockcenter = block->getPosRelative() + (MAP_BLOCKSIZE / 2);
|
v3s16 pos_blockcenter = pos_relative + (MAP_BLOCKSIZE / 2);
|
||||||
|
|
||||||
// Starting step size, value between 1m and sqrt(3)m
|
// Starting step size, value between 1m and sqrt(3)m
|
||||||
float step = BS * 1.2f;
|
float step = BS * 1.2f;
|
||||||
@ -1203,7 +1203,7 @@ bool Map::isBlockOccluded(MapBlock *block, v3s16 cam_pos_nodes, bool simple_chec
|
|||||||
|
|
||||||
// Additional occlusion check, see comments in that function
|
// Additional occlusion check, see comments in that function
|
||||||
v3s16 check;
|
v3s16 check;
|
||||||
if (determineAdditionalOcclusionCheck(cam_pos_nodes, block->getBox(), check)) {
|
if (determineAdditionalOcclusionCheck(cam_pos_nodes, MapBlock::getBox(pos_relative), check)) {
|
||||||
// node is always on a side facing the camera, end_offset can be lower
|
// node is always on a side facing the camera, end_offset can be lower
|
||||||
if (!isOccluded(cam_pos_nodes, check, step, stepfac, start_offset,
|
if (!isOccluded(cam_pos_nodes, check, step, stepfac, start_offset,
|
||||||
-1.0f, needed_count))
|
-1.0f, needed_count))
|
||||||
|
@ -305,7 +305,12 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isBlockOccluded(MapBlock *block, v3s16 cam_pos_nodes, bool simple_check = false);
|
bool isBlockOccluded(MapBlock *block, v3s16 cam_pos_nodes, bool simple_check = false)
|
||||||
|
{
|
||||||
|
return isBlockOccluded(block->getPosRelative(), cam_pos_nodes, simple_check);
|
||||||
|
}
|
||||||
|
bool isBlockOccluded(v3s16 pos_relative, v3s16 cam_pos_nodes, bool simple_check = false);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
IGameDef *m_gamedef;
|
IGameDef *m_gamedef;
|
||||||
|
|
||||||
|
@ -216,10 +216,14 @@ public:
|
|||||||
return m_pos_relative;
|
return m_pos_relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline core::aabbox3d<s16> getBox()
|
inline core::aabbox3d<s16> getBox() {
|
||||||
|
return getBox(getPosRelative());
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline core::aabbox3d<s16> getBox(const v3s16 &pos_relative)
|
||||||
{
|
{
|
||||||
return core::aabbox3d<s16>(getPosRelative(),
|
return core::aabbox3d<s16>(pos_relative,
|
||||||
getPosRelative()
|
pos_relative
|
||||||
+ v3s16(MAP_BLOCKSIZE, MAP_BLOCKSIZE, MAP_BLOCKSIZE)
|
+ v3s16(MAP_BLOCKSIZE, MAP_BLOCKSIZE, MAP_BLOCKSIZE)
|
||||||
- v3s16(1,1,1));
|
- v3s16(1,1,1));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user