IMGUI学习总结
来源:互联网 发布:淘宝信用值达到多少 编辑:程序博客网 时间:2024/06/07 16:11
1.GUI实现方式介绍:
目前流行的GUI有两种:RMGUI和IMGUI, RMGUI即Retained Mode GUI,代表有MFC,它的每个控件都有一个类,需要新控件时,实例化一个对象即可;IMGUI即Immediate Mode GUI,它的每个控件是个函数,非常简单,适用于游戏和其它实时帧应用程序。
1.1 RMGUI和IMGUI的实现原理:
a)在RMGUI中,应用只负责搭建场景,图形库负责定义场景元素、更新场景元素、绘制场景元素,保有场景元素的模型。
(图1,RMGUI)
b)在IMGUI中需要定义场景元素、更新场景元素、搭建场景,图形库只负责绘制场景元素。
(图2,IMGUI)
图片摘自:https://msdn.microsoft.com/en-us/library/windows/desktop/ff684178(v=vs.85).aspx
2.IMGUI的一般用法
在IMGUI中每个控件都是一个函数,函数参数至少有控件ID,控件的左上角坐标。函数返回值一般为控件是否被点击。
if(button(GEN_ID, 10,20)){ button_was_pressed();}
3.IMGUI实现
3.1 控件绘制架构
每个控件都是一个函数,需要哪个控件就调用哪个函数。
和控件渲染相关的三个函数:imgui_prepare, imgui_render, imgui_finish。
a) imgui_prepare负责控件绘制前处理,清空状态。
b) imgui_render负责调用各控件函数生成控件,并对控件的点击做处理。
c) imgui_finish负责响应一些事件。
这三个函数依次在render中调用,实现代码如下:
imgui_render(){ button(2,50,50); if (button(4,150,150)) exit(0);}void render(){ imgui_prepare(); imgui_render(); imgui_finish();}
3.2 编写控件函数
每个控件函数至少需要完成3个任务:
a) 绘制控件
b) 事件处理
c) 状态切换
摘自:http://sol.gfxile.net/imgui/ch03.htmlint button(int id, int x, int y){ // 事件处理 if (regionhit(x, y, 64, 48)) { uistate.hotitem = id; if (uistate.activeitem == 0 && uistate.mousedown) uistate.activeitem = id; } // 绘制 drawrect(x+8, y+8, 64, 48, 0); // 状态切换 if (uistate.hotitem == id) { if (uistate.activeitem == id) { // Button is both 'hot' and 'active' drawrect(x+2, y+2, 64, 48, 0xffffff); } else { // Button is merely 'hot' drawrect(x, y, 64, 48, 0xffffff); } } else { drawrect(x, y, 64, 48, 0xaaaaaa); } // If button is hot and active, but mouse button is not // 状态判断 if (uistate.mousedown == 0 && uistate.hotitem == id && uistate.activeitem == id) return 1; // Otherwise, no clicky. return 0;}
0 0
- IMGUI学习总结
- Unity IMGUI
- love2d与imgui
- Unity 3D 官方文档 UGUI总览 IMGUI OnGUI Editor脚本初窥1
- Unity 3D 官方文档 UGUI总览 IMGUI OnGUI Editor脚本初窥2
- 学习总结
- 学习总结
- 学习总结
- 学习总结
- 学习总结
- 学习总结
- 学习总结
- 学习总结
- 学习总结
- 学习总结
- 学习总结
- 学习总结
- 学习总结
- ubuntu开发环境搭建(一)搭建ftp服务器
- 关于解决Android真机访问PC上的tomcat的问题
- struts2对Action中所有方法进行输入校验(手工编写代码)
- Win7提示未授予用户在此计算机上的请求登录类型
- C++中qsort排序方法 / 同时可以学习回调函数
- IMGUI学习总结
- ubuntu开发环境搭建(一)ssh安装及配置
- C# SaveFileDialog的用法保存文件
- 百度收录带www和不带www域名的不同和解决办法
- 欢迎使用CSDN-markdown编辑器
- C++ 排序函数 sort(),qsort()的用法 / 同时可以学习回调函数
- leetcode之Linked List Cycle II
- Android中Canvas绘图之PorterDuffXfermode使用及工作原理详解
- (java)Best Time to Buy and Sell Stock II