• 模拟太阳、地球和月亮


    代码如下:

    #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;
    }
     
    态度决定高度,细节决定成败,
  • 相关阅读:
    rc修改DIALOG的实际大小
    __RTC_CheckEsp 等 C Rumtime问题
    [无用]代码插件测试
    【Android】html转义字符
    【Eclipse】推荐UML插件Green UML、AmaterasUML
    【Android】SoundPool初步探究
    【Android】【自定义View】实现搜索放大镜旋转view
    [无用]测试
    【Android】【转】查看内存
    惜别
  • 原文地址:https://www.cnblogs.com/lxk2010012997/p/4195368.html
Copyright © 2020-2023  润新知