使用opengl绘制太阳、地球、月球,有纹理,有鼠标功能,有亮光
1.实现效果图如下
2. 环境配置
- windows7 64位
- vs2015
- 使用vs2015自带的NuGet工具,下载opengl库
Install-Package nupengl.core
3. 核心功能
3.1 太阳、地球、月球纹理实现
- 准备bmp文件
- 构建opengl可以解析的纹理数据结构,如下:
typedef struct {
int width; //纹理宽度
int height; //纹理高度
unsigned int texID; //纹理对象 ID
unsigned char * data; //实际纹理数据
}texture;
- 使用Windows自带的BITMAPFILEHEADER功能,载入bmp文件,填充数据结构。
-
glBindTexture(GL_TEXTURE_2D, sun->texID);
绑定纹理到对应的物体上。
3.2 设置光源
- 设置光源属性
GLfloat whiteLight[] = { 0.2f, 0.2f, 0.2f, 1.0f };
GLfloat lightPos[] = { 0.0f, 0.0f, 0.0f, 2.0f };
- 给太阳开启光源,并设置光源的属性
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
3.3 鼠标左键拖拽和滚轮缩放
实现比较简单,主要是捕捉鼠标事件,改变缩放因子和球体位置。具体可以看下图,三个球明显小了,在空间上的位置,也变化了。