查看: 7236|回复: 40

如何实现OSG+MFC 控制

[复制链接]

该用户从未签到

发表于 2010-3-23 19:30:25 | 显示全部楼层 |阅读模式
我看了Freesouth的《StepIntoOpenScenceGraph》中的OSG+MFC这个例子,但是它其中的代码用的OSG版本比较老了,我的运行不了。我装的是OSG-2.8.2的,我试着改也几条代码,但是还是没成功。哪位能教教我吗?万分感谢```

该用户从未签到

发表于 2010-3-24 08:21:09 | 显示全部楼层
参考自带的osgviewerMFC例子就足够了

该用户从未签到

 楼主| 发表于 2010-3-24 14:33:19 | 显示全部楼层
2# array
谢谢回答。书上的例子代码版本都是较老的了,我现在的运行不了。如:m_pViewer->setUpViewer(osgProducer::Viewer::STANDARD_SETTINGS & ~osgProducer::Viewer::ESCAPE_SETS_DONE);m_pViewer->getCamera(0)->getRenderSurface()->fullScreen(false);m_pViewer->getCamera(0)->getRenderSurface()->setWindow((const Producer::Window)hwnd);
我改了一下,用了这个函数viewer->run();但是打开图像时是在DOS系统下打开的,请问怎么样使图像打开在MFC的视图中?

该用户从未签到

发表于 2010-3-24 14:54:14 | 显示全部楼层
难道您不看我的回复?OSG源代码中自带的osgviewerMFC例子就足够了,不需要再参考别的什么

该用户从未签到

 楼主| 发表于 2010-3-24 15:12:17 | 显示全部楼层
4# array
不好意思版主,我是开始没看懂您的回答的意思,不知源代码在哪。是不是source\examples\osgviewerMFC这里面的的文件?里面全是单个的文件,我要怎么样把里面的这些文件形成一个解决方案运行起来?我是机械专业的,开始接触VC不久,万分感谢您的回答!!!

该用户从未签到

发表于 2010-3-24 15:24:09 | 显示全部楼层
下载2.8或以上版本的OSG源代码,在examples/osgviewerMFC中,您可以用CMake来自动生成各个工程的解决方案文件,或者直接新建一个MFC工程并将文件添加到其中——这一切的前提是您要尽快学习和补充开发的基本知识

该用户从未签到

 楼主| 发表于 2010-3-24 16:01:16 | 显示全部楼层
6# array
运行出来了``万分感谢```

该用户从未签到

 楼主| 发表于 2010-3-24 18:02:48 | 显示全部楼层
6# array
您好,下午我把这些文件添加到一个工程中运行出来了。现在我用CMake2.4去生成一个解决案,但出现这样的错误:CMake Error : Error in cmake code at
D:/Program Files/OSG-2.8.2/source/examples/osgviewerMFC/CMakeLists.txt:8:Unknown CMake command"SETUP_EXAMPLE".  请问一下这是什么原因?

该用户从未签到

发表于 2010-3-25 08:19:07 | 显示全部楼层
您必须使用源代码根目录的CMakeLists.txt,各个工程和例子程序并不能被单独编译

该用户从未签到

 楼主| 发表于 2010-3-25 11:09:22 | 显示全部楼层
9# array
我编译了整个source文件夹,出来的项目太多了,找不到osgViewerMFC这个项目。并且用VC去运行要好久,我还是放弃这种方法算了。呵呵``再次感谢回答!!!

该用户从未签到

发表于 2010-3-25 12:23:34 | 显示全部楼层
出来的项目太多了,找不到osgViewerMFC这个项目

我反对您的说法。OSG的项目排布是非常清晰的,并且学会自己编译源代码正是学习OSG的必经之路~~

该用户从未签到

 楼主| 发表于 2010-3-25 12:52:28 | 显示全部楼层
11# array
您好,我现在重新编译,找到了ovsViewerMFC这个项目了,我现在只编译这一个项目,是这样的吗。我可以加您的QQ吗``呵呵``我觉得过了这个了解工具一些基本的过程,以后学起来可能就会快了``

该用户从未签到

发表于 2010-3-25 14:24:22 | 显示全部楼层
当您选择编译某一个项目时,它依赖的所有其他项目都会先执行编译生成

该用户从未签到

 楼主| 发表于 2010-3-25 19:47:28 | 显示全部楼层
本帖最后由 ly0914 于 2010-3-25 19:50 编辑

13# array
版主您好,我自己编译OSG,用的是VS2005。文件的输出路径是E:\OSG,编译完后这个文件夹产生了如图所示的文件。lib里面有许多的库文件,而include里面却没有什么。我编译的是ALL_BUILD Debug Release版本,编译出来的结果是这样的吗,我觉得不对,如果是这样的话我接下来该怎样设置环境变量,我已经编译了不下4次了,每次都编译了四个多小时。我的QQ是33649660,希望您能帮我指点一下,谢谢```
image002.jpg

该用户从未签到

发表于 2010-3-26 08:18:01 | 显示全部楼层
我没有看到任何的东西,您可以在编译ALL_BUILD之后,执行INSTALL工程,这样所有的库文件和头文件都会被拷贝到您之前设定的安装目录CMAKE_INSTALL_PREFIX中

抱歉我不在QQ上私聊,因为这样对更多的朋友没有帮助,并且会大量占用您和我的时间

该用户从未签到

 楼主| 发表于 2010-3-26 22:44:05 | 显示全部楼层
15# array
您好,我编译完了。但运行程序是出现如下的错误:test.obj : error LNK2001: 无法解析的外部符号 "public: virtual class osg::BoundingSphere __thiscall osg::Geode::computeBound(void)const " ([email=?computeBound@Geode@osg@@UBE?AVBoundingSphere@2@XZ]?computeBound@Geode@osg@@UBE?AVBoundingSphere@2@XZ[/email])
test.obj : error LNK2001: 无法解析的外部符号 "public: virtual class osg::BoundingBox __thiscall osgText::TextBase::computeBound(void)const " ([email=?computeBound@TextBase@osgText@@UBE?AVBoundingBox@osg@@XZ]?computeBound@TextBase@osgText@@UBE?AVBoundingBox@osg@@XZ[/email])

该用户从未签到

发表于 2010-3-28 21:09:21 | 显示全部楼层
检查您工程的依赖库设置,是否有osg.lib,osgText.lib等库

该用户从未签到

 楼主| 发表于 2010-3-29 11:04:36 | 显示全部楼层
17# array 我再重新编译一次,在CMake中,这二次出现的这样wxWdigets_LIB_DIR、PNG_LIBRARY_DEBUG、 wxWdigets_ROOT_DIR、FOX_INCLUDE_DIR、FOX_LIBRARY等一些选项是否需要设置?

该用户从未签到

发表于 2010-3-29 12:16:55 | 显示全部楼层
根据您自己的需求而定,可以都设置也可以都不设置。这些选项具体的意义可以参看教程区精华的《Win32编译OSG》帖子,也可以参看我的书《OSG渲染引擎设计与实践》

该用户从未签到

 楼主| 发表于 2010-3-29 23:58:31 | 显示全部楼层
19# array 您好,花了8个时,终于编译出来了,编译出来的文件我放在D:\Program Files\OSG-2.8.2中。但还是不行,我的环境变量是这样设置的:
OSG_ROOT :\Program Files\OSG-2.8.2; Path添加了%OSG_ROOT%\bin;%OSG_ROOT%\share\OpenSceneGraph\bin;OSG_FILE_PATH:\Program Files\OSG-2.8.2\Data。进入控制台界面输入osgviewer cow.osg,提示说osgviewer不是内部或外部命令,也不是可运行的程序或批处理文件。进入D:\Program Files\OSG-2.8.2\share\OpenSceneGraph\bin点击里面的exe文件可以正常运行,请问这是怎么回事,我有哪里弄错了?

该用户从未签到

发表于 2010-3-30 08:36:50 | 显示全部楼层
这只能说明您的环境变量设置并不像您所描述的那样,而是在某些地方设置错了~~您也需要在设置完成后关闭和重新启动控制台

该用户从未签到

 楼主| 发表于 2010-3-30 09:39:48 | 显示全部楼层
21# array 您好,我再把我那个用Cmake生成的项目文夹里的bin(E:\osg2.8.2\bin)加到Path后面(按照书上没说要加入这个目录),再进入控制台输入osgviewer cow.osg,些时担示说没有找到osg55-osgUtil.dlll,这是怎么回事,是不是还是没编译成功?我快要崩溃了````

该用户从未签到

发表于 2010-3-30 09:46:36 | 显示全部楼层
找到bin文件,看看他说的那个文件到底有没有,系统说没有,估计真没有。要不就是找不到。

该用户从未签到

 楼主| 发表于 2010-3-30 09:58:30 | 显示全部楼层
23# allen
我搜索了,确实没有。应该怎么办,难道要再次重新编译吗``

该用户从未签到

发表于 2010-3-30 10:14:31 | 显示全部楼层
重新编译大可不必了,除非您已经在编译完成后立即将所有的中间文件删除了。我只想知道:D:\Program Files\OSG-2.8.2中的文件是如何生成的?是执行INSTALL工程得到的吗?还是您根本就没有执行过这个子工程

该用户从未签到

 楼主| 发表于 2010-3-30 10:20:29 | 显示全部楼层
25# array 对,是的。是执行INSTALL这个工程得到的。我在编译时,osgUtil、osgText、Plugins shp、Wrapper osg、Examples osgwidgetmessagebox发生了错误,没有成功。编译完后,我又再单独编译了一下这几个工程,然后编译了INSTALL工程。

该用户从未签到

发表于 2010-3-30 12:13:01 | 显示全部楼层
既然没有成功,那么给出您的错误信息是什么,并且必须解决这些编译错误。不然INSTALL无效

该用户从未签到

 楼主| 发表于 2010-3-30 13:58:34 | 显示全部楼层
27# array 错误信息都是这样的mt.exe : general error c101008d: Failed to write the updated manifest to the resource of file "..\..\bin\osgplugins-2.8.2\osgwrapper_osg.dll". R]?n
mt.exe : general error c101008d: Failed to write the updated manifest to the resource of file "..\..\bin\osgwidgetmessagebox.exe". R]?n 我单独重新编译一下这几个可以吗``

该用户从未签到

发表于 2010-3-30 14:20:51 | 显示全部楼层
应该可以,我记得以前有错误的时候,我在编译一遍,就只把没编译成功的编译。其他的好像没动。你试试,注意配置正确,不然还是白费事。
28# ly0914

该用户从未签到

发表于 2010-3-30 15:02:59 | 显示全部楼层
初学者建议不要打开BUILD_OSG_WRAPPERS这个选项,会把编译时间倍增不说,基本上开发也用不到它。目前OSG官方也正在讨论是否要把osgIntrospection这个库从核心剔除。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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