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 | |
| parent | 02346819f9e972d356603995ee8400d9a35936e1 (diff) | |
| download | minetest-cac1dca95b9941d89ccb413120e41269f286ab25.tar.xz | |
Improvement of #12974: better linear independent vector (#12979)
| -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) { |
