From 79c835c06aace6ba4cf7c249389b5ffb162927fd Mon Sep 17 00:00:00 2001 From: Zhicheng Wang <1627343141@qq.com> Date: Sun, 9 Nov 2025 17:22:51 +0800 Subject: [PATCH] fix wrong normal direction of bottom plane in cylinder --- primitive_process/interface/data/data_type.hpp | 14 ++++++++++++-- .../interface/primitive/simple/cylinder.hpp | 2 +- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/primitive_process/interface/data/data_type.hpp b/primitive_process/interface/data/data_type.hpp index 5931d2e..7eb66f5 100644 --- a/primitive_process/interface/data/data_type.hpp +++ b/primitive_process/interface/data/data_type.hpp @@ -23,7 +23,6 @@ static inline paired_model_matrix identity_model_matrix{internal::transform_bloc internal::transform_block::Identity()}; static inline auto plane_to_z_pos_1_model_matrix = []() { paired_model_matrix res{}; - Eigen::Matrix3d::Identity(); res.world_to_local.linear().col(0) = Eigen::Vector3d{0, 0, 1}; res.world_to_local.linear().col(1) = Eigen::Vector3d{0, 1, 0}; res.world_to_local.linear().col(2) = Eigen::Vector3d{1, 0, 0}; @@ -34,7 +33,6 @@ static inline auto plane_to_z_pos_1_model_matrix = []() { }(); static inline auto plane_to_z_model_matrix = []() { paired_model_matrix res{}; - Eigen::Matrix3d::Identity(); res.world_to_local.linear().col(0) = Eigen::Vector3d{0, 0, 1}; res.world_to_local.linear().col(1) = Eigen::Vector3d{0, 1, 0}; res.world_to_local.linear().col(2) = Eigen::Vector3d{1, 0, 0}; @@ -42,6 +40,17 @@ static inline auto plane_to_z_model_matrix = []() { res.local_to_world = res.world_to_local; return res; }(); +static inline auto plane_to_z_flipped_model_matrix = []() { + paired_model_matrix res{}; + res.world_to_local.linear().col(0) = Eigen::Vector3d{0, 0, -1}; + res.world_to_local.linear().col(1) = Eigen::Vector3d{0, 1, 0}; + res.world_to_local.linear().col(2) = Eigen::Vector3d{1, 0, 0}; + res.world_to_local.translation() = Eigen::Vector3d{0, 0, 0}; + res.local_to_world = res.world_to_local; + res.local_to_world.linear().col(0) = Eigen::Vector3d{0, 0, 1}; + res.local_to_world.linear().col(2) = Eigen::Vector3d{-1, 0, 0}; + return res; +}(); static inline auto plane_to_z_neg_1_model_matrix = []() { paired_model_matrix res{}; res.world_to_local.linear().col(0) = Eigen::Vector3d{0, 0, 1}; @@ -57,6 +66,7 @@ static inline auto plane_to_z_neg_1_model_matrix = []() { const auto identity_model_matrix_ptr = make_pointer_wrapper(hidden::identity_model_matrix); const auto plane_to_z_pos_1_model_matrix_ptr = make_pointer_wrapper(hidden::plane_to_z_pos_1_model_matrix); const auto plane_to_z_model_matrix_ptr = make_pointer_wrapper(hidden::plane_to_z_model_matrix); +const auto plane_to_z_flipped_model_matrix_ptr = make_pointer_wrapper(hidden::plane_to_z_flipped_model_matrix); const auto plane_to_z_neg_1_model_matrix_ptr = make_pointer_wrapper(hidden::plane_to_z_neg_1_model_matrix); const inline auto empty_affine_matrix = [] { diff --git a/primitive_process/interface/primitive/simple/cylinder.hpp b/primitive_process/interface/primitive/simple/cylinder.hpp index f11e151..10bfcad 100644 --- a/primitive_process/interface/primitive/simple/cylinder.hpp +++ b/primitive_process/interface/primitive/simple/cylinder.hpp @@ -21,7 +21,7 @@ struct cylinder_t final : public primitive { stl_vector_mp get_subface_init_model_matrices() const override { - return {identity_model_matrix_ptr, plane_to_z_model_matrix_ptr, plane_to_z_pos_1_model_matrix_ptr}; + return {identity_model_matrix_ptr, plane_to_z_flipped_model_matrix_ptr, plane_to_z_pos_1_model_matrix_ptr}; } std::array, 3> subfaces{};