diff --git a/App/editor/ViewportPanel.cpp b/App/editor/ViewportPanel.cpp index 1650780..6ad270c 100644 --- a/App/editor/ViewportPanel.cpp +++ b/App/editor/ViewportPanel.cpp @@ -146,12 +146,13 @@ std::optional ViewportPanel::Draw(const EditorContext &ctx, const ImVec2 mn = ImGui::GetItemRectMin(); ImGuizmo::SetRect(mn.x, mn.y, size.x, size.y); - // 轴可见度阈值(默认 0.02 太小):正对视角下轴投影长度 - // sinθ 在阈值上方 → "看得见但几何上不可操作"——⊥视线 - // 的轴悬停检测失效(射线∥垂直平面,denom=0)、∥视线 - // 的轴拖拽无一阶位移(怎么拖都不动)。UE 语义 = 正对 - // 轴直接隐藏:0.35 ⇒ 夹角 <20° 的轴消失,>20° 可拖 - ImGuizmo::SetPlaneLimit(0.35f); + // 轴可见度阈值:库内轴恒定屏幕尺寸(mGizmoSizeClipSpace + // =0.1),可见判定 = sinθ(轴与视线夹角) > 阈值/0.1。 + // 默认 0.02 ⇒ θ>11.5° 就可见——"有高度差"的正对视角 + // (θ≈15°)轴"看得见但几何上不可操作"(⊥视线轴悬停 + // 失效、∥视线轴拖拽无一阶位移)。取 0.034 ⇒ θ<20° 的 + // 轴隐藏(UE 正对轴隐藏语义),≥20° 正常可拖 + ImGuizmo::SetPlaneLimit(0.034f); glm::mat4 m = tr->World(); // 操作空间:local(模型轴,旋转/缩放随物体朝向直观)/