OSG编程指南<二十三>:基于OSG+ImGui制作模型编辑器,实现三轴方向的实时平移、旋转和缩放变化

OSG编程指南<二十三>:基于OSG+ImGui制作模型编辑器,实现三轴方向的实时平移、旋转和缩放变化

码农世界 2024-05-23 前端 67 次浏览 0个评论

1、概述

  在OSG的开发应用过程中,我们有时候总会纠结于使用MFC还是Qt来嵌入OSG窗口以便于后续的功能开发,毕竟选择一个合适的UI框架,对于后续的开发还是省去很多麻烦的。但对于初学者来说,可能对框架消息机制的不熟悉,尤其是在做一些与场景互动的交互操作时候,耗费了大量时间在与OSG场景交互的实现上。如果有在使用osgearth库的开发者可能会发现源码带的示例中有osgearth_imgui这个项目,其中的ImGui就是本次文章的主角。

下面是模型编辑器的效果,采用VS2019+ImGui-1.8.5+OSG3.6.5实现。

2、ImGui

2.1 简介

  ImGui又称为Dear ImGui,它是与平台无关的C++轻量级跨平台图形界面库,没有任何第三方依赖,可以将ImGui的源码直接加到项目中,也可以编译成dll。ImGui使用DX或OpenGL进行界面渲染,对于画面质量要求较高,例如客户端游戏、4k/8k视频播放时,用ImGui是很好的选择。经常用到游戏引擎的内部,用来开发编辑器的界面。开源项目地址:https://github.com/ocornut/imgui。

2.2 官方游戏编辑器效果

3、ImGui集成到OSG

  参考了github上大神的imgui-osg项目,然后改进了一下实现了自己的需求。

核心代码是从osgGA::GUIEventHandler继承实现sgImGuiHandler,实现界面的绘制以及鼠标操作等。

#pragma once
#include 
namespace osg {
class Camera;
}
class OsgImGuiHandler : public osgGA::GUIEventHandler
{
public:
    OsgImGuiHandler();
    bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa) override;
protected:
    // Put your ImGui code inside this function
    virtual void drawUi() = 0;
private:
    void init();
    void setCameraCallbacks(osg::Camera* camera);
    void newFrame(osg::RenderInfo& renderInfo);
    void render(osg::RenderInfo& renderInfo);
private:
    struct ImGuiNewFrameCallback;
    struct ImGuiRenderCallback;
    double time_;
    bool mousePressed_[3];
    float mouseWheel_;
    bool initialized_;
};

4、源码下载

下载地址

转载请注明来自码农世界,本文标题:《OSG编程指南<二十三>:基于OSG+ImGui制作模型编辑器,实现三轴方向的实时平移、旋转和缩放变化》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,67人围观)参与讨论

还没有评论,来说两句吧...

Top