查看: 1144|回复: 5

OSG_MFC_黑屏

[复制链接]

该用户从未签到

发表于 2017-12-15 11:16:29 | 显示全部楼层 |阅读模式
1.png 2.png

用VS2010添加一个基于对话框的窗口
然后把OSG的初始化做到确定按钮

OSG绘图后, 全是黑的。

是什么问题呢?

该用户从未签到

 楼主| 发表于 2017-12-15 11:17:13 | 显示全部楼层

  1.         HWND hWnd= GetSafeHwnd();
  2.         mOSG = new cOSG(GetSafeHwnd());
  3.         mOSG->InitOSG("cow.osg");
  4.         mThreadHandle = (HANDLE)_beginthread(&cOSG::Render,0,mOSG);
  5.         return ;
  6.         osgViewer::Viewer * viewer = new osgViewer::Viewer;
  7.        
  8.         RECT rect;
  9.         osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;
  10.         osg::ref_ptr<osg::Referenced> windata = new osgViewer::GraphicsWindowWin32::WindowData(hWnd);


  11.         // Setup the traits parameters
  12.         traits->x = 0;
  13.         traits->y = 0;
  14.         traits->width = rect.right - rect.left;
  15.         traits->height = rect.bottom - rect.top;
  16.         traits->windowDecoration = false;
  17.         traits->doubleBuffer = true;
  18.         traits->sharedContext = 0;
  19.         traits->setInheritedWindowPixelFormat = true;
  20.         traits->inheritedWindowData = windata;
  21.         osg::GraphicsContext* gc = osg::GraphicsContext::createGraphicsContext(traits.get());
  22.        
  23.         osg::ref_ptr<osg::Camera> camera = viewer->getCamera();
  24.         camera->setViewport(new osg::Viewport(traits->x, traits->y, traits->width, traits->height));
  25.         camera->setClearMask(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
  26.         camera->setClearColor(osg::Vec4f(0.2f, 0.2f, 0.4f, 1.0f));
  27.         camera->setProjectionMatrixAsPerspective(
  28.                 30.0f, static_cast<double>(traits->width)/static_cast<double>(traits->height), 1.0, 1000.0);
  29.         camera->setGraphicsContext(gc);
  30.         osg::ref_ptr<osgGA::TrackballManipulator> trackball = new osgGA::TrackballManipulator();
  31.         viewer->setCameraManipulator(trackball);
  32.         viewer->setCamera(camera);
  33.         viewer->setSceneData(osgDB::readNodeFile("cow.osg"));
  34.         viewer->realize();
  35.         //viewer->run();
  36.         viewer->frame();
  37.         viewer->frame();
  38.         viewer->frame();
  39.         viewer->frame();
复制代码

该用户从未签到

 楼主| 发表于 2017-12-15 11:18:58 | 显示全部楼层
用Fraps能检测出有60帧

是不是这种窗口不适用于绘图?
用官方的类, MFC_OSG.cpp也是全黑

该用户从未签到

发表于 2017-12-15 14:33:43 | 显示全部楼层
!osgviewerMFC.exe例子能运行么?打开一个模型试试!能行的话就是 你程序的问题!

该用户从未签到

 楼主| 发表于 2017-12-15 16:01:11 | 显示全部楼层
田文东_r3XoX 发表于 2017-12-15 14:33
!osgviewerMFC.exe例子能运行么?打开一个模型试试!能行的话就是 你程序的问题!

能运行, 但我想知道类似的程序是怎么运行的, 有问题, 怎么找出问题?

全抄下来是不行的, 因为OSG例子并不能直接用于实际应用, 想知道的是, 核心方面, 哪里有问题。

该用户从未签到

发表于 2018-1-8 16:20:08 | 显示全部楼层
解决了,
是因为Camera的坐标偏了, 画在了视口之外
这可能是OSG的BUG

这两句:
        traits->x = 0;
        traits->y = 0;
写到这一句的下面:
osg::GraphicsContext* gc = osg::GraphicsContext::createGraphicsContext(traits.get());
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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