太阳系实现

  • 环境准备
  • 一、部分知识结构
  • 二、使用步骤
    • 1.引入库
    • 2.初始化光照、纹理、粒子
    • 3、绘制星体、轨迹
  • 总结
  • 参考

环境准备

windows10+VS2017+OpenGL

一、部分知识结构

glEnable(GL_TEXTURE_2D); // 激活TEXTURE0单元
MultiByteToWideChar:Windows提供的转换函数;该函数映射一个字符串到一个宽字符(unicode)的字符串
gluBuild2DMipmaps()可以自动生成不同细节层次的图片,即不同精细程度的图片。
glTexCoord2f() 函数
原型:glTexCoord2f(GLfloat s,GLfloat t);
s代表x坐标,t代表y坐标;
s∈[0.0,1.0],t∈[0.0,1.0];
用法:glTexCoord2f(0.0f, 0.0f);glVertex3f(-width /100, -height/100, 10–外部);

text纹理:逆时针;左下开始(0,0)
glCallList:显示列表是收集好所有的顶点,一次性的发送给GPU

void WINAPI glMap1f(
GLenum target,
GLfloat u1,
GLfloat u2,
GLint stride,
GLint order,
const GLfloat points
);
每个控制点均为三个表示 x、y 和 z 的浮点值。 计算映射时,将生成内部 glVertex3 命令。
0.0:该变量由该命令指定的公式进行计算。
1.0:U 的线性映射,如 glEvalCoord1所示,到 u^,该变量由该命令指定的公式进行计算。
在 点 中引用的数据结构中,一个控制点的开头和下一个控制点开头之间的浮点数或双精度数。
–这样,就可以将控制点嵌入到任意数据结构中。 唯一的约束是,
–特定控制点的值必须占用连续的内存位置。
控制点的数目。 必须为正数。
指向控制点数组的指针。
/

glEvalCoord1f((GLfloat)i / Line_Count);//根据4个控制点坐标的参数化插值

二、使用步骤

1.引入库

代码如下:

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <gl/glut.h>
#include <windows.h>
#include <gl/GLAUX.H>
#include <iostream>#include "LoadBMP.h"
#include "particle.h"
#include <math.h>

2.初始化光照、纹理、粒子

代码如下:

//设置材质、光照效果GLfloat mat_specular []={1,1,1,1.0};          GLfloat mat_shininess []={500.0};             GLfloat light_position[] = {7, 7, 0, 0};     GLfloat white_light[] = {1, 1, 1, 1};          GLfloat lmodel_ambient[]  = {0.8, 0.8,0.8,1};GLfloat mat_emission []={0.1,0.1,0.1,1.0};    glClearColor (0.0, 0.0, 0.0, 0.0);glShadeModel(GL_SMOOTH);glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission);glLightfv(GL_LIGHT0,GL_POSITION,light_position);glLightfv(GL_LIGHT0,GL_DIFFUSE,white_light);             glLightfv(GL_LIGHT0,GL_SPECULAR,white_light);            glLightModelfv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient);   glEnable(GL_LIGHTING);                                   glEnable(GL_LIGHT0);glEnable(GL_DEPTH_TEST);GLfloat LightAmbient[]  = {0.8, 0.8,0.8,1};GLfloat LightDiffuse[] = {1, 0.8, 0.8, 1};GLfloat LightPosition[] = {0,0,2, 0};  glEnable(GL_LIGHTING);                               glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient);      glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse);      glLightfv(GL_LIGHT1, GL_POSITION, LightPosition);    glEnable(GL_TEXTURE_2D);    //初始化粒子及纹理效果initParticle();LoadAllTextures();

3、绘制星体、轨迹

以下部分代码为土星绘制其他类似:

 glPushMatrix();drawCircle(8.0);glBindTexture(GL_TEXTURE_2D, saturn->texID);glRotatef((GLfloat)month / 1.7, 0.0, 1.0, 0.0);glTranslatef(8.0, 0.0, 0.0);glRotatef(30, -1, 0, 0);glPushMatrix();glRotatef((GLfloat)month, 0.0, 1.0, 0.0);glRotatef(90, -1, 0, 0);gltDrawSphere(0.35, 10, 10);glPopMatrix();glPushMatrix();glRotatef((GLfloat)month / 3, 1.0, 0.0, 0.0);gluDisk(quadric, 0.4, 0.5 ,20, 10); glBindTexture(GL_TEXTURE_2D, jupiter->texID);gluDisk(quadric, 0.55, 0.7, 20, 10);glPopMatrix();glPopMatrix();

总结

以下实现恒星、行星、卫星公转自转,天空盒,粒子,鼠标、键盘处理效果

链接:https://pan.baidu.com/s/1F607nfxq5_XxSPz_su71dg
提取码:mkio

参考

LearnOpenGL
简单实现太阳系模拟

OpenGL实现太阳系绘制相关推荐

  1. 【转】OpenGL实现太阳系模型

    转自:http://www.juwends.com/tech/opengl/opengl-solar-system.html OpenGL是一个非常强大的图形引擎.传说当下最流行的图形引擎有两套,其中 ...

  2. OpenGL实现太阳系模型 —— Juwend

    OpenGL实现太阳系模型 发表于 2012 年 12 月 30 日 由 Juwend OpenGL是一个非常强大的图形引擎.传说当下最流行的图形引擎有两套,其中之一就是Windows平台上最常用的D ...

  3. matlab太阳系,基于Opengl的太阳系动画实现

    #include float fEarth = 2.0f;//地球绕太阳的旋转角度 float fMoon = 24.0f;//月球绕地球的旋转角度 void Init() { glEnable(GL ...

  4. 实验七2D太阳系绘制

    实验七2D太阳系绘制 一.实验目的 1.掌握2D太阳系绘制方法. 2.掌握矩阵堆栈流程. 3.进一步掌握复合2D图形变换. 二.实验内容 1.已知太阳半径氏,地球半径月球半径Rm,每 个星球都会自转, ...

  5. OpenGL画太阳系

    分享一个OpenGL画太阳系的代码. #include <GL/glut.h> #include <GL/SOIL.h> #include <stdio.h> #i ...

  6. OpenGL Draw TransformFeedback 绘制变换反馈的实例

    OpenGL Draw TransformFeedback 绘制变换反馈 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include "vapp.h ...

  7. Android使用NDK OpenGL ES3.0绘制一个三角形

    Android使用NDK  OpenGL ES3.0绘制一个三角形 [尊重原创,转载请注明出处]https://blog.csdn.net/guyuealian/article/details/820 ...

  8. OpenGL ES之三——绘制纯色背景

    概述 这是一个系列的Android平台下OpenGl ES介绍,从最基本的使用最终到VR图的展示的实现,属于基础篇.(后面针对VR视频会再有几篇文章,属于进阶篇) OpenGL ES之一--概念扫盲 ...

  9. 【OpenGL ES】绘制圆形

    1 前言 [OpenGL ES]绘制三角形 中介绍了绘制三角形的方法,[OpenGL ES]绘制正方形中介绍了绘制正方形的方法,本文将介绍绘制圆形的方法. OpenGL 以点.线段.三角形为图元,没有 ...

最新文章

  1. Linux 下获取本机所有网卡 以及 网卡对应ip 列表
  2. GitHub上7000+ Star的Python常用代码合集
  3. olr 性能调优 NO_NORMS
  4. NS2安装笔记---SUSE Linux
  5. Spark SQL(六)之加载数据的参数配置
  6. PHP中的$_SERVER['PATH_INFO']
  7. html php上传图片验证判断,HTML_PHP实例:上传多个图片并校验的代码,单张的图片上传是不复杂的, - phpStudy...
  8. python 矩阵乘法梯度下降_使用python和numpy进行梯度下降
  9. Java中的final、static、this、super 关键字
  10. java+整合handwrite_Java
  11. Linux源码包安装的详细教程
  12. Verilog一个非常简洁的8选1多路选择器
  13. 一天一个西红柿,健康多多
  14. linux卸载致远oa,致远oa(seeyon)文件上传漏洞重现及分析
  15. 批处理PS给相同图片添加不同文字
  16. 计算机网络的有线接入,电脑怎么连接有线网络
  17. 淘宝API获取——商品详情信息、DESC信息、主图
  18. RFID智能档案管理系统 设计方案
  19. python 查找字符串
  20. 高等数学笔记-乐经良老师-第五章-积分(Ⅰ)-定积分与不定积分-第四节-不定积分

热门文章

  1. 微信小程序开发代理展示销售网站源码织梦模板(手机同步)
  2. 基于DOAS文件系统接口(DFS)暴露的SPDK块设备
  3. Baiduspider - 百度蜘蛛
  4. 用postman做接口测试实例
  5. 企鹅智酷“2015年互联网终极报告——解读九大行业红利”
  6. 【页高速缓存】radix tree 源码解析
  7. H5 信息图自动制作网站汇总
  8. 每日一课 | Python数据可视化—多样化的图像
  9. php阶梯电费,如何更优雅编码、更优算法 | 阶梯式电费算法 | 非常感谢、请指教~...
  10. 在MySQL中如何用SQL命令创建数据库及数据表