OPENGL + GLUT + Anttweakbar + FLTK

先说glut,虽说glut有点过时,作者很久没更新了,但确实很轻量级很可靠,glut最大的问题在于点右上角的叉,程序就直接退出,单窗口可能觉得没什么,但是要是多窗口的情况,关一个子窗口导致整个程序退出那是相当头疼的,另一个大问题就是进入 glutmainloop()之后就一直在里面循环下去不会退出了。

   解决方法:

1.freeglut 或者 openglut ?  可以解决直接退出和无限循环的问题,有尝试过,在中文显示方面出了点问题就没有采用下去了,仍锁定用glut。

 2.采用修改过的glut库,网上有一个流传较广的修改版本,添加了一个 glutWMCloseFunc(WindowClosedFunc_Main)的函数,可以注册点击关闭图标之后调用的函数。

 3.自己修改glut的源码,可以参考这:http://www.sjbaker.org/steve/software/glut_hack.html,尝试过,但是没有成功,编译glut源码的时候可能会遇到某些错误,仔细看出错的文件都是glut自带的一些例子文件,可以把这些例子文件从工程中删除掉来使其编译通过

   最后我采用的是第2个方法,另外,glut没有对滚轮的支持,有修改过支持滚轮的版本,但此版本又不支持注册关闭窗口时的函数,所谓不可兼得,要是哪位有个综合的版本,希望告知一下,甚是感谢。

 

□                                                                                                                                                               

   然后是Anttweakbar,非常漂亮的菜单库,和glut能结合得很好,用起来很方便,效果惊人,缺点是菜单好像只支持英文。

这是官网上提供的一些例子程序截图:  http://www.antisphere.com/Wiki/tools:anttweakbar:gallery

 

   在程序里面使用Anttweakbar时要注意当窗口大小改变时,要通知Anttweakbar窗口大小有改变,可以在你的void Resize( GLsizei iWidth, GLsizei iHeight ) 函数里面添加:  TwWindowSize(iWidth, iHeight);

    Anttweakbar也存在有问题,当有多个glut窗口时,两个窗口之间的切换可能导致菜单显示出错,甚至造成你的程序出现贴图错误,每次需重新加载贴图,始终不是解决之道,最新的Anttweakbar版本支持同一窗口内的多个subwindow,但是对于多个独立的窗口仍是会出现贴图错误,不知道是否是我没掌握正确的方法,我现在的做法是避免创建多个窗口。

   编译AntTweakbar的时候可能会出现提示字符串的错误:
 _snprintf(_SummaryString, _SummaryMaxLength, "V={%.2f,%.2f,%.2f} A=%.0f?, ext->Vx, ext->Vy, ext->Vz, ext->Angle)")

那是vs转换版本时的原因?总之在上一句最后加个分号就好了,还有,编译的时候需要系统安装了D3D10的库。

 

□                                                                                                                                                               

   最后是FLTK,很好的界面库,采用它的原因是因为能和glut与anttweakbar结合得很好,很关键一点在于支持中文菜单,前提是采用UTF8编码,FLTK 1.0的版本支持直接在VS软件里面输入中文来定义菜单,但是FLTK 1.3 就得采用函数转换一下编码,解决方法可以参考这几个页面:

http://blog.csdn.net/thy38/archive/2011/01/12/6132947.aspx

http://blog.sina.com.cn/s/blog_494e45fe0100092l.html

    已有的glut程序可以很方便的装入FLTK的框架中,编译时候的一些问题,编译FLTK源码时,需要预先定义WIN32:

    打开源码里面的vs工程时,FLTK的编译生成的文件有:fltk.lib; fltkforms.lib;fltkgl.lib;fltkimages.lib;fltkjpeg.lib;fltkpng.lib fltk,另外,在源码的FL_MENU.cxx文件中可以找到宏定义 LEADING, 其定义的是菜单栏项的高度,FLTK默认的菜单看上去有点挤,修改此处可以使其看上去更美观

    在自己的工程中,glutinit()不再被需要,原有的include "glut.h" 要替换成 FL自带的glut.h文件,  include <FL/glut.h>,原有的glut的一些功能函数可能会丢失,具体参考官方给出的文档。

    在自己的工程使用FLTK:

如有报错,尝试 项目 ->属性 ->配置属性 -> c/c++ ->代码生成 ->运行时库   选择 ”多线程调试 DLL(/MDd)“ 。


对于FLTK 1.0 , 链接库中要加入  fltk.lib  和 ws2_32.lib  comctl32.lib否则可能会报错:

fltk.lib(Fl_x.obj) : error LNK2019: 无法解析的外部符号 ___WSAFDIsSet@8,该符号在函数 "int __cdecl fl_wait(double)" (?fl_wait@@YAHN@Z) 中被引用

对于FLTK 1.3 和 FLTK 1.1, 链接库中要加入  fltk.lib  和 fltkgl.lib  ws2_32.lib  comctl32.lib 否则也可能会报错

    FLTK官网上的例子程序截图,做得相当漂亮:   http://www.fltk.org/applications/shots.php

 

□                                                                                                                                                                

    说点其他的,支持glut的不错的界面库还有GLUI,但是Anttweakbar实在太好用了。

    因为要制作中文的菜单,需要考虑中文支持的问题,考虑过MFC, .NET, QT之类,这里就出现了跨平台的问题,还有现有程序代码也要做较大的改动,现有程序的效率会受到影响。实际尝试过MFC,Anttweakbar在此框架下不能显示,也许是我的代码有错,总是最后放弃了MFC,锁定在了FLTK。暂时看来,OPENGL + GLUT + Anttweakbar + FLTK 这四者能结合得很好,并且是跨平台且开源,速度很快。

转自:http://hi.baidu.com/evevil/item/fcb4215a16fdcb404eff200b

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值