模拟太阳、地球和月亮

代码如下:

#include <windows.h>
//#include <GLUT/glut.h>
#include <GL/glut.h>
#include <math.h>
#include <iostream>
using namespace std;

#define GL_PI 3.1415f

void RenderScene()
{
    static float fMoonRot = 0.0f;
    static float fEarthRot = 0.0f;

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();

    glTranslatef(0.0f,0.0f,-300.0f);

    glColor3ub(255,255,0);
    glutSolidSphere(25.0f,25,25);

    glRotatef(fEarthRot,0.0f,1.0f,0.0f);

    glColor3ub(0,0,255);
    glTranslatef(0.0f,0.0f,-105.0f);
    glutSolidSphere(15.0f,15,15);

    glColor3ub(200,200,200);
    glRotatef(fMoonRot,0.0f,1.0f,0.0f);
    glTranslatef(0.0f,0.0f,-30.0f);
    fMoonRot += 15.0f;
    if(fMoonRot > 360.0f)
        fMoonRot = 0.0f;

    glutSolidSphere(6.0f,15,15);

    glPopMatrix();

    fEarthRot += 5.0f;
    if(fEarthRot > 360.0f)
        fEarthRot = 0.0f;

    glutSwapBuffers();
}

void ChangeSize(GLsizei w,GLsizei h)
{
    if(h==0)
        h = 1;

    GLfloat aspectRatio = (GLfloat)w/(GLfloat)h;

    glViewport(0,0,w,h);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    gluPerspective(45.0f,aspectRatio,1.0,425.0);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

}

void SetupRC()
{
    glClearColor(0.0f,0.0f,0.0f,1.0f);
    glColor3f(0.0f,1.0f,0.0f);
    glEnable(GL_DEPTH_TEST);
}
void TimerFunction(int value)
{
    glutPostRedisplay();
    glutTimerFunc(33,TimerFunction,1);
}

int main(int argc, char *argv[])
{
   glutInit(&argc,argv);
   glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
   glutInitWindowSize(800,600);
   glutCreateWindow("Simple");

   glutDisplayFunc(RenderScene);
   glutReshapeFunc(ChangeSize);
   glutTimerFunc(33,TimerFunction,1);

   SetupRC();
   glutMainLoop();
   return 0;
}
 
时间: 2024-10-10 20:19:15

模拟太阳、地球和月亮的相关文章

python的pygame模拟太阳-地球-月亮-金星等动态示意图代码分析

本文参考原文-http://bjbsair.com/2020-03-25/tech-info/6268/ 1.太阳系 2.今天来模拟太阳系的运动的行星,用python3和pygame来制作. 3.第1步: #---第1步---导出模块--- import pygame import sys import math from pygame.locals import * 4.第2步: #---第2步---游戏初始化--- pygame.init() 5.第3步: #---第3步---定义颜色---

openGL+VS2010的例程--太阳地球月球运动模型增强版(三维)

效果图如上: 步骤:请看注释,这里略. 实现代码如下: 1 #include "windows.h" 2 #include <gl\glut.h> 3 4 // 三者的大小比例 5 #define SunSize 0.4 6 #define EarthSize 0.06 7 #define MoonSize 0.016 8 9 GLfloat SpeedMultiplicator = 0.01;// 运行倍数 10 // 时间比例 11 GLfloat DaysPerYea

openGL+VS2010的例程--太阳地球月球运动模型(三维)

效果图如上: 步骤:略 实现代码如下: 1 #include "windows.h" 2 #include <gl\glut.h> 3 4 #define SunSize 0.4 5 #define EarthSize 0.06 6 #define MoonSize 0.016 7 8 GLfloat SpeedMultiplicator = 1.0; 9 GLfloat DaysPerYear = 50.0; //OK, ok... but it is soo slow

ios 3D引擎 SceneKit 开发(4) --关于旋转的几点问题(1)

旋转模型是经常遇到了,我们之前用CABasicAnimation 可以旋转一个view,其实它也可以旋转一个SCNNode. 首先我们要明白一个概念,每个SCNNode 都有自身的三维坐标系,用CABasicAnimation就是让SCNNode绕自身的三维坐标轴旋转,所以要特别注意是坐标轴,不是这个SCNNode的几何中心.一般SceneKit 的自带的几个几何体的坐标系原点(0,0,0)就是这个它的几何中心,比如说SCNBox:SCNSphere等等,所以看上去跟绕几何中心旋转一模一样. 我

OpenGL学习笔记 之三 (简单示例 太阳月亮地球)

#include<glut.h> // 太阳.地球和月亮 // 假设每个月都是30天 // 一年12个月,共是360天 static int day = 150;//day的变化:从0到359 void myDisplay(void) { glDepthFunc(GL_LEQUAL);//设置深度<=通过,与物体之间的前后有关 glEnable(GL_DEPTH_TEST);//深度检测 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

地球的运动

小知识 星期制度来源于天文. 古人根据已知的运动的星辰:日.月.火.水.水.金.土.七颗行星. 运动 每24小时绕自己的轴转一周,造成天穹围绕地球一周的现象. 地球每365又1/4绕太阳转一圈,一秒走30千米,比最快的或者还快1000倍(不过有了高铁,已经不对了).火车追地球,就像乌龟追火车一样. 地球的自转产生了昼夜的交替. 地球的公转产生了季节的变换. 岁角差.地球和月亮的重心围绕太阳运动.在此基础上,地球还围绕这个重心运动.每月走一个轨道. 二分点的进动或岁差.地球的轴好像一根指着天的拇指

OpenGL入门学习

说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率.16色来做吗?显然是不行的. 本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物. OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性. 1.与C语言紧密结合. OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的

二人团队项目之结对编程

一.项目名称:模拟星球运转. 说明:利用java语言来编辑程序,来模拟星球的运转,但是,由于时间匆忙,能力有限,其中仅包含太阳,地球,月亮,火星. 二.部分代码截图. 三.运行截图. 四.二人合影. 五.约定的规范. 在eclipse中,保存时代码时进行格式化,再点击 windows首选项 java -editor - save actions,对代码进行保存,自动进行格式规范. 六.分配时间记录. 1.确定课题:15% 2.编写代码:45% 3.修改代码:25% 4.代码上传及编写博客:15%

OpenGL理解

说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率.16色来做吗?显然是不行的. 本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物. OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性. 1.与C语言紧密结合. OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的