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

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 <osgViewer/ViewerEventHandlers>

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、源码下载

下载地址

最近更新

  1. TCP协议是安全的吗?

    2024-05-16 01:28:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-16 01:28:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-16 01:28:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-16 01:28:03       18 阅读

热门阅读

  1. 调用外部的webservice示例

    2024-05-16 01:28:03       10 阅读
  2. 局域网路由器 交换机 ap模式

    2024-05-16 01:28:03       16 阅读
  3. Spring-Cloud-OpenFeign源码解析-02-OpenFeign自动装配

    2024-05-16 01:28:03       11 阅读
  4. 【鱼眼+普通相机】相机标定

    2024-05-16 01:28:03       9 阅读
  5. FastAdmin菜单规则树形结构分类显示

    2024-05-16 01:28:03       9 阅读
  6. 第十一周学习笔记DAY.1-MySQL

    2024-05-16 01:28:03       9 阅读
  7. mysql 索引失效的原因

    2024-05-16 01:28:03       11 阅读
  8. 设计模式:备忘录模式

    2024-05-16 01:28:03       11 阅读