#include <GL/freeglut.h>
//本来OpenGL程序一般还要包含<GL/gl.h>和<GL/glu.h>
//但GLUT的头文件中已经自动将这两个文件包含了,不必再次包含。
#include <iostream>
using namespace std;
// 太阳、地球和月亮
// 假设每个月都是30天
// 一年12个月,共是360天
static int day = 50; // day的变化:从0到359
void myDisplay(void)
{glEnable(GL_DEPTH_TEST); // 用来开启更新深度缓冲区的功能,也就是,如果通过比较后深度值发生变化了,会进行更新深度缓冲区的操作。// 启动它,OpenGL就可以跟踪再Z轴上的像素,这样,它只会再那个像素前方没有东西时,才会绘画这个像素。// 在做绘画3D时,这个功能最好启动,视觉效果比较真实。glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// 在必要时(通常是每次绘制画面开始时),清空深度缓冲,即:glClear(GL_DEPTH_BUFFER_BIT);// 其中,glClear (GL_COLOR_BUFFER_BIT)与glClear(GL_DEPTH_BUFFER_BIT)可以合并写为://glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);且后者的运行速度可能比前者快。glMatrixMode(GL_PROJECTION);glLoadIdentity();//gluPerspective(75, 1, 1, 400000000);gluPerspective(100, 1, 1000, 400000000);glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(0, -200000000, 200000000, 0, 0, 0, 0, 0, 1);// 绘制红色的“太阳”glColor3f(1.0f, 0.0f, 0.0f);glutSolidSphere(69600000, 20, 20);// 绘制蓝色的“地球”glColor3f(0.0f, 0.0f, 1.0f);glRotatef(day / 360.0 * 360.0, 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.0 - day / 360.0 * 360.0, 0.0f, 0.0f, -1.0f);glTranslatef(38000000, 0.0f, 0.0f);glutSolidSphere(4345000, 20, 20);glFlush();
}int main(int argc, char* argv[])
{glutInit(&argc, argv); //对GLUT进行初始化,这个函数必须在其它的GLUT使用之前调用一次。//其格式比较死板,一般照抄这句glutInit(&argc, argv)就可以了。glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);//设置显示方式,其中GLUT_RGB表示使用RGB颜色,//与之对应的还有GLUT_INDEX(表示使用索引颜色)。//GLUT_SINGLE表示使用单缓冲,与之对应的还有GLUT_DOUBLE(使用双缓冲)。glutInitWindowPosition(0, 0);glutInitWindowSize(400, 400);glutCreateWindow("第一个OpenGL程序");//根据前面设置的信息创建窗口。参数将被作为窗口的标题。//注意:窗口被创建后,并不立即显示到屏幕上。需要调用glutMainLoop才能看到窗口。glutDisplayFunc(&myDisplay);//调用显示函数glutMainLoop();//不断循环return 0;
}

OpenGL:绘制太阳地球例子相关推荐

  1. opengl: 太阳地球和月亮

    // Solar.c // OpenGL SuperBible // Demonstrates OpenGL nested coordinate transformations // and pers ...

  2. webgl 绘制太阳 地球 月亮

    目录 1.开发环境 2.内容说明 1.计算球体的坐标和纹理 2.求顶点索引 3.数据加载到缓存中 4.绘制球体 5.其他 3.运行结果及代码下载 1.开发环境 浏览器 : 火狐 firefox(配置参 ...

  3. openGL绘制带纹理太阳、地球、月亮,并且地球自转并且围绕太阳旋转。月亮自转也会围绕地球旋转

    openGL系列文章目录 前言 使用openGL绘制太阳.地球.月亮,太阳自转,地球自转并且围绕太阳旋转.月亮自转也会围绕地球旋转,其实月亮也会围绕太阳旋转的. 一.效果 还是有不满意的地方: 1.没 ...

  4. opengl的配置和太阳-地球-月球演示

    详细配置过程请点击链接 https://www.cnblogs.com/flylinmu/p/7823019.html 下面介绍opengl实例,太阳-地球-月球演示 建立一个控制台程序 sun.cp ...

  5. openGl编程实现一个太阳地球月亮的一个简单运动系统

    一. 项目目的 使用openGl编程实现一个太阳地球月亮的一个简单运动系统,要求实现三维转动.点光源变化.纹理映射及阴影等效果 二. 任务实现 \1. 满足三者实际大小/距离的比例关系: \2. 满足 ...

  6. openGL绘制带纹理地球,并实现鼠标键盘控制

    openGL系列文章目录 文章目录 openGL系列文章目录 前言 一.绘制球体 二.关键代码 球体类(Sphere) 主函数 顶点着色器 片元着色器 显示效果 源码下载 参考 前言 openGL绘制 ...

  7. OpenGL绘制三角形

    OpenGL绘制三角形 1. 可编程渲染管线 2. 标准化设备坐标(Normalized Device Coordinates) 3. 三角形顶点数据输入 4. 顶点着色器(Vertex Shader ...

  8. Canvas模拟太阳地球月球的运动过程

    先看效果图 代码 package com.test.paintdemo.pathrelate;import android.content.Context; import android.graphi ...

  9. QT使用openGL绘制一个三角形

    对于opengl的学习来说,绘制一个三角形是学习一种计算机语言时的一个hello world级的入门程序,个人觉得相比主流语言的helloworld,openGL的入门确实是有一些劝退,虽然说有不错的 ...

最新文章

  1. mongodb 入门
  2. mabatisplus怎么给实体类自定义属性_吊打面试官之:当实体类中的属性名和表中的字段名不一样 ,怎么办 ?...
  3. 搭建QT和VS2010集成开发环境
  4. Fanout交换器-搭建环境
  5. 设计模式---组合模式
  6. android 多个占位符,Android中占位符的使用
  7. java开发过程中的命名规范
  8. 无限分级 层次输出 demo
  9. hdu 4313 Matrix 并查集 多校联合赛(二) 第四题
  10. 论文笔记_S2D.05-2012-ECCV-从立体图像中提取与场景一致的三维对象和深度
  11. 【Java】集合实现学生管理系统
  12. 洛谷Java入门级代码之分汽水
  13. OneDrive 开机启动设置失效如何处理?
  14. arXiv2022-12 | FLIP:Scaling Language-Image Pre-training via Masking
  15. 云计算概念及Linux系统详解
  16. 赛普拉斯PSoC6正式接入阿里云Link TEE加强物联网应用的安全设计...
  17. 微信开放平台绑定各移动应用、网站应用、公众号、小程序、第三方的个数
  18. python实现小米手机 dingding 自动打卡
  19. Python与简单网络爬虫的编写
  20. JPEG文件格式 JFIF Exif

热门文章

  1. 领域驱动专家张逸文字脱口秀:简单工厂不简单
  2. 58 转转技术总监骆俊武:一个核心系统 3 万多行代码的重构实战篇
  3. Gitter - 高颜值GitHub小程序客户端诞生记
  4. 模糊搜索神器FZF番外篇
  5. Mavne安装Jboss
  6. ASP.NET 5 入门 (3) – Logging
  7. Atitit.遍历图像像素点rgb java attilax总结
  8. (原创)c++11中的日期和时间库
  9. Debugging--the practice of programming
  10. 微软官方及第三方SDK http://msdn.microsoft.com/zh-cn/jj923044