入门imgui第一天,把遇到的问题和参考两位大佬写的教程,总结了一下,写了下来,若有错误欢迎指正

参考文章:

【记录】DirectX12 添加ImGui组件 - 知乎 (zhihu.com)

Directx11/12添加imgui踩坑记 - 知乎 (zhihu.com)

一、下载imgui库

官方网址:

GitHub - ocornut/imgui: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies

在DirectX12中使用imgui库,需要以下文件:

   后面这四个文件可以在backends文件夹中找到。

二、准备工作

2.1 使用的dx12的demo

使用的是dx龙书第六章绘制立方体的代码,在此项目上加入imgui库

2.2 加入头文件

创建"imgui"的文件夹,将上述15个imgui的文件复制进来。

若遇到“找不到imgui.h"的问题,记得查看项目包含目录是否将imgui.h的路径记录下来,如:

三、使用imgui

①在d3dAPP.cpp和Box.cpp中包含以下头文件:

#include "imgui.h"
#include "imgui_impl_win32.h"
#include "imgui_impl_dx12.h"

②在d3dApp.cpp中创建srv堆

在第六章绘制立方体项目中,只用到了RTV和DSV,所以需要自己创建srv堆。imgui需要srv堆才能完成绘制。

在CreateRtvAndDsvDescriptorHeaps函数中添加以下代码:

D3D12_DESCRIPTOR_HEAP_DESC SrvHeapDesc;SrvHeapDesc.NumDescriptors = 1;SrvHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV;SrvHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE;SrvHeapDesc.NodeMask = 0;ThrowIfFailed(md3dDevice->CreateDescriptorHeap(&SrvHeapDesc, IID_PPV_ARGS(mSrvHeap.GetAddressOf())));

③在d3dAPP.cpp的初始化函数中,添加以下代码:

IMGUI_CHECKVERSION();ImGui::CreateContext();   //创建上下文ImGuiIO& io = ImGui::GetIO();(void)io;ImGui::StyleColorsDark();ImGui_ImplWin32_Init(mhMainWnd);ImGui_ImplDX12_Init(md3dDevice.Get(), SwapChainBufferCount,DXGI_FORMAT_R8G8B8A8_UNORM, mSrvHeap.Get(),mSrvHeap.Get()->GetCPUDescriptorHandleForHeapStart(),mSrvHeap.Get()->GetGPUDescriptorHandleForHeapStart());

④在Box.cpp的Draw()函数中,添加以下代码,注意:在指令关闭之前:

//        开启imgui帧  重置命令列表                                  ImGui_ImplDX12_NewFrame();ImGui_ImplWin32_NewFrame();ImGui::NewFrame();// 1. Show the big demo window (Most of the sample code is in ImGui::ShowDemoWindow()! You can browse its code to learn more about Dear ImGui!).bool show_demo_window = true;if (show_demo_window)ImGui::ShowDemoWindow(&show_demo_window);// 2. Show a simple window that we create ourselves. We use a Begin/End pair to created a named window.//以下是绘制{static int counter = 0;//test1    控制旋转ImGui::Begin("WangMeifo!Test");                          // Create a window called "Hello, world!" and append into it.ImGui::Text("Drag the slider to rotate the Angle of the Box.");               // Display some text (you can use a format strings too)ImGui::Checkbox("Demo Window", &show_demo_window);      // Edit bools storing our window open/close state//ImGui::SliderFloat("float", &mPhi, 0.1f, 1.0f);  //mPhi立方体的旋转角度ImGui::SliderFloat("float", &mTheta, 0.1f, 1.0f);  //mTheta也是旋转角度// Edit 1 float using a slider from 0.0f to 1.0fif (ImGui::Button("Button"))                            // Buttons return true when clicked (most widgets return true when edited/activated)counter++;ImGui::SameLine();ImGui::Text("counter = %d", counter);ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate);ImGui::End();ImGui::Render();mCommandList->SetDescriptorHeaps(1, mSrvHeap.GetAddressOf());ImGui_ImplDX12_RenderDrawData(ImGui::GetDrawData(), mCommandList.Get());

⑤在d3dApp.cpp中修改窗口程序,让其响应imgui

//       imgui需要响应消息   以下是对窗口过程函数做的修改:
// Forward declare message handler from imgui_impl_win32.cpp
extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);LRESULT D3DApp::MsgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{ImGui_ImplWin32_WndProcHandler(hwnd, msg, wParam, lParam);

以上部分完成了立方体的旋转,接下来完成背景颜色的改变

⑥在draw()函数中,添加以下代码:

     //控制背景颜色   test2ImGui::Begin("Change the BackGround color:");ImGui::ColorEdit3("ChangeColor",(float*)&changeColor);ImGui::End();

其中,changeColor需要提前声明为成员变量

 ImVec4 changeColor = ImVec4(0.66f, 0.32f, 0.60f, 1.00f);

然后在绘制时,通过以下代码改变背景颜色

//         利用imgui修改背景色                         const float change_color_with_alpha[4] = {changeColor.x * changeColor.w,changeColor.y * changeColor.w,changeColor.z * changeColor.w };mCommandList->ClearRenderTargetView(CurrentBackBufferView(), change_color_with_alpha, 0, nullptr);

四、效果展示

imgui我也才入门,若有错误,烦请大家指正,谢谢~

在DX12中使用imgui 入门教程 立方体旋转+改变背景颜色相关推荐

  1. python numpy教程_Python中的Numpy入门教程

    这篇文章主要介绍了 Python 中的 Numpy 入门教程,着重讲解了矩阵中的数组操作 , 需要的 朋友可以参考下 1 . Numpy 是什么 很简单, Numpy 是 Python 的一个科学计算 ...

  2. MVC中使用signalR入门教程

    一.前言:每次写总要说一点最近的感想 进入工作快半年了,昨天是最郁闷的一天,我怀疑我是不是得了"星期一综合征",每个星期一很没有状态.全身都有点酸痛,这个可能一个星期只有周末才打一 ...

  3. Pyqt5 在表格中单元格设置下拉框,并根据选项改变背景颜色

    关于怎么在表格中单元格设置下拉框,并根据选项改变背景颜色 def table_combox_init(self):combox_statePlm_jria_list = ['', '无', 'O', ...

  4. android seekbar 背景颜色,Android中自定义SeekBar如何实现分段显示不同背景颜色

    Android中自定义SeekBar如何实现分段显示不同背景颜色 发布时间:2020-07-17 16:04:27 来源:亿速云 阅读:197 作者:小猪 这篇文章主要讲解了Android中自定义Se ...

  5. 40天python新手入门教程_自律改变自我!努力40天轻松从入门到精通Python

    我是完全自学的,看完这条回答你就不用花钱学了.一千多的课程也就是基础课,并不会给你有多深入.如果要是学基础的话,看看下面的学习线路图以及相关的学习方法足够了.贴一个我之前自学的路径图和方法. 小白学P ...

  6. python改变背景颜色_python中绘图时怎么改背景颜色?

    python中一般使用matplotlib库进行绘图,下面我们就来看一下python中绘图时修改背景颜色的方法: 子图可以对plt.subplot的参数做修改,下面是对子图的背景颜色修改代码:impo ...

  7. android中设置ListView的选中的Item的背景颜色(附源码)

    http://longyi-java.iteye.com/blog/976067 ListView中没有默认的选择颜色,只有选择Item后的焦点颜色,鼠标点击时Item有颜色,放开鼠标后颜色也就没有了 ...

  8. java中的各行换色_隔行变换背景颜色和颜色预警

    需求说明 隔行变换背景颜色:单一背景颜色的报表会让报表浏览者产生眼晕的感觉,通过适当交替的背景色能增加视觉舒适度,也会给页面美工增色不少.此需求是报表展现时最普通最常见的需求. 颜色预警:报表中的某些 ...

  9. easyui 中datagrid的列合并mergeCells,改变表头颜色

    官网例子 推荐文章 核心在onLoadSuccess中添加如下: 一.合并表格 $("#dataGrid").datagrid('mergeCells',{index: 0, // ...

最新文章

  1. 最后的分的计算机公式,省考最后10天!掌握这些数学运算公式,提分!
  2. 再给大家发 200 个红包!
  3. elasticsearch 条件去重_elasticsearch去重计数
  4. Swagger工作笔记001---Swagger2的使用
  5. 专科python应届生工资多少-作为一个应届毕业生月薪15K?你哪来的自信?
  6. 局域网内和局域网间的通信(交换机与路由器)
  7. Tomcat启动startup.bat一闪而过就消失的原因和解决方法
  8. 360手机:360N6Lite Twrp、Root、Magisk教程
  9. 关于Iphone 4 如何用itunes备份短信等设置
  10. Running “flutter pub get“ in xxx... 报错: Git error 443
  11. 【EXLIBRIS】纸版书目整理 -- 小书架 上 01 【166 种】【203册】
  12. 物质是世界,能量是本质
  13. UneXt 基于MLP的快速医学图像分割网络
  14. 智能车图像处理(二)基础寻线
  15. 张艾迪(创始人):解码互联网天才
  16. 网页特效——图片翻页和图片滚动的实现方法
  17. spotlight on oracle
  18. Power BI 可视化:KPI 指标在卡片图中的突出显示
  19. python输出百位级以上的数字_python输出百位以上数字
  20. 【项目】数仓项目(十)

热门文章

  1. HDFS 文件下载 通过浏览器
  2. DaVinci:示波器
  3. 图片透明代码html5,javascript – 透明图像背景html5画布
  4. DHT11温湿度模块驱动程序
  5. Vue2.0中的事件修饰符
  6. 织梦滚石v3.0导航网站源码+测试版
  7. 马斯克大力推荐Starlink新品:价格更高,网速更慢???
  8. 利用DGL中的消息传递API手搭GCN实现节点分类
  9. 更改 UIImagePickerController 导航条文字的颜色
  10. Linux —— Ubuntu下C++获取CPU使用率、GPU使用率、GPU温度