OpenGL 简易太阳系模拟 总结

        出于某种本人自己也不清楚的原因,我对C++有一种莫名的亲切感,总是有想要使用C++完成编程任务的冲动, 不过我实在是不喜欢总是在控制台的黑框里面输入输出, 而MFC我暂时又搞不清楚运行机制,一上来就是一大串已经完成的文件,看着晕, OpenGL就比较符合需要了, 而且还有一个glut可以帮助在控制台下实现简易窗体, 作为简单使用来讲完全够用了,复杂使用就以后再说吧。

        本人完全是初学,参照着《OpenGL入门教程》这份文件以及网络上的一些参考算是凑活着完成了这个简易太阳系模型。(这里要感谢这份教程的制作者以及分享者了,我感觉写的相当好,网上有下载,我是从百度文库弄来的,自己也传了一份到资源)为啥是太阳系模型呢?因为我挺喜欢这个的,而且很多人都做了这个,实在搞不懂了,还是有一份代码可以学习的。闲话不多说了,先上一张效果图:

然后直接开始做,任何项目的起步应该是需求分析,这个需求很简单,就是在屏幕上显示一个看着像太阳系的模型,看着像就行了,真要搞一个精确的太阳系模型费时费力又没人给钱,也不适合我这类初学者。然后是设计阶段,作为面向对象编程,先找对象,太阳系中的八大行星以及太阳本身,为了看起来更漂亮点,轨道也要绘制出来,所以对象有两个,所有对象都要实现一个draw方法,用于绘制自身,设计一个myObj父类可以方便的完成绘制工作,我认为既然每一个轨道都归于某一个星体,那么轨道可以作为星体的私有属性,这应该算是一个依赖关系吧。类图如下:


        星体Aster的基本信息包括星体半径radius,公转周期revolution_solar,自转周期revolution_self,轨道orbit,以及公转半径distance。轨道Orbit只有一个半径属性。还有一些在具体实现中定义的辅助属性,就不列在类图里了。

        有了类图,就可以进入编码阶段,首先需要配置开发环境,我是用的是vs2010,开发使用的是OpenGL,下载地址百度谷歌都行,我不记得当初的下载地址了,传了一份到资源里面。教程里面说要集成开发库到vs里面,不过我不太喜欢这样,不经常使用的话没必要改变整个开发环境,只要设置单个项目就好了,.dll文件保存到生成的运行文件处,.h文件保存到项目文件夹下,.lib文件在代码中加载的时候应该可以使用相对路径,不过我暂时不清楚基路径在哪里,所以选择了设置项目的属性,具体做法是:

在solution explorer里面右击项目名称,选择properties->Linker->General, 在Additional LibraryDirectories里面加入lib文件保存的绝对路径就可以了。加载lib文件使用的是#pragma comment(lib,文件名称)。

        在教程里面有很多例子,而且各知识点写的也很清楚,就不赘述了。里面我遇到的一点问题是在第五课实现日地月系统时,如果使用教程里面给的参数,在窗口中是什么也看不到的,但是如果我将参数统一缩小到十倍,就可以正常显示了,虽然我搜了一些坐标变换的文章,但是目前还是不知道为什么会出现这个问题,按理来说如果等比例缩放不应该出现不同结果吧?难道OpenGL不接受过大的参数?

        稍微说一下关于gluLookAt函数的问题,可能是我个人的问题吧,在理解这个函数的时候稍微有点费力,这个函数有九个参数,分为三组,第一组是关于视点的移动,视点最初都是在(0,0,0)点的,如果进行了透视投影变换之后不进行坐标移动,那么绘制的图像就会出现在视点所在的位置,类似于有人把东西放在自己眼前,后面的东西就都看不到了,当然可以通过先移动坐标,然后绘制物体的方案来解决,但是gluLookAt的优势在于开发者不必去计算每一个物体的位置,单纯通过这个函数就可以实现任意角度的观察。 如果只是在xyz轴构成的平面上绘制的话当然无所谓了,但是比如想要以45或者75度角观察整个系统呢?每一个物体的位置就不好计算了吧。我理解的这个函数的运行方式是,开发者先将整个系统绘制在坐标系中,然后再通过这个函数实现观察角度的变化,由OpenGL自动计算各物体的相对位置。这个函数必须置于其他坐标变化之前,我感觉它的执行顺序却是在整个系统绘制的最后。以上属于不负责任的猜想,没有任何理论支持,特此声明。。。。。

额,说得有点远了,第二组参数是视点观察的中心点的坐标,透视投影本身的视觉范围是一个四棱锥,视点与中心点的连线就相当于从顶点到底面的垂线。

第三组参数表示正方向,就是说观察者是怎么看的,教程上说从(0,0,0)点到此点的连线确定正方向,比如如果设置为(0,1,0),就类似于人正常的观看屏幕,(0,-1,0)就表示人在倒立着看屏幕,(0,0,-1)表示低头看键盘,(0,0,1)表示从显示器后面低头看键盘。。。。。。

灯光方面与材质方面设置还有些问题,以后再说吧,整个项目已经上传到资源,有需要的话请下载。

        说一点vs方面的事情,第一次建立项目时误选了windows application, 可以在properties->Linker->system->subsystem里面改成console。

        修改console程序的图标可以选择add resource->icon,只能使用.ico文件,如果之前已有icon的话,系统会使用ID值较小的作为图标,可以打开resource.h,然后将自己的图标ID值设为最小即可,打开resource.h的方法是:先打开.rc文件(选择view code),然后在include<resource.h>处选择open document即可

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值