查看: 2548|回复: 6

设置相机的事件回调函数

[复制链接]

该用户从未签到

发表于 2011-8-24 10:22:02 | 显示全部楼层 |阅读模式
各位好,今天又遇到一个问题了。 ,本来就是为了防止窗口大小发生变化而写了一个相机事件回调函数,在相机回调函数里面如果窗口有发生变化就重新设置相机的视口和投影矩阵,但是现在有时候鼠标定位不准,有时候又是可以的。下面是相机回调函数:

  1.   osgGA::EventQueue::Events& events = eventVistor->getEvents();
  2.   for (osgGA::EventQueue::Events::const_iterator ite = events.begin(); ite != events.end(); ite++)
  3.   {
  4.    switch ((*ite)->getEventType())
  5.    {
  6.    case osgGA::GUIEventAdapter::RESIZE:
  7.     {
  8.      double ww,wh;
  9.      ww=(*ite)->getWindowWidth();
  10.      wh=(*ite)->getWindowHeight();
  11.      if (0 == ww || 0 == wh)
  12.      {
  13.       return;
  14.      }
  15.      camera->setViewport(0, 0, ww, wh);
  16.      unsigned int uw, uh;
  17.      getScreenResolution(uw, uh);
  18.      double pw, ph;
  19.      pw = 100.0;
  20.      ph = pw * ((double)uh / (double)uw);
  21.      double radiow = uw / ww;
  22.      double radioh = uh / wh;
  23.      pw /= radiow;
  24.      ph /= radioh;
  25.      camera->setProjectionMatrixAsOrtho(0, pw, 0, ph, -1000, 1000);
  26.     }
  27.     break;
  28.    }

复制代码

上面的100,是我一开始设置投影矩阵的宽度的。
在MFC和ActiveX下有时候鼠标是可以定位到按钮上,有时候又是不可以的,如下图:
QQ截图20110824101932.jpg
本来单击上面的退出按钮应该关闭,但是现在没有定位准确,单击上面关闭按钮没有关闭,这到底是有什么问题呢。
是不是我写的相机回调有问题。???

该用户从未签到

发表于 2011-8-25 08:28:18 | 显示全部楼层
从您的代码里我看不出什么端倪,也许您应该自己调试一下回调的内容,打印一下每次RESIZE的时机和值是否正确

该用户从未签到

 楼主| 发表于 2011-8-25 08:33:11 | 显示全部楼层
我在ActiveX里好像浏览器大小发生变化都没有调用到RESIZE的内容,在MFC下倒有调用到,我是想问,我那样子根据窗口大小来设置视口和投影矩阵有没有问题呢。。

该用户从未签到

 楼主| 发表于 2011-8-25 08:46:10 | 显示全部楼层
它的回调时机是不是跟它放在的位置有关系呢。。。(就是摄像机添加事件回调的时机)。。

该用户从未签到

 楼主| 发表于 2011-8-25 09:10:42 | 显示全部楼层
我在camera下添加了一个窗口大小调整的事件回调和一个单击事件回调,但是我在MFC下,调整了窗口,都没有调用到这两个事件回调。。。这是怎么回事。。

该用户从未签到

发表于 2011-8-29 08:23:07 | 显示全部楼层
看不出什么问题,正射投影可以这么设置

该用户从未签到

 楼主| 发表于 2011-8-29 10:25:45 | 显示全部楼层
其实我知道了,原来是我一开始把相机隐藏了,所以一开始调用不到。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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