查看: 1283|回复: 2

StatsHandler事件和自定义事件问题

[复制链接]

该用户从未签到

发表于 2013-10-5 10:50:36 | 显示全部楼层 |阅读模式
本帖最后由 1162810317 于 2013-10-5 20:13 编辑

mfc框架的程序,加了mViewer->addEventHandler(new osgViewer::StatsHandler);但按“s”键后程序就奔溃。键盘控制器和其他的控制器可以正常工作如keyswitchManipulator->addMatrixManipulator( '1', "Trackball", trackball.get());请教大神们可能是什么原因!此外就是一旦把键盘操作器去掉,就没办法显示场景,变成黑的。注释掉mViewer->setCameraManipulator(keyswitchManipulator.get());后场景变黑。
  1.     // 局部变量存放窗口矩形
  2.     RECT rect;

  3.     // 创建一个viewer
  4.     mViewer = new osgViewer::Viewer();

  5.     // 加入一个statshandler
  6.        
  7.     mViewer->addEventHandler(new osgViewer::StatsHandler);
  8.    
  9.     // 得到当前窗口矩形
  10.     ::GetWindowRect(m_hWnd, &rect);

  11.     // 初始化图形描述什么东西,反正就是那么回事
  12.     osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;

  13.     // 初始化窗口变量,为OSG所用
  14.     osg::ref_ptr<osg::Referenced> windata = new osgViewer::GraphicsWindowWin32::WindowData(m_hWnd);

  15.     // 设置一些个参数
  16.     traits->x = 0;
  17.     traits->y = 0;
  18.     traits->width = rect.right - rect.left;
  19.     traits->height = rect.bottom - rect.top;
  20.     traits->windowDecoration = false;
  21.     traits->doubleBuffer = true;
  22.     traits->sharedContext = 0;
  23.     traits->setInheritedWindowPixelFormat = true;
  24.     traits->inheritedWindowData = windata;

  25.     // 创建图形上下文
  26.     osg::GraphicsContext* gc = osg::GraphicsContext::createGraphicsContext(traits.get());

  27.     // 初始化一个相机
  28.     osg::ref_ptr<osg::Camera> camera = new osg::Camera;

  29.     // 绑
  30.     camera->setGraphicsContext(gc);

  31.         camera->setClearColor( osg::Vec4(0.39, 0.39, 0.39, 1.0) );
  32.         GLenum buffer = traits->doubleBuffer ? GL_BACK : GL_FRONT;
  33.         camera->setDrawBuffer(buffer);
  34.         camera->setReadBuffer(buffer);
  35.         camera->setClearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  36.     //相机视口设置
  37.     camera->setViewport(new osg::Viewport(traits->x, traits->y, traits->width, traits->height));

  38.     // 添加相机到VIEWER
  39.     //mViewer->addSlave(camera.get());       
  40.         mViewer->setCamera(camera);
  41.     // 添加操作器到VIEWER  会影响图像,,,,
  42.     mViewer->setCameraManipulator(keyswitchManipulator.get());

  43.     //设置数据
  44.     mViewer->setSceneData(mRoot.get());
  45.         pickHandler = new PickModeHandler() ;
  46.         mViewer->addEventHandler(pickHandler.get());
  47.         //mViewer->addEventHandler(pickHandler);
  48.     // 实现VIEWER
  49.     mViewer->realize();
复制代码
谢谢!

该用户从未签到

 楼主| 发表于 2013-10-5 20:20:22 | 显示全部楼层
有可能是添加的自带的操作器影响了摄像机吗?但如果把操作器注释掉的话就等于没有添加操作器,如果没有添加操作器的话根本就不可能是操作器影响摄像机,所以也说不通啊,我在另一个mfc的程序中测试,把一样的键盘操作器注释掉,那摄像机也能正常显示,只是不能控制而已,,,请教大神们这可能是什么原因!谢谢!

该用户从未签到

发表于 2013-10-9 09:30:37 | 显示全部楼层
您可以在debug模式下查看call stack来判断问题所在,否则只提供这么有限的信息,别人也无法判断什么
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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