OSG与OSG earth

说起来还是非常伤心的,自认为还算认真的学习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

原文地址:https://www.cnblogs.com/nku-wangfeng/p/7801264.html