查看: 2896|回复: 8

如何将显示关联到WINDOWS窗口

[复制链接]

该用户从未签到

发表于 2009-2-17 10:35:27 | 显示全部楼层 |阅读模式
问个简单的问题,我才开始试用OSG,每次看到例子似乎都是试用OSGVIEWER:VIEWER来表现的,貌似VIEWER会自动生成显示设备,如果我要在自己的窗口或者子窗体中绘制场景呢?如何关联起来?

PS:王锐兄,你们的OSG编程指南,怎么买?我在国外方便邮购不?

该用户从未签到

发表于 2009-2-17 10:42:08 | 显示全部楼层
它你只要在自己的窗口创建图形上下文环境,,,同样使用osgviewer也可以显示的~~~~

该用户从未签到

 楼主| 发表于 2009-2-17 10:57:32 | 显示全部楼层
to FLYSKY:
能给一段示例代码么

该用户从未签到

发表于 2009-2-17 13:25:49 | 显示全部楼层
你在国外应该也是可以邮寄的,,,如果你真的想邮购《OSG编程入门指南》,,我可以向快递公司帮你查一下邮购的费用,,,这个就要另行计费了~~~~~

相关的代码:
  1. void cOSG::InitCameraConfig(void)
  2. {
  3.     // Local Variable to hold window size data
  4.     RECT rect;

  5.     // Create the viewer for this window
  6.     mViewer = new osgViewer::Viewer();

  7.     // Add a Stats Handler to the viewer
  8.     mViewer->addEventHandler(new osgViewer::StatsHandler);
  9.    
  10.     // Get the current window size
  11.     ::GetWindowRect(m_hWnd, &rect);

  12.     // Init the GraphicsContext Traits
  13.     osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;

  14.     // Init the Windata Variable that holds the handle for the Window to display OSG in.
  15.     osg::ref_ptr<osg::Referenced> windata = new osgViewer::GraphicsWindowWin32::WindowData(m_hWnd);

  16.     // Setup the traits parameters
  17.     traits->x = 0;
  18.     traits->y = 0;
  19.     traits->width = rect.right - rect.left;
  20.     traits->height = rect.bottom - rect.top;
  21.     traits->windowDecoration = false;
  22.     traits->doubleBuffer = true;
  23.     traits->sharedContext = 0;
  24.     traits->setInheritedWindowPixelFormat = true;
  25.     traits->inheritedWindowData = windata;

  26.     // Create the Graphics Context
  27.     osg::GraphicsContext* gc = osg::GraphicsContext::createGraphicsContext(traits.get());

  28.     // Init a new Camera (Master for this View)
  29.     osg::ref_ptr<osg::Camera> camera = new osg::Camera;

  30.     // Assign Graphics Context to the Camera
  31.     camera->setGraphicsContext(gc);

  32.     // Set the viewport for the Camera
  33.     camera->setViewport(new osg::Viewport(traits->x, traits->y, traits->width, traits->height));

  34.     // Add the Camera to the Viewer
  35.     mViewer->addSlave(camera.get());

  36.     // Add the Camera Manipulator to the Viewer
  37.     mViewer->setCameraManipulator(keyswitchManipulator.get());

  38.     // Set the Scene Data
  39.     mViewer->setSceneData(mRoot.get());

  40.     // Realize the Viewer
  41.     mViewer->realize();
  42. }
复制代码

该用户从未签到

发表于 2009-2-17 14:32:18 | 显示全部楼层
《OSG编程入门指南》是FlySky一个人独力完成的~~非常辛苦也非常强悍。我很惭愧没有为此书做什么贡献,因此也不负责邮购等事务
有关OSG与其它GUI系统的整合(MFC,Qt,wxWidgets,SDL,FLTK,Fox,GLUT),参看官方的osgviewer*系列例子程序是最好的选择。

该用户从未签到

 楼主| 发表于 2009-2-18 16:01:22 | 显示全部楼层
的确非常之强悍!
我以前是做国土规划的,一直与GIS数据建库和2D的数据规划,空间分析等打交道,目前需要投入到3D的程序开发中,以前接触3D实在不多,有种举步维艰的感觉。
前段时间也用了一些国内开发的3D开发包,还有另外一个开源的OPEN CASCADE,感觉还是OSG好一些,年后才开始学习,手头资料不多,很希望有本书能够指导下下。

TO ARRAY:官方的例子还没有怎么仔细看,SRC很多,有种无从下手的感觉。能否说一下是哪几个例子,不胜感激。
TO FLYSKY:我的位置不是很远,在新加坡,你可以查查U到这边需要多少邮费,我从网上转账你。顺便问一下,如果邮寄到深圳需要多长时间?我不久后有朋友过来新加坡,如果来得及可以让他帮忙带过来。

该用户从未签到

发表于 2009-2-18 16:41:29 | 显示全部楼层
我说的osgviewer*系列例子,也就是osgviewerMFC,osgviewerQt,osgviewerWX,osgviewerGLUT,osgviewerSDL等几个例子。此外还有osgcegui,和CEGUI的结合,但是由于两个软件的开发者存在设计思想上的矛盾,因此这两者的结合方法一直问题多多

OSG与不同的GUI结合的方式各有区别,没有统一之道,这一点目前的确让人头痛,但是很多GUI系统都没有处理好GL设备操作的线程相关性,事件循环的方式也各不相同,因此不得不分别想办法嵌合。

该用户从未签到

发表于 2009-2-18 18:44:06 | 显示全部楼层
可以的,,,去深圳估计就最多五天就可以了~~~~去国外的话,邮寄费用现在还不太清楚,,我还得再查查~~~~~

该用户从未签到

发表于 2009-2-19 20:51:05 | 显示全部楼层
原帖由 pipghost 于 2009-2-18 16:01 发表
的确非常之强悍!
我以前是做国土规划的,一直与GIS数据建库和2D的数据规划,空间分析等打交道,目前需要投入到3D的程序开发中,以前接触3D实在不多,有种举步维艰的感觉。
前段时间也用了一些国内开发的3D开发 ...



邮寄到国外的手续比较复杂,,,需要通过中国邮政才可以~~~估计只能给你邮寄到深圳,,一般三四天就到了,,,如果需要购买,,请跟我联系~~~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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