wxWidgets支持OpenGL,只需要在编译选项中配置 --with-opengl
但是OpenGL提供的图形接口太少,为了便于开发,有一个Glut的库,但是这个似乎不常用了,还好有开源的freeglut,现在大家普遍使用。于是我就选择它吧!
安装很简单,解压gz package以后,有README和INSTALL文件。
./autogen.sh
./configure
make
如果不是root,运行su
make install
在编译的时候,修改makefile,添加 -lglut就可以了
g++ -o cube cube_cube.o `wx-config --libs gl,core,base` -lglut
在cpp文件中,wxwidgets没有main函数,但是我们需要添加:
int argc = 1;
char* argv[1] = { wxString((wxTheApp->argv)[0]).char_str() };
glutInit(&argc, argv);
所以我加在MyApp::OnInit()中
bool MyApp::OnInit()
{
int argc = 1;
char* argv[1] = { wxString((wxTheApp->argv)[0]).char_str() };
glutInit(&argc, argv);
// Create the main frame window
(void) MyFrame::Create(NULL);
return true;
}
这样就可以调用glut的接口,画圆柱,圆球,茶壶等立体图了。
关于OpenGL, wxWidgets在Windows上的编译和使用
有些是书上或者网上的介绍,我简单的重复一下:
修改include\wx\msw\setup.h
#define wxUSE_GLCANVAS 0
改为:
#define wxUSE_GLCANVAS 1
如果其它PC机器没有安装wxWidgets,我们生成的exe,期望能够在那些机器上运行,运行库建议改为static,在build\msw\config.vc中
RUNTIME_LIBS = dynamic
改为:
RUNTIME_LIBS = static
USE_OPENGL =0
改为
USE_OPENGL =1
USE_OPENGL的修改,进行nmake -f makefile.vc时,不需要再添加。也就是说,USE_OPENGL =0,我们在编译时,运行:
nmake -f makefile.vc USE_OPENGL=1
编译成功后,在lib\vc_lib\检查wxmsw28d_gl.lib存在与否(这个路径与release或者debug相关,数字28与版本有关,我用的是2.8.12)。
到sample的目录下,编译希望看到的case就OK了。
另外加一点:
我第一次编译时没有包含opengl库,在build\msw运行:
nmake clean -f makefile.vc
nmake -f makefile.vc USE_OPENGL=1
但是还是不能支持OpenGL,于是
nmake clean -f makefile.vc
之后,lib\vc_lib库全部删除(lib\vc_lib\mswd\wx\setup.h,检查wxUSE_GLCANVAS的值仍为0-:) ),再编译,OK!
因为我设置为静态库(static)进行编译,在使用VS2005编译sample时,在工程属性中修改
"Configuration Properties" -> "C/C++" -> "Code Generation", Runtime Library 选择"Multi-threaded Debug(/MTd)"。默认是(/MDd)