VC++下,使用OpenGL实现星系运行的模拟

本文介绍了如何使用OpenGL在VC++环境下编程模拟太阳系的运行,包括太阳的自转、地球的公转和自转、地球的卫星绕地公转。详细阐述了平移、旋转和缩放变换的原理,并提供了初始化、绘制、键盘响应等关键函数的代码示例。
摘要由CSDN通过智能技术生成

编程实现:太阳的顺时针自转,地球绕太阳公转,地球自转,给地球加上卫星,卫星绕着地球公转。


(1)相关算法及原理描述:

1. 平移变换

平移变换函数如下:

void glTranslated(GLdouble x,GLdouble y,GLdouble z);

void glTranslatef(GLfloat x,GLfloat y,GLfloat z);

       三个参数就是目标分别沿三个轴的正向平移的偏移量。这个函数表示用这三个偏移量生成的矩阵乘以当前矩阵。当参数是(0.0,0.0,0.0)时,生成的矩阵是单位矩阵,此时对物体没有影响。

2. 旋转变换

旋转变换函数如下:

void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z );

void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z);

   函数中第一个参数是表示目标沿从原点到指定点(x,y,z)的方向矢量逆时针旋转的角度,后三个参数则是指定旋转方向矢量的坐标。这个函数表示用这四个参数生成的矩阵完成乘法。当角度参数是0.0时,表示对物体没有影响。

3. 缩放变换

缩放变换函数如下:

void glScaled(GLdouble x,GLdouble y,GLdouble z);

void glScalef(GLfloat x,GLfloat y,GLfloat z);

           三个参数值就是目标分别沿三个轴向缩放的比例因子。这个函数用这三个比例因子生成的矩阵完成乘法。这个函数能完成沿相应的轴对目标进行拉伸、压缩和反射三项功能。当参数是(1.0,1.0,1.0)时,对物体没有影响。当其中某个参数为负值时,表示将对目标进行相应轴的反射变换,且这个参数不为1.0,则还要进行相应轴的缩放变换。最好不要令三个参数值都为零,这将导致目标沿三轴都缩为零。

 

通过上述的高级矩阵函数,可以很方便地实现变换,但是这里存在一个问题:在调用函数时,修改的是当前的模型视图矩阵。新的矩阵随后将成为当前的模型视图矩阵并影响此后绘制的图形。这样模型视图矩阵函数在调用时,就会有造成效果的积累,请看下面一段代码:

                 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值