Commit
* Use constexpr + unroll some calculations to cache definitively some calculations * Unroll some calls in collision code & use a constref instead of a copy in one occurence
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -108,7 +108,7 @@ bool isBlockInSight(v3s16 blockpos_b, v3f camera_pos, v3f camera_dir, | |
{ | ||
// Maximum radius of a block. The magic number is | ||
// sqrt(3.0) / 2.0 in literal form. | ||
const f32 block_max_radius = 0.866025403784 * MAP_BLOCKSIZE * BS; | ||
static constexpr const f32 block_max_radius = 0.866025403784f * MAP_BLOCKSIZE * BS; | ||
|
||
v3s16 blockpos_nodes = blockpos_b * MAP_BLOCKSIZE; | ||
|
||
|
@@ -125,16 +125,16 @@ bool isBlockInSight(v3s16 blockpos_b, v3f camera_pos, v3f camera_dir, | |
// Total distance | ||
f32 d = MYMAX(0, blockpos_relative.getLength() - block_max_radius); | ||
|
||
if(distance_ptr) | ||
if (distance_ptr) | ||
*distance_ptr = d; | ||
|
||
// If block is far away, it's not in sight | ||
if(d > range) | ||
if (d > range) | ||
return false; | ||
|
||
// If block is (nearly) touching the camera, don't | ||
// bother validating further (that is, render it anyway) | ||
if(d == 0) | ||
if (d == 0) | ||
return true; | ||
|
||
// Adjust camera position, for purposes of computing the angle, | ||
|
@@ -166,12 +166,13 @@ bool isBlockInSight(v3s16 blockpos_b, v3f camera_pos, v3f camera_dir, | |
s16 adjustDist(s16 dist, float zoom_fov) | ||
{ | ||
// 1.775 ~= 72 * PI / 180 * 1.4, the default on the client | ||
const float default_fov = 1.775f; | ||
static constexpr const float default_fov = 1.775f / 2.0f; | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
paramat
Contributor
|
||
// heuristic cut-off for zooming | ||
if (zoom_fov > default_fov / 2.0f) | ||
if (zoom_fov > default_fov) | ||
This comment has been minimized.
Sorry, something went wrong.
paramat
Contributor
|
||
return dist; | ||
|
||
// new_dist = dist * ((1 - cos(FOV / 2)) / (1-cos(zoomFOV /2))) ^ (1/3) | ||
return round(dist * std::cbrt((1.0f - std::cos(default_fov / 2.0f)) / | ||
// note: FOV is calculated at compilation time | ||
return round(dist * std::cbrt((1.0f - std::cos(default_fov)) / | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
nerzhul
Author
Member
|
||
(1.0f - std::cos(zoom_fov / 2.0f)))); | ||
} |
default_fov
is indeed 1.775 not 1.775 / 2.0.