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

编程入门 行业动态 更新时间:2024-10-05 19:18:08

OpenGL学习笔记 之三 (简单示例 太阳<a href=https://www.elefans.com/category/jswz/34/1768551.html style=月亮地球)"/>

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);glMatrixMode(GL_PROJECTION);//矩阵为投影变换模式glLoadIdentity();//获得单位矩阵gluPerspective(75,1,1,400000000);//透视变换角度75度,长宽比1:1,最近可视距离1,最远400000000两倍地球公转半径
glMatrixMode(GL_MODELVIEW);//矩阵为视图模式
    glLoadIdentity();gluLookAt(0,-200000000,200000000,0,0,0,0,0,1);//整体布局,视角位(这里是45度倾角),物体位置,z轴正向//绘制红色太阳glColor3f(1.0f,0.0f,0.0f);glutSolidSphere(69600000,20,20);//绘制蓝色的地球glColor3f(0.0f,0.0f,1.0f);glRotatef(day/360.0*360,0.0f,0.0f,-1.0f);glTranslatef(150000000,0.0f,0.0f);glutSolidSphere(15945000,20,20);//绘制黄色的“月亮”glColor3f(1.0f,1.0f,0.0f);glRotatef(day/30.0*360 - day/360.0*360,0.0f,0.0f,-1);glTranslatef(38000000,0.0f,0.0f);glutSolidSphere(4345000,20,20);glFlush();
}int main(int argc, char* argv[])
{glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);glutInitWindowPosition(100,100);glutInitWindowSize(400,400); glutCreateWindow("天体");glutDisplayFunc(&myDisplay);glutMainLoop();return 0;
}

效果:

 

变成动画,并使用双缓存:

#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);glMatrixMode(GL_PROJECTION);//矩阵为投影变换模式glLoadIdentity();//获得单位矩阵gluPerspective(75,1,1,400000000);//透视变换角度75度,长宽比1:1,最近可视距离1,最远400000000两倍地球公转半径
glMatrixMode(GL_MODELVIEW);//矩阵为视图模式
    glLoadIdentity();gluLookAt(0,-200000000,200000000,0,0,0,0,0,1);//整体布局,视角位置(这里是45度倾角),物体位置,z轴正向//绘制红色太阳glColor3f(1.0f,0.0f,0.0f);glutSolidSphere(69600000,20,20);//绘制蓝色的地球glColor3f(0.0f,0.0f,1.0f);glRotatef(day/360.0*360,0.0f,0.0f,-1.0f);glTranslatef(150000000,0.0f,0.0f);glutSolidSphere(15945000,20,20);//绘制黄色的“月亮”glColor3f(1.0f,1.0f,0.0f);glRotatef(day/30.0*360 - day/360.0*360,0.0f,0.0f,-1);glTranslatef(38000000,0.0f,0.0f);glutSolidSphere(4345000,20,20);glFlush();
    glutSwapBuffers();
}
void myIdle()
{++day;if(day>=360)day = 0;
    myDisplay();
}
int main(int argc, char* argv[])
{glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE);glutInitWindowPosition(100,100);glutInitWindowSize(450,450); glutCreateWindow("天体");glutDisplayFunc(&myDisplay);
    glutIdleFunc(&myIdle);glutMainLoop();return 0;
}

 

 

转载于:.html

更多推荐

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

本文发布于:2024-02-28 07:05:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1768563.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:月亮   示例   之三   学习笔记   地球

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!