查看: 28728|回复: 36

OSG+OSGearth学习总结,一个新人的血泪

[复制链接]

该用户从未签到

发表于 2015-4-11 17:14:16 | 显示全部楼层 |阅读模式

说起来还是非常伤心的,自认为还算认真的学习OSG和OSGearth三个月,虽然是从零开始,但是想起来,学到的东西还真是少,甚至连一些皮毛都没有学到。虽然学到的东西不多,但是我觉得有必要把我学习的历程记录下来,一方面,算是自我纪念,毕竟自己学习了三个月,还是有一些东西的,第二个方面,希望后来的学习者,能够少走一些弯路,最后一方面,也希望能有高人,给我指点一下。4500RMB的教程买不起,也不知道是什么样子,只能自己慢慢的摸索了。以下是我学习的历程。
一、        什么是OSG、OSGearth?
一进入OSG、OSGearth学习的领域,我就想知道这到底是什么。然后就去各种百科,查到了对OSG和OSGearth的介绍,知道了一些历史故事。说实在的,这些故事,对于学习掌握OSG的开发没有什么用处。我更想知道OSG、OSGearth宏观架构方面的知识。
如果当时,我看到OSG的解释是这样的:“OSG是开源场景图形,这种图形是由各种节点组成的,不同的节点对应不同的物体。常用的节点有三种:根节点、组节点、叶节点。通常为了方便图形的保存,有一种osg格式的文件。Osg文件存储各种模型,可以方便的进行加载。”我想我在学习《OpenSceneGraph快速入门指导》时,会轻松很多吧。当看到各种节点解释的时候,不会不知道书中到底在说什么了。
同样,我对OSGearth也有自己粗浅的看法:
OSGearth就是在OSG的基础上,进行了二次开发。OSGearth中非常明显的多了一个MapNode节点,OSGearth图像中多了坐标信息,整体的架构和OSG一致,但是有多地方进行了包装,方便进行一些地理计算、操作。Earth文件是保持地理图像的文件,OSGearth一般对earth文件进行操作。
我这些看法都是非常粗浅,并且不一定准确。我也是根据自己这段时间的学习,对OSG和OSGearth粗浅认识的描述。那有没有更为精确、宏观的描述呢,或许有吧,但是我没有找到。我觉得如果我在学习之前,脑海中就有这种宏观的概念,是非常必要的,所以,尽管我不懂,但是我还要进行总结。
二、        OSG、OSGearth的源码编译、开始的界面
OSG、OSGearth的宏观概念有了之后,就要开始进行细节开发了。最起码先要让自己的代码能够像osgviewer那样加载cow.osg吧,或者显示一个完整的能转的地球出来吧。
按照《OSG程序设计》的指导,很容易就能写出一个展示cow.osg的程序出来,并且还有细致的分析。说到这里我插一句,《OSG程序设计》这本书写的有点虎头蛇尾,前面写的很细,看的很爽,给我一种,作者真牛逼的感觉,看到后面,写的越来越粗糙了。当然,作者已经做的很好了,但是不免还是会令人有些遗憾!
OSGearth也是,如果动态库、静态库文件完整的话,osgviewer就可以直接查看earth文件。这里又要插一句,怎么就没有像《OSG程序设计》这样的一本书来介绍OSGearth的开发呢!
通过写了一些简单的程序,可以发现,这些程序简单的背后,是由库文件支撑的。最开始,我想亲自根据源代码,生成这些库文件,并且按照网上的一些教程,加上自己的不断摸索,用了15天的时间,成功的生成了osgearth和osg的库文件,并且也可以正常使用了,后来才发现,我生成的版本不支持中文,对于PNG格式的图片支持的也不好。解决这个问题,花了我老长的时间,关键是到最后,我放弃了。OSG的中文支持解决了,但是OSGearth怎么也生成不了,后来就没再去解决了。网上找了其他网友生成的库用,功能挺完善的,不足就是,和最新的代码不匹配,毕竟不是最新的版本。这个不足在一定程度上影响了代码的编写。我没有解决这个问题,主要是,我觉得这个问题不是主要问题,可以先放一放,可以先用他人的库文件代替。
我还是挺希望自己能够成功生成自己的库文件的。虽然我没有生成完善的版本,但是在这个过程中,对源代码的理解,加深了很多,同时也多了解了几种开源程序的编译方法,程序架构也知道了更多,其中经历了很多莫名其妙的问题,解决之后,虽然不知道解决的原因,凭着一种感觉正确的解决了问题,还是很爽的。如果自己能够娴熟的编译源代码的话,那么修改源代码也就更容易了,这样就能更容易的打造专用的OSGearth和OSG程序了。当然,这个境界是很牛逼、很神、很向往的境界。
从现实来说,直接用他人生成的库,还是方便很多,更容易上手。
三、        OSG、OSGearth中概念的学习、理解
经过前面两节的学习,我对OSG、OSGearth的一些程序开发有了初步的认识。但是随着我对教程的学习,发现其中有很多的概念,不知道什么意思,如“投影”“法线”“纹理”“高程数据”“渲染”“瓦片”……
        现在吧,我依然不是很理解这些名词,但是我在理解这些名词时,做了很多的努力,我就说说我是怎么学习理解这些名词的。第一反应是百度或者谷歌搜索,但是发现搜到的内容根本不是自己要找的,当时就头大了,在论坛中也没有找到专门的名词介绍的资料。我对这些有了直观的认识,主要是通过学习OpenGL(后面有学习资料链接)后,有了自己的认识。如果没有OpenGL的一些基础知识的话,我觉得我很难理解这些概念,而如果不理解这些概念,看OSG入门教程中的一些例子,根本看不明白,很浪费时间。
        我学习OSGearth的过程,大体上是这样。首先看了一遍《OpenSceneGraph快速入门指导》,然后看了一遍《OSG程序设计》。看完两本书后,对OSG有了直观的认识,并且可以运行一些小程序。后来又学习了OpenGL教程的前10章,对于其中的概念名词,有了理解,然后又看了一遍《OpenSceneGraph快速入门指导》和《OSG程序设计》。此时感觉自己对于教程中的内容有了更多的理解,很多代码都能看明白了。感觉OSG算是入门了,尤其当我搞明白其中的模型旋转、位置计算的方法时,真的感觉我可以看懂其中的一些demo了。
        OSGearth学习时,也是看了一遍《OSGearth文档》,发现里面全是介绍earth文件格式的,对于开发用处很少。OSGearth主页上,有少量的开发代码,能起的作用不大。我对OSGearth的学习,主要靠demo程序,自己一点点的猜测,理解,很是慢,并且学习的不系统,收获很少,花了很长时间也就只看懂了2个demo程序
四、        我的收获及疑惑
经过了前面的几个学习阶段,我发现我自己对OSG、OSGearth掌握的依然很少。我不知道问题出在哪里。难道我学习的方向错了?我开始了对自己的质疑,希望能够找到学习的正确方法。
教程没有,入门的教程也都看完了,但是发现,仍然不能完成一个简单的任务——在地球上显示一张可以拖拽并调整方向的图片。
虽然我知道一些节点,但是我不知道哪个节点可以加载图片,操作图片;虽然我知道如何用鼠标进行简单的拖拽,但是我还不知道如何进行光标和经纬度的转换。在这一刻,我感觉前面学习的基础知识甚是零散,不成体系,无法对于实际应用产生帮助。
偶然间,发现一个demo程序osgearth_annotation,可以满足一部分的需求,然后就进入demo程序的学习。有的demo程序比如osgearth_annotation就很好学,很好懂,有的demo程序相对就很难,并且demo程序很多,功能也不是很清楚,demo学习的也很慢。在对demo学习的过程中,学习的知识,自己还不能够组合到体系中去,导致消化的特别慢,看了一些demo后,效率也很低,感觉没有学到什么东西。
为了理解demo中的一些类,还跟踪进入了源代码。进入源代码后,发现自己更加渺小了。代码放在那里,就是那么写的,愣是看不明白,看的头大,不知道为什么要那么写,目的是什么,和那些地方有什么关系。
从demo进行学习,感觉也不容易。从教程进行学习,感觉好的教程不好找,碰到问题只能自己一点点的去搜索,这样又非常容易把思路引到其他地方去。真是不知道如何学习才好。有时候想想,如果4500的教程不错,买一个仿佛也值得,但是自己是打工的,还花钱,有些舍不得。
我的收获虽然也有很多,毕竟学到了很多零散的知识,那些入门教程中的东西也都知道了,三维图形开发,有了一些理解,一些编程思想方面,从源码中也学到了一些,但是觉得还是不太满意。
我的疑惑更多,为什么我花了三个月,学的还是这个样子,不花钱的话,应该怎么学?
五、        学习资料
OpenGL教程中文版
http://www.yakergong.net/nehe/
《OpenSceneGraph快速入门指导》
http://bbs.osgchina.org/forum.ph ... &extra=page%3D1
《OSG程序设计》
http://bbs.osgchina.org/forum.ph ... &extra=page%3D1
Osg官网说明
http://www.osgchina.org/
《OSGearth用户手册》
http://bbs.osgchina.org/forum.ph ... &extra=page%3D1
http://files.cnblogs.com/eaglezh ... %89%8B%E5%86%8C.pdf
OSGearth官网说明
http://docs.osgearth.org/en/latest/
OSG 源码demo介绍
http://blog.csdn.net/yungis
http://www.cnblogs.com/indif/archive/2011/05/13/2045136.html
OSG 文档
http://bbs.osgchina.org/forum.ph ... =osg%2B%CE%C4%B5%B5
OSGearth文档
http://bbs.osgchina.org/forum.ph ... =osg%2B%CE%C4%B5%B5
OSG、OSGearth 源码编译参考(我根据以下的方法编译出来一个不完全版,不支持中文,后来添加中文支持后,OSGearth)
http://www.cnblogs.com/eaglezhao ... 7/12/eaglezhao.html
http://www.cnblogs.com/eaglezhao/archive/2011/09/26/2192389.html
http://www.cnblogs.com/sunliming/archive/2011/10/24/2222556.html

该用户从未签到

发表于 2015-6-1 15:14:25 | 显示全部楼层
我也觉得,论坛里的教程都不是很好,学了半个月,屁都不知道

该用户从未签到

 楼主| 发表于 2015-4-13 08:26:34 | 显示全部楼层
为什么,连个仔细看的人都无?

该用户从未签到

发表于 2015-4-14 10:09:51 | 显示全部楼层
看来是个努力的人,加油!给点个人建议:一定要先学好osg,再涉猎基于osg开发的其他库(比如osgEarth,osgOcean)!建议osgEarth/osgOcean可以以后再学,一门心先学osg,必须看一下opengl,不然连基本概念都不懂,一切都是空中楼阁。。。一开始osg就是按照书籍和例子,免费的书和收费的书都很好。花点钱是应该的,osg学习要把所有的例子都看完,并且看懂,有不明白的问题就在论坛问,至于杨哥的那个4500的视频是osgEarth的应该非常好,从那个广告页面的截图就可以看出来,你倒是可以考虑一下,但是如果现在连osg都没有搞定,你还是先放放,一口气吃不了个胖子,之所以出现三个月还是皮毛,就是基础没有打牢,还有一个最重要的就是源代码,开源的精髓就是源代码,书籍就是引导,如果有能力了一定要看一下《最长的一帧》,最起码3遍以上,对osg的内核了解清楚了,也就ok了,加油!

该用户从未签到

发表于 2015-4-13 10:28:01 | 显示全部楼层

OSGEarth源码中的例子就是最好的学习教程,通过通读这些例子,你就可以完全了解OSGEarth的功能及特性

该用户从未签到

发表于 2015-4-13 10:59:02 | 显示全部楼层
加油,每个人都是这么过来的,朋友!

该用户从未签到

 楼主| 发表于 2015-4-13 11:44:45 | 显示全部楼层
是不是,太慢了啊!

该用户从未签到

发表于 2015-4-13 13:38:11 | 显示全部楼层
楼主辛苦啦,我也有同感,osgEarth系统框架方面的东西很难找到相关的资料。以后可以多交流下

该用户从未签到

发表于 2015-4-14 11:04:39 | 显示全部楼层
受教了,看了这个帖子,对OSG有了简单的了解。

该用户从未签到

发表于 2015-4-14 14:45:00 | 显示全部楼层
看看osg书,案例程序,如果觉得不够,可以看源代码,oe和osg的源代码都要看

该用户从未签到

 楼主| 发表于 2015-4-14 16:56:18 | 显示全部楼层
看源代码,感觉还是挺吃力的! 看了一段时间, 效率还是很低!本想直接学习API接口的,看版主这么说,估计绕不过去了!

该用户从未签到

 楼主| 发表于 2015-4-14 16:57:40 | 显示全部楼层
buaahc 发表于 2015-4-14 10:09
看来是个努力的人,加油!给点个人建议:一定要先学好osg,再涉猎基于osg开发的其他库(比如osgEarth,osgO ...

是吗, 好的, 能得到你的指点,非常荣幸!

该用户从未签到

发表于 2015-4-14 17:38:15 | 显示全部楼层
hitcms 发表于 2015-4-14 16:57
是吗, 好的, 能得到你的指点,非常荣幸!

只关心你何时开始不学OSG?

该用户从未签到

 楼主| 发表于 2015-4-14 19:25:16 | 显示全部楼层
初学OSG一个月 发表于 2015-4-14 17:38
只关心你何时开始不学OSG?

OSG的入门指导和OSG程序设计教程 两本书看懂了之后,就没有学习OSG了!

该用户从未签到

发表于 2015-4-14 22:29:14 | 显示全部楼层
hitcms 发表于 2015-4-14 19:25
OSG的入门指导和OSG程序设计教程 两本书看懂了之后,就没有学习OSG了!

可歌可泣。

该用户从未签到

发表于 2015-4-14 22:53:00 | 显示全部楼层
给楼主点赞。建议:多做一些时间的项目,从项目汇总学习;这样才会理解更深一些。

该用户从未签到

发表于 2015-4-15 15:33:55 | 显示全部楼层
加油  朋友!  

该用户从未签到

发表于 2015-4-15 16:27:13 | 显示全部楼层

人家已经不学了。

该用户从未签到

 楼主| 发表于 2015-4-16 15:39:12 | 显示全部楼层

还是要学的!

该用户从未签到

 楼主| 发表于 2015-4-16 15:39:57 | 显示全部楼层
guchengjianke 发表于 2015-4-14 22:53
给楼主点赞。建议:多做一些时间的项目,从项目汇总学习;这样才会理解更深一些。

时间的项目?

该用户从未签到

发表于 2015-4-17 17:40:14 | 显示全部楼层
刚开始学习,共勉共勉

该用户从未签到

发表于 2015-4-18 12:17:42 来自手机 | 显示全部楼层
熟练掌握opengl和c++才能学好osg,学oe还得掌握测绘的相关知识。没有5年艰苦卓绝的训练,做的东西一分不值。

该用户从未签到

发表于 2015-5-5 15:45:18 | 显示全部楼层
支持,加油啊!

该用户从未签到

发表于 2015-6-19 15:47:57 | 显示全部楼层
同为初学者,关注。

该用户从未签到

发表于 2016-1-5 19:48:36 | 显示全部楼层
和楼主的经历一样- - 没接触过三维开发,上来学了一个月osg就开始弄osgEarth的项目,openGL也没入门- - 现在两个多月了,感觉脑子不够用了! 感觉学的好杂,还很乱,目前就只能针对一个功能慢慢找资料来解决,解决不了的就只能暂时放下,弄的好郁闷~真想老天能多给点时间让我把openGL osg全学一遍再来工作!那个时候肯定会感觉不一I样吧 orz

该用户从未签到

发表于 2016-1-8 14:41:44 | 显示全部楼层
感谢分享~!加油~

该用户从未签到

发表于 2016-3-29 15:04:17 | 显示全部楼层
才开始接触OSG和osgEarth,借鉴,很好的分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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