diff options
author | DS <ds.desour@proton.me> | 2023-03-13 18:16:07 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-13 18:16:07 +0100 |
commit | cac1dca95b9941d89ccb413120e41269f286ab25 (patch) | |
tree | 885c752eaa13f176b467cffc6e858640cf64fcda /src/client/activeobjectmgr.cpp | |
parent | 02346819f9e972d356603995ee8400d9a35936e1 (diff) | |
download | minetest-cac1dca95b9941d89ccb413120e41269f286ab25.tar.xz |
Improvement of #12974: better linear independent vector (#12979)
Diffstat (limited to 'src/client/activeobjectmgr.cpp')
-rw-r--r-- | src/client/activeobjectmgr.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/client/activeobjectmgr.cpp b/src/client/activeobjectmgr.cpp index 3f5178908..7b7fab033 100644 --- a/src/client/activeobjectmgr.cpp +++ b/src/client/activeobjectmgr.cpp @@ -117,7 +117,9 @@ void ActiveObjectMgr::getActiveSelectableObjects(const core::line3d<f32> &shootl f32 max_d = shootline.getLength(); v3f dir = shootline.getVector().normalize(); - v3f dir_ortho1 = dir.crossProduct(dir + v3f(1,0,0)).normalize(); + // arbitrary linearly independent vector and orthogonal dirs + v3f li2dir = dir + (std::fabs(dir.X) < 0.5f ? v3f(1,0,0) : v3f(0,1,0)); + v3f dir_ortho1 = dir.crossProduct(li2dir).normalize(); v3f dir_ortho2 = dir.crossProduct(dir_ortho1); for (auto &ao_it : m_active_objects) { |