From 64dc1c66d30fd04d5b75c1a5a98e5aa897ab6112 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Fri, 1 Aug 2025 13:58:05 +0800 Subject: [PATCH] =?UTF-8?q?[BUG]=E4=BD=BF=E7=94=A8=E7=8B=AC=E7=AB=8BTransf?= =?UTF-8?q?ormTranslate3f=E6=9D=A5=E5=81=9A=E5=81=8F=E7=A7=BB=EF=BC=8C?= =?UTF-8?q?=E6=AD=A4=E6=B3=95=E4=B8=8D=E8=83=BD=E7=94=A8=E3=80=82=E5=8F=98?= =?UTF-8?q?=E6=8D=A2=E5=90=8E=E4=BC=9A=E5=AF=BC=E8=87=B4=E7=9F=A9=E9=98=B5?= =?UTF-8?q?=E5=8F=98=E6=8D=A2=EF=BC=8CPICK=E5=A4=B1=E6=95=88=E3=80=82?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E5=8F=A6=E5=81=9A=E6=89=93=E7=AE=97=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMCore | 2 +- example/Gizmo/Gizmo3DMove.cpp | 27 ++++++++++++++++----------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/CMCore b/CMCore index dd01d191..c37a3836 160000 --- a/CMCore +++ b/CMCore @@ -1 +1 @@ -Subproject commit dd01d1919a119d1aeac74dd4d4994ba45c0144ad +Subproject commit c37a38362c96ed52f1df30c8ad51ae3f031d2fe6 diff --git a/example/Gizmo/Gizmo3DMove.cpp b/example/Gizmo/Gizmo3DMove.cpp index 4befa128..ab6b672c 100644 --- a/example/Gizmo/Gizmo3DMove.cpp +++ b/example/Gizmo/Gizmo3DMove.cpp @@ -56,13 +56,15 @@ namespace protected: + Ray MouseRay; + int CurAXIS=-1; //当前鼠标选中轴 float CurDist=0; //当前距离 int PickAXIS=-1; //拾取轴 float PickDist=0; //拾取辆距离轴心的距离 - TransformTranslate3f CurTranslate; + TransformTranslate3f *CurTranslate=nullptr; public: @@ -214,7 +216,9 @@ namespace PickAXIS=CurAXIS; PickDist=CurDist; - CurTranslate.SetOffset(Vector3f(0,0,0)); //重置当前平移偏移 + CurTranslate=GetTransform().AddTranslate(Vector3f(0,0,0)); + + return io::EventProcResult::Break; // 处理完鼠标按下事件,停止进一步处理 } return io::EventProcResult::Continue; @@ -232,9 +236,7 @@ namespace if(!cc) return io::EventProcResult::Continue; - Ray ray; - - cc->SetMouseRay(&ray,mouse_coord); + cc->SetMouseRay(&MouseRay,mouse_coord); Matrix4f l2w=GetLocalToWorldMatrix(); Vector3f center=TransformPosition(l2w,Vector3f(0,0,0)); @@ -260,9 +262,9 @@ namespace end =TransformPosition(l2w,axis_vector*(GIZMO_CENTER_SPHERE_RADIUS+GIZMO_CONE_LENGTH+GIZMO_CYLINDER_HALF_LENGTH)); //求射线与线段的最近点 - ray.ClosestPoint(p_ray, //射线上的点 - p_ls, //线段上的点 - start,end); //线段 + MouseRay.ClosestPoint( p_ray, //射线上的点 + p_ls, //线段上的点 + start,end); //线段 dist=glm::distance(p_ray,p_ls); //计算射线与线段的距离 @@ -279,7 +281,10 @@ namespace if(CurAXIS==PickAXIS) //如果当前轴与拾取轴相同 { //如果当前轴与拾取轴相同,则计算平移偏移 - CurTranslate.SetOffset(axis_vector*(CurDist-PickDist)); + if(CurTranslate) + { + CurTranslate->SetOffset(axis_vector*(CurDist-PickDist)); + } } } else @@ -291,8 +296,8 @@ namespace axis[i].cone->SetOverrideMaterial(mi); //std::cout<<"Mouse: "<