查看: 3123|回复: 15

如何新建一个窗口,销毁一个窗口

[复制链接]

该用户从未签到

发表于 2009-8-5 16:25:07 | 显示全部楼层 |阅读模式
我想启动程序后,出现一个窗口(如播放一段视频)
然后这个窗口消失,全屏进入场景。。。。

我现在网上查了些资料,估计要用到的东西有
1、新建osg::GraphicsContext::Traits对象
     对Traits对象的一些成员设置。
2、创建osg::GraphicsContext对象
3、设置viewer中的camera的gc
播放完后
消毁gc,再新建一个gc,(如怎么销毁)
因为两个窗口不会同时出现,所以觉得viewer就可以了,camera也只要一个就可以了,不知道
不知道我的思路如何
希望大家提供解决这个需求的方法。。。谢谢

该用户从未签到

 楼主| 发表于 2009-8-5 17:05:28 | 显示全部楼层
本帖最后由 billong 于 2009-8-5 17:16 编辑

1# billong


按照这个思路,我写了代码。。。
期望模拟了这个过程,程序启动,出现第一个窗口,
                           按c键出现第二个窗口
结果发现的错误如下:
对于第一个窗口,是窗口是黑的,
按c键,内存错误中断。。。。

osgwindowes.rar

6.67 KB, 下载次数: 130, 下载积分: 威望 1

该用户从未签到

发表于 2009-8-6 13:27:04 | 显示全部楼层
没看你的代码,,,不过,,请注意使用startThreading()~~~

该用户从未签到

 楼主| 发表于 2009-8-11 15:27:54 | 显示全部楼层
我调用了Viewer的realize()方法啊。。。里面有开启了进程啊

该用户从未签到

发表于 2009-8-11 17:05:26 | 显示全部楼层
我个人认为建立两个Camera对象,然后控制它们的显隐就可以了

该用户从未签到

 楼主| 发表于 2009-8-11 17:33:37 | 显示全部楼层
5# array

array.... 实际上我想导入模型的做进度条。。。。
上次您提示重写流的uflow函数,已经实现了在控制台上的进度条。现在想图形化,所以才有了上面的思路
而如何按您的思路的话,窗口要在渲染出模型,也就是在导入模型之后显示,这样就失去了进度条的作用。。。

该用户从未签到

发表于 2009-8-11 17:48:01 | 显示全部楼层
这样的话,进度条完全可以用定时器控件来控制?不知您的具体计划是什么样的

该用户从未签到

 楼主| 发表于 2009-8-11 18:24:28 | 显示全部楼层
7# array

我现在的想法就是先创建一个窗口,这个窗口显示进度条,之后销毁或者隐藏该窗口,再创建一个新的窗口,这个窗口显示场景。。。
至于进度条的进度控制可以像您说的那样,用计时器。或者也可以读一部分模型,进度条增加一部分,这样交替。
我看了您写的最长一帧,窗口应该在在realize()中显示。如果进度条和场景放在同一个窗口里,两者好像不能先后显示。。。 而是同时显示。。。。不知道我说的对不对

现在的一直困扰我的就是动态创建销毁窗口。

该用户从未签到

发表于 2009-8-11 18:46:15 | 显示全部楼层
您一定要使用OpenGL窗口的进度条?个人觉得意义不大,用GUI库的进度条控件就足够了,也可以写一个2D的
“窗口应该在在realize()中显示”,抱歉我不明白这句话的意思。realize()函数的主要工作是创建渲染线程

该用户从未签到

发表于 2009-8-11 18:49:23 | 显示全部楼层
不知是否可这样尝试?
在同一个窗口时候.你先设置不对场景绘制,而是先绘制进度条,等进度条完成后,
设置不对进度条绘制,最后绘制场景

该用户从未签到

 楼主| 发表于 2009-8-11 19:08:28 | 显示全部楼层
10# acmiyou


请问怎么设置呢。。。用什么函数?谢谢

该用户从未签到

发表于 2009-8-11 19:36:59 | 显示全部楼层
绘制过程是使用visitor来访问的.所以你可以设置
root->addChild(scene)
root->addChild(progress)

scene->setNodeMask(0) 就可以不绘制它了..
等进度条结束后 恢复绘制scene->setNodeMask(0xffffffff)
并隐藏 progress->setNodeMask(0)

该用户从未签到

 楼主| 发表于 2009-8-11 19:58:00 | 显示全部楼层
本帖最后由 billong 于 2009-8-11 20:06 编辑

我单步调试的时候发现,发现窗口的出现是realize()这个的函数中。。。。。。。。。执行完frame后就同时显示,
这样您的思路还是无法让窗口先后显示,

该用户从未签到

发表于 2009-8-11 22:43:34 | 显示全部楼层
为什么progress一定要是OpenGL窗口呢?

该用户从未签到

 楼主| 发表于 2009-8-12 11:01:53 | 显示全部楼层
14# array
您的意思是用win32的窗口。。。。
现在我写的是控制台程序,如果改用win32窗口的话,那就相当于换框架了,要重新全部的代码。。。
所以一直才一直抓着osg窗口不放,,,呵呵

该用户从未签到

发表于 2009-8-12 22:44:11 | 显示全部楼层
真正开发不会用控制台方式的,或者也可以选用其它的GUI库,例如Qt,wxWidgets等,都远远强过MFC
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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