查看: 4137|回复: 10

请教:在例子osgviewerMFC如何实现拉伸窗口时,视图的显示比例也跟着变化

[复制链接]

该用户从未签到

发表于 2008-9-17 11:31:09 | 显示全部楼层 |阅读模式
我估计需要修改viewer的traits以及viewport,但是问题是在viewer已经在运行的时候,怎么对这些属性进行修改呢?

谢谢。

该用户从未签到

发表于 2008-9-17 11:45:13 | 显示全部楼层
视图比例是自动变化的,您可以看一下osgviewerMFC的执行效果。

当您通过形如
  1. osg::ref_ptr<osg::Referenced> windata = new osgViewer::GraphicsWindowWin32::WindowData(hWnd);
复制代码
这样的代码将窗口句柄传递给OSG时,这个窗口中几乎所有与图形渲染有关的Windows消息都会被OSG接收到并予以处理,例如WM_MOVE和WM_SIZE。
如果您熟悉Win32 API编程的话,可以参考GraphicsWindowWin32::handleNativeWindowingEvent函数的源代码;《最长的一帧》中对于这一过程也有详细的讲解

该用户从未签到

 楼主| 发表于 2008-9-17 11:56:51 | 显示全部楼层
哦,好的,谢谢Array,我先看看代码再说。

该用户从未签到

发表于 2008-9-17 12:31:56 | 显示全部楼层
这也是可以实时改的,,,你只要stopThreading()然后设置,然后启用startThreading()~~~~~~array最长的一帧讲得非常详细,,哈哈~~~~~~~~~~~

该用户从未签到

 楼主| 发表于 2008-9-17 12:43:09 | 显示全部楼层
好阿好阿,看来得好好拜读一下array的最长的一帧。

该用户从未签到

 楼主| 发表于 2008-9-17 13:50:04 | 显示全部楼层
OSG的确会处理WM_MOVE及WM_SIZE消息,但是对于WM_SIZE,窗口比例发生变化时,显示的图形的比例还是不会跟着发生变化。
对于stopThreading(),我是这样处理的,我在MFC的view类里面响应WM_SIZE消息,并在响应函数OnSize()里面调用viewer类的stopThreading(),就会异常错误。

该用户从未签到

发表于 2008-9-17 14:23:52 | 显示全部楼层
原帖由 wontor 于 2008-9-17 13:50 发表
OSG的确会处理WM_MOVE及WM_SIZE消息,但是对于WM_SIZE,窗口比例发生变化时,显示的图形的比例还是不会跟着发生变化。
对于stopThreading(),我是这样处理的,我在MFC的view类里面响应WM_SIZE消息,并在响应函数OnS ...


您所说的“显示的图形的比例”指的是什么?如果您是想让显示的模型随着窗口的变化而变化的话,那么根本不用调整viewport啊,只需要改变摄像机的观察矩阵就可以了
stopThreading不要随便使用,事实上通常我们是不会调用它的

该用户从未签到

 楼主| 发表于 2008-9-17 15:51:46 | 显示全部楼层
好像是阿,我只想着traits及viewport了,我试试看,感谢array。
关键是我对OSG里面的很多概念还不清楚。新手上路阿。

该用户从未签到

 楼主| 发表于 2008-9-17 17:40:00 | 显示全部楼层
请教Array,你所说的摄像机的观察矩阵是不是指调用camera的setViewMatrix函数,我试了一下,这个函数在viewer运行的时候调用会有错误。
谢谢。

该用户从未签到

发表于 2008-9-17 18:09:04 | 显示全部楼层
原帖由 wontor 于 2008-9-17 17:40 发表
请教Array,你所说的摄像机的观察矩阵是不是指调用camera的setViewMatrix函数,我试了一下,这个函数在viewer运行的时候调用会有错误。
谢谢。


在运行时如果想改变摄像机的观察矩阵,最好使用漫游器setCameraManipulator,自己编写一个实现相应功能的漫游器,并注意保证重载后的MatrixManipulator::getInverseMatrix函数返回的观察矩阵是您所希望的就可以了

自己调用setViewMatrix的话,必须在更新回调UpdateCallback里面,还有这样就不可以再设置漫游器了,否则您的设置会被漫游器重置

该用户从未签到

 楼主| 发表于 2008-9-17 21:17:13 | 显示全部楼层
听起来有些复杂的说。
再次感谢Array的热心帮助。
决定回去再修炼修炼。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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