OpenGL三维变换与三维投影实例(行星绕日旋转)

这篇博客记录了作者使用OpenGL创建三维图形,模拟行星绕日旋转的计算机图形学学习过程。通过VS环境,作者展示了如何绘制旋转的球体,并提供了相关代码示例,最后鼓励读者在评论区交流学习心得。
摘要由CSDN通过智能技术生成

这是一片学习计算机图形学的笔记,有关于三维图形的绘制。作者是一小白,感觉自己做的代码有点意思,特地拿出来和大家分享,如有不足,望不吝赐教。

我所用的是微软的vs绘制三维旋转球体,类似太阳系行星的绕日旋转。废话不多说,先看成片:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

以地月行星旋转为例,给出以下代码:

loat fMoonRot = 0.0f;     // 月亮的旋转角度
float fEarthRot = 0.0f;    // 地球的旋转角度 

//绘制地球,所有运行参数以地球为标准  
glPushMatrix();                  //保存当前的模型视图矩阵
glColor3d(0, 0, 1);                          //蓝色
glRotatef(fEarthRot, 0.0f, 1.0f, 0.0f); //fEarthRot 角度,原点到(x,y,z)指定的方向矢量  
glTranslatef(120.0f, 0.0f, 0.0f);       //设地球周期365,参数 (x,y,z)指定的平移矢量
glutSolidSphere(10.0f, 20.0f, 20.0f);       //绘制地球并设地球半径10  

//根据基于地球的坐标进行旋转,并绘制月球      
glColor3ub(200, 200, 200);
glRotatef(fMoonRot, 0.0f, 1.0f, 0.0f);
glTranslatef(5.0f, 0.0f, 0.0f);          // 不断平移

fMoonRot += 13.3f; //月球的公转周期 27.3 天  365/27.3==13.3  (也可以根据自己需求修改)  
    if (fMoonRot >= 365.0f)                 // 月球半径是地球的3/11   即1.363     
        fMoonRot = 0.0f;
    glutSolidSphere(5.0f, 200.0f, 200.0f);  //绘制月球并设地球半径5
glPopMatrix();                         //出栈后值变化,要在下一次循环中才有效  
                                      //恢复模型视图矩阵 
    fEarthRot += 5.0f;             //地球自转
    if (fEarthRot >= 365.0f)
        fEarthRot = 0.0f;

每个行星都用这样的函数进行。

最后设置定时器回调函数:

void TimerFunc(int value)
{
   
    glutPostRedisplay();
    glutTimerFunc(100, TimerFunc, 1);  //100毫秒后调用定时器回调函数
}

以下是我做的代码:

#include <windows.h>      
#include <gl/glut.h>      
#include <math.h>     
#define GL_PI 3.1415f         

float fMoonRot = 0.0f;     // 月亮的旋转角度
float fEarthRot = 0.0f;    // 地球的旋转角度 
float fMarsRot = 0.0f;     // 星火的旋转角度
float fMarsatellite1 = 
  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值