查看: 4593|回复: 18

OSG与CEGUI结合的问题

[复制链接]

该用户从未签到

发表于 2009-4-23 17:08:50 | 显示全部楼层 |阅读模式
运行OSG中自带的例子osgcegui时老是出现OpengGL初始化失败的问题,请问该如何解决呢?谢谢!

该用户从未签到

发表于 2009-4-23 19:42:19 | 显示全部楼层
似乎以前有朋友给出了解决方案?好像是把CEGUI的初始化代码放在别的什么地方就可以了,不过我个人并不清楚

该用户从未签到

发表于 2009-4-24 01:49:51 | 显示全部楼层
OSG自带的CEGUI范例存在的问题。

        范例中CEGUI在进行自身初始化的过程,openGL环境
并没有进行初始化,导致运行后界面不能显示。
        我们将CEGUI界面的初始化工作放在下面两条语句之后
就可以了。

        viewer.realize();       

        viewer.getCamera()->getGraphicsContext()->makeCurrent();

该用户从未签到

发表于 2009-4-24 09:41:18 | 显示全部楼层

回复 3楼 的帖子

很赞 果然如此

该用户从未签到

 楼主| 发表于 2009-4-24 09:50:09 | 显示全部楼层

回复 3楼 的帖子

但是在我的cegui的例子中没有那两句代码,能具体的说一下吗?

该用户从未签到

 楼主| 发表于 2009-4-24 09:52:59 | 显示全部楼层
有调通的大哥能不能把代码上传上来供小弟学习下呢?

该用户从未签到

发表于 2009-4-24 11:22:47 | 显示全部楼层
我大概弄出来了 下面简单的描述一下过程 可能由于版本的不同而略有差别

首先我的系统中软件版本如下
Visual Studio 2005 SP1
OSG 2.3.7
CEGUI0.6.0-vc8

首先是osgcegui.cpp按照“yucnet”的介绍 稍作修改,另外 我觉得每次在命令行输入sheme、lookandfeel、font等参数比较麻烦 所以干脆在程序中写死了,具体的见代码。程序中使用的TaharezLook.scheme等都是在cegui的官方网站中下载的。
osgcegui.rar (2.6 KB, 下载次数: 350)

该用户从未签到

 楼主| 发表于 2009-4-24 18:18:15 | 显示全部楼层
我按照你介绍的方法运行了,可是为什么我运行的时候还是会出现下面的错误?
Error:Unable to set current OpenGL rendering context

该用户从未签到

发表于 2009-4-24 19:44:03 | 显示全部楼层
viewer.realize();      
viewer.getCamera()->getGraphicsContext()->makeCurrent();
这两句加了吗? 要是还不行 那就也许是cegui版本的问题吧 不清楚了

该用户从未签到

发表于 2009-4-25 01:23:53 | 显示全部楼层
估计是你没有设置使用OpenGL环境来设置吧~~~

该用户从未签到

 楼主| 发表于 2009-4-25 19:02:30 | 显示全部楼层

回复 9楼 的帖子

这两句我已经加了,估计是FlySky说指出的那样我没有设置好OpenGL环境。我在运行CEGui的例子的时候,选择DirectX渲染要比OpenGL渲染的速率要快很多,应该是没有设置好。

该用户从未签到

 楼主| 发表于 2009-4-27 11:21:34 | 显示全部楼层
快晕了,还是调不通。我将这句 viewer.getCamera()->getGraphicsContext()->makeCurrent();拆开了看,原来是在调用makeCurrent()的时候就出现Error:Unable to set current OpenGL rendering context错误,请问这是什么原因造成的呢?一直以为是我的CEGUI的安装有问题,折腾了半天原来不是的。

该用户从未签到

 楼主| 发表于 2009-4-28 16:16:39 | 显示全部楼层
谢谢各位的帮忙,问题已经解决。在yucnet指出的那两句代码前再加上一句就行了,具体代码如下:
viewer.setThreadingModel(osgViewer::Viewer::SingleThreaded); //之前少了这一句,所以一直调不通
viewer.realize();
viewer.getCamera()->getGraphicsContext()->makeCurrent();

这样写的原因网上的说法是cegui只支持单线程
  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2009-5-24 04:54:33 | 显示全部楼层
    tan_dunming能否提供一下编译好的exe+那些资源,看一下是不是我的机器出了什么问题,怎么搞都出错,也没有什么错误提示,上来就是can't read

    该用户从未签到

    发表于 2009-5-24 11:04:14 | 显示全部楼层
    已发到邮箱
  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2009-5-24 18:53:50 | 显示全部楼层
    建议资源路径初始化一下,就不用往进拷资源文件了
  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2009-5-24 18:57:12 | 显示全部楼层
    CEGUIDrawable::CEGUIDrawable()
    {
            //是否支持渲染list,对LOD会有影响
        setSupportsDisplayList(true);

            //设置事件回调类
        setEventCallback(new CEGUIEventCallback());

            //初始化opengl渲染环境
        new CEGUI::System( new CEGUI::OpenGLRenderer(0));  

            //初始化资源provider
            CEGUI::Scheme::setDefaultResourceGroup("schemes");
            CEGUI::Imageset::setDefaultResourceGroup("imagesets");
            CEGUI::Font::setDefaultResourceGroup("fonts");
            CEGUI::WidgetLookManager::setDefaultResourceGroup("looknfeels");
            CEGUI::WindowManager::setDefaultResourceGroup("layouts");
            CEGUI::ScriptModule::setDefaultResourceGroup("lua_scripts");

            CEGUI:: DefaultResourceProvider* rp = static_cast<CEGUI:: DefaultResourceProvider*>(CEGUI::System::getSingleton().getResourceProvider());  
            rp->setResourceGroupDirectory("schemes", "F:/OsgResource/OpenSceneGraph/Package/CEGUI-SDK-VC9-6.0/CEGUI-SDK-0.6.0-vc9/Samples/datafiles/schemes/");
            rp->setResourceGroupDirectory("imagesets", "F:/OsgResource/OpenSceneGraph/Package/CEGUI-SDK-VC9-6.0/CEGUI-SDK-0.6.0-vc9/Samples/datafiles/imagesets/");
            rp->setResourceGroupDirectory("fonts", "F:/OsgResource/OpenSceneGraph/Package/CEGUI-SDK-VC9-6.0/CEGUI-SDK-0.6.0-vc9/Samples/datafiles/fonts/");
            rp->setResourceGroupDirectory("looknfeels", "F:/OsgResource/OpenSceneGraph/Package/CEGUI-SDK-VC9-6.0/CEGUI-SDK-0.6.0-vc9/Samples/datafiles/looknfeel/");
            rp->setResourceGroupDirectory("layouts", "F:/OsgResource/OpenSceneGraph/Package/CEGUI-SDK-VC9-6.0/CEGUI-SDK-0.6.0-vc9/Samples/datafiles/layouts/");
            rp->setResourceGroupDirectory("lua_scripts", "F:/OsgResource/OpenSceneGraph/Package/CEGUI-SDK-VC9-6.0/CEGUI-SDK-0.6.0-vc9/Samples/datafiles/lua_scripts/");

         _activeContextID = 0;
    }

    该用户从未签到

    发表于 2011-4-3 21:09:29 | 显示全部楼层
    回复 7# tan_dunming

    你好,能把你的编译好的给我发一份么,我的也出现同样的问题了,谢了。524582553@qq.com

    该用户从未签到

    发表于 2011-12-22 11:42:32 | 显示全部楼层
    本帖最后由 xzll77 于 2011-12-22 11:44 编辑
    tan_dunming 发表于 2009-4-24 11:22
    我大概弄出来了 下面简单的描述一下过程 可能由于版本的不同而略有差别

    首先我的系统中软件版本如下


    你好,按照你的方法,我编译出来的效果是这样,模型在界面的前面,为什么会是这样?

    而且,CEGUI的鼠标也不能正常显示,出现双鼠标的效果。


    捕获.JPG
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    OSG中国官方论坛-有您OSG在中国才更好

    网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

    联系我们

    • 工作时间:09:00--18:00
    • 反馈邮箱:1315785073@qq.com
    快速回复 返回顶部 返回列表