查看: 3408|回复: 18

窗口显示

[复制链接]

该用户从未签到

发表于 2008-11-10 00:34:11 | 显示全部楼层 |阅读模式
当我在程序初始时SetWindowPos设定窗口大小为1024*600,场景的显示不成比例,
怎样才能让它像我们拖放的效果一样实现等比例缩放呢?

该用户从未签到

发表于 2008-11-10 08:20:13 | 显示全部楼层
您提供的信息好像有点少,能提供更多的细节或者一些代码吗?

该用户从未签到

 楼主| 发表于 2008-11-10 08:23:43 | 显示全部楼层
如果采用默认sdi的窗口,我拖放大小的时候可以看到场景是等比变化的,
但是如果我在OnCreate里面SetWindowPos(NULL,0,200,1280,300,SWP_FRAMECHANGED);
出来的窗口就会发现场景被拉伸了。

该用户从未签到

发表于 2008-11-10 09:09:21 | 显示全部楼层
如果您的例子类似于osgviewerMFC的话,那么有一个重要的但与OSG无关的原则:这个函数给您的窗口传递了什么消息?
OSG可以截获窗口的WM_SIZE消息并据此调整场景的比例,我不清楚SetWindowPos函数是否会给窗口发送这个消息,您可以换而使用MoveWindow试一试

该用户从未签到

 楼主| 发表于 2008-11-10 09:15:39 | 显示全部楼层
试了,不行。觉得SetWindowPos和MoveWindow原理上一样的。拖放时响应的是sizing,但是直接设置窗口大小响应的是size,所以估计osg对sizing进行了处理

该用户从未签到

发表于 2008-11-10 09:21:09 | 显示全部楼层
那么把您的工程传上来看一下方便吗?
我在一个自定义的EventHandler中已经用MoveWindow实现了

该用户从未签到

 楼主| 发表于 2008-11-10 09:32:42 | 显示全部楼层
?自定义EventHandler?
麻烦发到我邮箱好吧,刚才给你发邮件的那个地址就可以,谢谢

该用户从未签到

发表于 2008-11-10 10:29:54 | 显示全部楼层
更改OSG窗口的关键代码是这两句:
gc->resized( 0, 200, 1280, 300 );
mViewer->getEventQueue()->windowResize( 0, 200, 1280, 300 );

然后您可以设法取得主窗口的句柄并修改Windows窗口的尺寸

该用户从未签到

发表于 2008-11-10 11:05:04 | 显示全部楼层
这样是肯定有问题的,,,,,窗口的大小是需要按一定的比例来处理的,,如果不是的话,场景就会出现拉伸,,通常的比例是4:3的,,,,如果不是的话,,这时你需要设置一下投影视图矩阵就可以了,,,我的新书《OSG入门指南》里面会专门讲到的这点的,,,虽然现在还没写到,,也没有写完,,,但是先宣传一下,哈哈~~~~~~~~~~~

该用户从未签到

发表于 2008-11-10 11:07:38 | 显示全部楼层
原帖由 FlySky 于 2008-11-10 11:05 发表
这样是肯定有问题的,,,,,窗口的大小是需要按一定的比例来处理的,,如果不是的话,场景就会出现拉伸,,通常的比例是4:3的,,,,如果不是的话,,这时你需要设置一下投影视图矩阵就可以了,,,我的新书《OSG ...


呀?有新书吗,是不是电子版,还是联系到合适的出版社了~~有出版社的话记得也帮我美言几句~~
还有新书也用个酷一点的名字吧,《OSG Gems》什么的,有气魄~~

[ 本帖最后由 array 于 2008-11-10 11:08 编辑 ]

该用户从未签到

发表于 2008-11-10 11:14:26 | 显示全部楼层
原帖由 array 于 2008-11-10 11:07 发表


呀?有新书吗,是不是电子版,还是联系到合适的出版社了~~有出版社的话记得也帮我美言几句~~
还有新书也用个酷一点的名字吧,《OSG Gems》什么的,有气魄~~


现在还不清楚,,,先写完再说吧,,,看看到时候能不能联系到出版社,,名字的确是俗气了一点,,我没写作天赋啊,暂时就先这个名字吧,,要不您给推荐一个经典的名字,,不过,太经典了怕有愧读者啊,,,,,,哈哈~~~这本书主要是系统的讲解OSG的各个方面的东西吧,,再加上简单那的例子加深理解~~~只是我平时项目业余抽出时间写的一些东西而已,,可以作为入门学习吧~~~~

该用户从未签到

 楼主| 发表于 2008-11-11 22:38:53 | 显示全部楼层
嗯,需要用setProjectionMatrixAsPerspective设置下窗口比率。谢谢两位

该用户从未签到

发表于 2008-11-11 23:01:26 | 显示全部楼层
原帖由 wendy_f 于 2008-11-11 22:38 发表
嗯,需要用setProjectionMatrixAsPerspective设置下窗口比率。谢谢两位


这个其实是设置投影矩阵的~~不过也对,的确重设投影矩阵是解决问题的另一种好途径

该用户从未签到

发表于 2008-11-12 14:25:40 | 显示全部楼层
原帖由 array 于 2008-11-10 10:29 发表
更改OSG窗口的关键代码是这两句:
gc->resized( 0, 200, 1280, 300 );
mViewer->getEventQueue()->windowResize( 0, 200, 1280, 300 );

然后您可以设法取得主窗口的句柄并修改Windows窗口的尺寸

老大:
    新书赶快啊!现在是求知若渴啊! 希望能早点拜读你的大作

该用户从未签到

发表于 2008-11-12 14:42:01 | 显示全部楼层
原帖由 Shuker 于 2008-11-12 14:25 发表

老大:
    新书赶快啊!现在是求知若渴啊! 希望能早点拜读你的大作


回错贴了吧~~
我的“大作”现在就可以拜读……赶紧期待FlySky的大作!!:lol

该用户从未签到

发表于 2008-11-12 15:48:38 | 显示全部楼层

回复 15楼 的帖子

是搞错了。您老人家的大作我已经正在拜读!最近有新作吗? 指引下我这样的新手吧!

该用户从未签到

发表于 2008-11-12 16:37:08 | 显示全部楼层
谢谢,,,,,最近是相当的忙啊,,,都好几天没合眼了~~~~我写的也只是一些入门的东西以及平时项目时可能的问题,,,再加上一些例子,,不会专门针对源码分析的,,其中只会穿插一些,,,,,十二月就会发布啦,哈哈~~~

该用户从未签到

发表于 2008-11-12 16:51:30 | 显示全部楼层

回复 17楼 的帖子

期待中……

该用户从未签到

发表于 2008-11-12 20:29:55 | 显示全部楼层
楼主早点发就好了,这个问题之前也困扰了俺几个钟头,当初在OpenGL下面只要手工调用一下glu的reshape回调(glutReshapeFunc指向那个)就可以解决问题了,可到了osg里面反而找不到对应的方法 ...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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