前言
之前公司要求使用wxWidgets做GUI,基于OpenGL图形内核,开发三维可视化工具。目前初步开发工作基本已经完成,剩下都是完善了。这里记录一下最开始的框架搭建过程(当然是简化版啦)。wxWidgets结合OpenGL开发可以实现跨平台应用,再结合CMake和VS Code,整体开发工具用习惯了会感觉非常顺手。
界面编辑
首先,使用DialogBlocks新建一个工程,这里工程目录名为wxGL,工程名称为TestOpenGL。
添加一个wxDialog元素,然后TestOpenGLApp的属性Main下有个Main window,设置其为ID_MAINDIALOG。
在Advanced标签页中可以找到wxGLCanvas,设置其属性Size的Width和Height均为500,Sizer下的AlignH为Expand,然后Stretch factor设置为1。
然后添加一个wxBoxSizer:H,其下添加一个Button,设置其属性Main下的Label为Open。效果如下:
接下来选择菜单栏View->Settings选择Configurations,若没添加编译器,先添加合适的编译器,然后选择其中一项,这里使用的GCC Unicode Debug。然后配置其Configuration Settings。Use OenGL选择Yes;Use installed wxWidgets选择Yes;C++ Command在原有字符串后添加-std=c++11;确定。接下来就可以正常Build啦!
CMake编译
接下来DialogBlocks就没用了!到工程目录下,删掉除了cpp和h以外的其他文件。新建一个文本文件,更名为CMakeLists.txt。内容如下,可以正常编译。然后终端下:cd build》cmake ..》make,即可得到可执行文件了。
cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR)
project(wxTest)
#如果遇到提示需要-std=c++11,则这句必须加上
set(CMAKE_CXX_STANDARD 11)
include_directories(./ /usr/include )
aux_source_directory(. SRC_DIR)
add_executable(myapp ${SRC_DIR})
#找到OpenGL库
set(GL_LIBPATH /usr/lib/x86_64-linux-gnu)
find_library(LIB_GLU GLU ${GL_LIBPATH})
find_library(LIB_GL GL ${GL_LIBPATH})
set(GL_LIBS ${LIB_GLU} ${LIB_GL})
#找到wxWidgets的相关包,直接使用即可
find_package(wxWidgets REQUIRED net gl core base)
include(${wxWidgets_USE_FILE})
target_link_libraries(myapp ${wxWidgets_LIBRARIES} ${GL_LIBS})
编译执行效果和之前DialogBlocks结果一致。可以看到实际Canvas中显示为窗体背后的内容。即它本身没有有效显示,这是正常的,因为要让OpenGL在wxWidgets下正常显示需要实现wxGLContext和wxGLCanvas两个类。具体程序可以参考wxWidgets提供的cube(Samples/opengl/cube)例程,将该Sample稍加改动copy到我们用DialogBlocks建立的源码中就能完美显示了。
至此,我们就可以实现DialogBlocks为OpenGL编辑界面啦。(当然,之前那些删除的文件其实可以不删除,而是另外备份起来,这样当界面要增加新的需求时,可以随时更改)