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个控制点坐标的参数化插值
代码如下:
#include
#include
#include
#include
#include
#include
#include
#include "LoadBMP.h"
#include "particle.h"
#include
代码如下:
//设置材质、光照效果
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();
以下部分代码为土星绘制其他类似:
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
简单实现太阳系模拟