OpenGL实现太阳系绘制
太阳系实现
- 环境准备
- 一、部分知识结构
- 二、使用步骤
- 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实现太阳系绘制相关推荐
- 【转】OpenGL实现太阳系模型
转自:http://www.juwends.com/tech/opengl/opengl-solar-system.html OpenGL是一个非常强大的图形引擎.传说当下最流行的图形引擎有两套,其中 ...
- OpenGL实现太阳系模型 —— Juwend
OpenGL实现太阳系模型 发表于 2012 年 12 月 30 日 由 Juwend OpenGL是一个非常强大的图形引擎.传说当下最流行的图形引擎有两套,其中之一就是Windows平台上最常用的D ...
- matlab太阳系,基于Opengl的太阳系动画实现
#include float fEarth = 2.0f;//地球绕太阳的旋转角度 float fMoon = 24.0f;//月球绕地球的旋转角度 void Init() { glEnable(GL ...
- 实验七2D太阳系绘制
实验七2D太阳系绘制 一.实验目的 1.掌握2D太阳系绘制方法. 2.掌握矩阵堆栈流程. 3.进一步掌握复合2D图形变换. 二.实验内容 1.已知太阳半径氏,地球半径月球半径Rm,每 个星球都会自转, ...
- OpenGL画太阳系
分享一个OpenGL画太阳系的代码. #include <GL/glut.h> #include <GL/SOIL.h> #include <stdio.h> #i ...
- OpenGL Draw TransformFeedback 绘制变换反馈的实例
OpenGL Draw TransformFeedback 绘制变换反馈 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include "vapp.h ...
- Android使用NDK OpenGL ES3.0绘制一个三角形
Android使用NDK OpenGL ES3.0绘制一个三角形 [尊重原创,转载请注明出处]https://blog.csdn.net/guyuealian/article/details/820 ...
- OpenGL ES之三——绘制纯色背景
概述 这是一个系列的Android平台下OpenGl ES介绍,从最基本的使用最终到VR图的展示的实现,属于基础篇.(后面针对VR视频会再有几篇文章,属于进阶篇) OpenGL ES之一--概念扫盲 ...
- 【OpenGL ES】绘制圆形
1 前言 [OpenGL ES]绘制三角形 中介绍了绘制三角形的方法,[OpenGL ES]绘制正方形中介绍了绘制正方形的方法,本文将介绍绘制圆形的方法. OpenGL 以点.线段.三角形为图元,没有 ...
最新文章
- Linux 下获取本机所有网卡 以及 网卡对应ip 列表
- GitHub上7000+ Star的Python常用代码合集
- olr 性能调优 NO_NORMS
- NS2安装笔记---SUSE Linux
- Spark SQL(六)之加载数据的参数配置
- PHP中的$_SERVER['PATH_INFO']
- html php上传图片验证判断,HTML_PHP实例:上传多个图片并校验的代码,单张的图片上传是不复杂的, - phpStudy...
- python 矩阵乘法梯度下降_使用python和numpy进行梯度下降
- Java中的final、static、this、super 关键字
- java+整合handwrite_Java
- Linux源码包安装的详细教程
- Verilog一个非常简洁的8选1多路选择器
- 一天一个西红柿,健康多多
- linux卸载致远oa,致远oa(seeyon)文件上传漏洞重现及分析
- 批处理PS给相同图片添加不同文字
- 计算机网络的有线接入,电脑怎么连接有线网络
- 淘宝API获取——商品详情信息、DESC信息、主图
- RFID智能档案管理系统 设计方案
- python 查找字符串
- 高等数学笔记-乐经良老师-第五章-积分(Ⅰ)-定积分与不定积分-第四节-不定积分
热门文章
- 微信小程序开发代理展示销售网站源码织梦模板(手机同步)
- 基于DOAS文件系统接口(DFS)暴露的SPDK块设备
- Baiduspider - 百度蜘蛛
- 用postman做接口测试实例
- 企鹅智酷“2015年互联网终极报告——解读九大行业红利”
- 【页高速缓存】radix tree 源码解析
- H5 信息图自动制作网站汇总
- 每日一课 | Python数据可视化—多样化的图像
- php阶梯电费,如何更优雅编码、更优算法 | 阶梯式电费算法 | 非常感谢、请指教~...
- 在MySQL中如何用SQL命令创建数据库及数据表