OpenGL:绘制太阳地球例子
#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:绘制太阳地球例子相关推荐
- opengl: 太阳地球和月亮
// Solar.c // OpenGL SuperBible // Demonstrates OpenGL nested coordinate transformations // and pers ...
- webgl 绘制太阳 地球 月亮
目录 1.开发环境 2.内容说明 1.计算球体的坐标和纹理 2.求顶点索引 3.数据加载到缓存中 4.绘制球体 5.其他 3.运行结果及代码下载 1.开发环境 浏览器 : 火狐 firefox(配置参 ...
- openGL绘制带纹理太阳、地球、月亮,并且地球自转并且围绕太阳旋转。月亮自转也会围绕地球旋转
openGL系列文章目录 前言 使用openGL绘制太阳.地球.月亮,太阳自转,地球自转并且围绕太阳旋转.月亮自转也会围绕地球旋转,其实月亮也会围绕太阳旋转的. 一.效果 还是有不满意的地方: 1.没 ...
- opengl的配置和太阳-地球-月球演示
详细配置过程请点击链接 https://www.cnblogs.com/flylinmu/p/7823019.html 下面介绍opengl实例,太阳-地球-月球演示 建立一个控制台程序 sun.cp ...
- openGl编程实现一个太阳地球月亮的一个简单运动系统
一. 项目目的 使用openGl编程实现一个太阳地球月亮的一个简单运动系统,要求实现三维转动.点光源变化.纹理映射及阴影等效果 二. 任务实现 \1. 满足三者实际大小/距离的比例关系: \2. 满足 ...
- openGL绘制带纹理地球,并实现鼠标键盘控制
openGL系列文章目录 文章目录 openGL系列文章目录 前言 一.绘制球体 二.关键代码 球体类(Sphere) 主函数 顶点着色器 片元着色器 显示效果 源码下载 参考 前言 openGL绘制 ...
- OpenGL绘制三角形
OpenGL绘制三角形 1. 可编程渲染管线 2. 标准化设备坐标(Normalized Device Coordinates) 3. 三角形顶点数据输入 4. 顶点着色器(Vertex Shader ...
- Canvas模拟太阳地球月球的运动过程
先看效果图 代码 package com.test.paintdemo.pathrelate;import android.content.Context; import android.graphi ...
- QT使用openGL绘制一个三角形
对于opengl的学习来说,绘制一个三角形是学习一种计算机语言时的一个hello world级的入门程序,个人觉得相比主流语言的helloworld,openGL的入门确实是有一些劝退,虽然说有不错的 ...
最新文章
- mongodb 入门
- mabatisplus怎么给实体类自定义属性_吊打面试官之:当实体类中的属性名和表中的字段名不一样 ,怎么办 ?...
- 搭建QT和VS2010集成开发环境
- Fanout交换器-搭建环境
- 设计模式---组合模式
- android 多个占位符,Android中占位符的使用
- java开发过程中的命名规范
- 无限分级 层次输出 demo
- hdu 4313 Matrix 并查集 多校联合赛(二) 第四题
- 论文笔记_S2D.05-2012-ECCV-从立体图像中提取与场景一致的三维对象和深度
- 【Java】集合实现学生管理系统
- 洛谷Java入门级代码之分汽水
- OneDrive 开机启动设置失效如何处理?
- arXiv2022-12 | FLIP:Scaling Language-Image Pre-training via Masking
- 云计算概念及Linux系统详解
- 赛普拉斯PSoC6正式接入阿里云Link TEE加强物联网应用的安全设计...
- 微信开放平台绑定各移动应用、网站应用、公众号、小程序、第三方的个数
- python实现小米手机 dingding 自动打卡
- Python与简单网络爬虫的编写
- JPEG文件格式 JFIF Exif
热门文章
- 领域驱动专家张逸文字脱口秀:简单工厂不简单
- 58 转转技术总监骆俊武:一个核心系统 3 万多行代码的重构实战篇
- Gitter - 高颜值GitHub小程序客户端诞生记
- 模糊搜索神器FZF番外篇
- Mavne安装Jboss
- ASP.NET 5 入门 (3) – Logging
- Atitit.遍历图像像素点rgb java attilax总结
- (原创)c++11中的日期和时间库
- Debugging--the practice of programming
- 微软官方及第三方SDK http://msdn.microsoft.com/zh-cn/jj923044