fix: Gizmo 无法拖动 + Dynamic 提示行顶视口抖动
- Editor::Draw 每帧首调 ImGuizmo::BeginFrame():不调则 mbOverGizmoHotspot hover 一次杆后永久置位(仅 BeginFrame 清零), GetMoveType 恒返 MT_NONE → 杆可见但永远抓不住 - Dynamic 刚体提示改 drawlist 叠加(Image 内左下角、纯英文): TextDisabled 占布局行 → 滚动条出现/消失循环 → avail 抖动 → 渲染分辨率每帧重报(视口疯狂顶动);且默认字体无中文字形
This commit is contained in:
@@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
#include <imgui.h>
|
#include <imgui.h>
|
||||||
#include <imgui_internal.h> // DockBuilder*(内部 API)
|
#include <imgui_internal.h> // DockBuilder*(内部 API)
|
||||||
|
#include <ImGuizmo.h>
|
||||||
|
|
||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
@@ -38,6 +39,11 @@ void Editor::Init(const EditorContext& ctx)
|
|||||||
|
|
||||||
void Editor::Draw()
|
void Editor::Draw()
|
||||||
{
|
{
|
||||||
|
// ImGuizmo 每帧首调(官方约定):内部会清 mbOverGizmoHotspot 等
|
||||||
|
// 帧级状态——不调则 hover 过一次杆后 hotspot 永久置位,GetMoveType
|
||||||
|
// 恒返 MT_NONE → 杆可见但永远抓不住(只能看不能拖)
|
||||||
|
ImGuizmo::BeginFrame();
|
||||||
|
|
||||||
// host 窗口:铺满主视口,承载菜单栏 + DockSpace
|
// host 窗口:铺满主视口,承载菜单栏 + DockSpace
|
||||||
ImGuiViewport* viewport = ImGui::GetMainViewport();
|
ImGuiViewport* viewport = ImGui::GetMainViewport();
|
||||||
ImGui::SetNextWindowPos(viewport->Pos);
|
ImGui::SetNextWindowPos(viewport->Pos);
|
||||||
|
|||||||
@@ -167,13 +167,19 @@ std::optional<entt::entity> ViewportPanel::Draw(const EditorContext &ctx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Dynamic 刚体提示:物理每帧把姿态写回 Transform,拖拽即刻
|
// Dynamic 刚体提示:物理每帧把姿态写回 Transform,拖拽即刻
|
||||||
// 被覆盖(Static/Kinematic 编辑器权威,可直接拖)
|
// 被覆盖(Static/Kinematic 编辑器权威,可直接拖)。
|
||||||
|
// 用 drawlist 叠加而非 ImGui::TextDisabled:后者在 Image 下方
|
||||||
|
// 占一行布局 → 滚动条出现/消失循环 → avail 抖动 → 渲染分辨率
|
||||||
|
// 每帧重报(视口疯狂顶动);且默认字体无中文字形(显示 ?)
|
||||||
if (selected != entt::null) {
|
if (selected != entt::null) {
|
||||||
if (const auto *rb = reg.try_get<ECS::RigidBodyComponent>(selected);
|
if (const auto *rb = reg.try_get<ECS::RigidBodyComponent>(selected);
|
||||||
rb != nullptr &&
|
rb != nullptr &&
|
||||||
rb->type == ECS::RigidBodyComponent::BodyType::Dynamic) {
|
rb->type == ECS::RigidBodyComponent::BodyType::Dynamic) {
|
||||||
ImGui::TextDisabled(
|
const ImVec2 imgMin = ImGui::GetItemRectMin();
|
||||||
"(Dynamic body: transform 由物理每帧覆盖)");
|
ImGui::GetWindowDrawList()->AddText(
|
||||||
|
ImVec2(imgMin.x + 8.0f, imgMin.y + size.y - 20.0f),
|
||||||
|
IM_COL32(255, 255, 255, 160),
|
||||||
|
"(Dynamic body: transform driven by physics)");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user