• [游戏开发]imgui介绍


    创建窗口

        ImGui::Begin("Hello, world!");
        ImGui::End();
    


    其中, ImGui::Begin("Hello, world!");函数的原型是 IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0);
    p_open决定了他是否是打开状态,flags决定了他的样式。
    flags是一个整数,表示你需要的样式的和,以下是所有的flag

        ImGuiWindowFlags_None                   = 0,
        ImGuiWindowFlags_NoTitleBar             = 1 << 0,   // Disable title-bar
        ImGuiWindowFlags_NoResize               = 1 << 1,   // Disable user resizing with the lower-right grip
        ImGuiWindowFlags_NoMove                 = 1 << 2,   // Disable user moving the window
        ImGuiWindowFlags_NoScrollbar            = 1 << 3,   // Disable scrollbars (window can still scroll with mouse or programmatically)
        ImGuiWindowFlags_NoScrollWithMouse      = 1 << 4,   // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set.
        ImGuiWindowFlags_NoCollapse             = 1 << 5,   // Disable user collapsing window by double-clicking on it
        ImGuiWindowFlags_AlwaysAutoResize       = 1 << 6,   // Resize every window to its content every frame
        ImGuiWindowFlags_NoBackground           = 1 << 7,   // Disable drawing background color (WindowBg, etc.) and outside border. Similar as using SetNextWindowBgAlpha(0.0f).
        ImGuiWindowFlags_NoSavedSettings        = 1 << 8,   // Never load/save settings in .ini file
        ImGuiWindowFlags_NoMouseInputs          = 1 << 9,   // Disable catching mouse, hovering test with pass through.
        ImGuiWindowFlags_MenuBar                = 1 << 10,  // Has a menu-bar
        ImGuiWindowFlags_HorizontalScrollbar    = 1 << 11,  // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section.
        ImGuiWindowFlags_NoFocusOnAppearing     = 1 << 12,  // Disable taking focus when transitioning from hidden to visible state
        ImGuiWindowFlags_NoBringToFrontOnFocus  = 1 << 13,  // Disable bringing window to front when taking focus (e.g. clicking on it or programmatically giving it focus)
        ImGuiWindowFlags_AlwaysVerticalScrollbar= 1 << 14,  // Always show vertical scrollbar (even if ContentSize.y < Size.y)
        ImGuiWindowFlags_AlwaysHorizontalScrollbar=1<< 15,  // Always show horizontal scrollbar (even if ContentSize.x < Size.x)
        ImGuiWindowFlags_AlwaysUseWindowPadding = 1 << 16,  // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient)
        ImGuiWindowFlags_NoNavInputs            = 1 << 18,  // No gamepad/keyboard navigation within the window
        ImGuiWindowFlags_NoNavFocus             = 1 << 19,  // No focusing toward this window with gamepad/keyboard navigation (e.g. skipped by CTRL+TAB)
        ImGuiWindowFlags_UnsavedDocument        = 1 << 20,  // Append '*' to title without affecting the ID, as a convenience to avoid using the ### operator. When used in a tab/docking context, tab is selected on closure and closure is deferred by one frame to allow code to cancel the closure (with a confirmation popup, etc.) without flicker.
        ImGuiWindowFlags_NoNav                  = ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus,
        ImGuiWindowFlags_NoDecoration           = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoCollapse,
        ImGuiWindowFlags_NoInputs               = ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus,
    
        // [Internal]
        ImGuiWindowFlags_NavFlattened           = 1 << 23,  // [BETA] Allow gamepad/keyboard navigation to cross over parent border to this child (only use on child that have no scrolling!)
        ImGuiWindowFlags_ChildWindow            = 1 << 24,  // Don't use! For internal use by BeginChild()
        ImGuiWindowFlags_Tooltip                = 1 << 25,  // Don't use! For internal use by BeginTooltip()
        ImGuiWindowFlags_Popup                  = 1 << 26,  // Don't use! For internal use by BeginPopup()
        ImGuiWindowFlags_Modal                  = 1 << 27,  // Don't use! For internal use by BeginPopupModal()
        ImGuiWindowFlags_ChildMenu              = 1 << 28   // Don't use! For internal use by BeginMenu()
    

    以上内容在imgui.h的枚举ImGuiWindowFlags_里也有。

    创建文字

        ImGui::Begin("Hello, world!");
        ImGui::Text("%s","Hello");
        ImGui::Text("world");
        ImGui::End();
    


    其中文字是可以使用格式化的。

    创建图片

    ImGuiIO& io = ImGui::GetIO();
        ImTextureID tex_id = io.Fonts->TexID;
        ImGui::Begin("Hello, world!");
        ImGui::Image(tex_id,ImVec2(64,64));
        ImGui::End();
    

    由于Imgui的图片加载和自己选择的图形渲染库有关,所以这里我们拿字体图片做例子。
    猜测,由于字体图片的比例和我们设置的长宽比不一致,所以渲染出来的图形也不是正方形。
    ImGui::Image的函数原型是 IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0));
    其中size是渲染出来的大小,uv0和uv1都是一个0-1的小数,表示要渲染的图片在材质的位置,tint_col和border_col是两个颜色由一个32位整数表示,RGBA。

  • 相关阅读:
    烦人的警告 Deprecated: convertStrings was not specified when starting the JVM
    Python 推送RabbitMQ
    JavaScript-json数组排序
    CSS-返回顶部代码
    CSS-页面滑屏滚动原理
    CSS-图像映射
    CSS-下拉导航条
    CSS-background-position百分比
    CSS- 横向和纵向时间轴
    JavaScript-闭包深入浅出
  • 原文地址:https://www.cnblogs.com/jhy16193335/p/11184676.html
Copyright © 2020-2023  润新知