本作品利用OpenGL技术创建了一个逼真的太阳系模型,精确再现了各大行星围绕恒星运行的真实场景,为用户提供了沉浸式的天文探索体验。
```cpp
// 视图初始化函数
void InitGL() {
glEnable(GL_DEPTH_TEST); // 启用深度测试以处理遮挡关系
glClearColor(0.1f, 0.1f, 0.1f, 1.0f); // 设置背景颜色为深灰色
glGenTextures(TEXTURE_COUNT, textures);
glBindTexture(GL_TEXTURE_2D, skyTexId);
LoadBmp(Picture//Sky.bmp, &skyImg); // 载入天空图片
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, skyImg.imgWidth, skyImg.imgHeight,
0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, skyImg.data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // 设置纹理过滤模式
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glBindTexture(GL_TEXTURE_2D, sunTexId);
LoadBmp(Picture//Sun.bmp, &sunImg); // 载入太阳图片
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, sunImg.imgWidth, sunImg.imgHeight,
0,GL_BGRA_EXT,GL_UNSIGNED_BYTE,sunImg.data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // 设置纹理过滤模式
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glBindTexture(GL_TEXTURE_2D, rayTexId);
LoadBmp(Picture//Ray.bmp, &rayImg); // 载入太阳光线图片
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, rayImg.imgWidth, rayImg.imgHeight,
0,GL_BGRA_EXT,GL_UNSIGNED_BYTE,rayImg.data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // 设置纹理过滤模式
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glBindTexture(GL_TEXTURE_2D, mercuTexId);
LoadBmp(Picture//Mercu.bmp, &mercuImg); // 载入水星图片
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, mercuImg.imgWidth,
mercuImg.imgHeight, 0,GL_BGRA_EXT,GL_UNSIGNED_BYTE,
mercuImg.data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // 设置纹理过滤模式
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glBindTexture(GL_TEXTURE_2D, venusTexId);
LoadBmp(Picture//Venus.bmp, &venusImg); // 载入金星图片
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, venusImg.imgWidth,
venusImg.imgHeight, 0,GL_BGRA_EXT,GL_UNSIGNED_BYTE,
venusImg.data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // 设置纹理过滤模式
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glBindTexture(GL_TEXTURE_2D, earthTexId);
LoadBmp(Picture//Earth.bmp, &earthImg); // 载入地球图片
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, earthImg.imgWidth,
earthImg.imgHeight, 0,GL_BGRA_EXT,GL_UNSIGNED_BYTE,
earthImg.data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // 设置纹理过滤模式
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glBindTexture(GL_TEXTURE_2D, marsTexId);
LoadBmp(Picture//Mars.bmp, &marsImg); // 载入火星图片
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, marsImg.imgWidth,
marsImg.imgHeight, 0,GL_BGRA_EXT,GL_UNSIGNED_BYTE,
marsImg.data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // 设置纹理过滤模式
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glBindTexture(GL_TEXTURE_2D, jupiterTexId);
LoadBmp(Picture//Jupiter.bmp, &jupiterImg); // 载入木星图片
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, jupiterImg.imgWidth,
jupiterImg.imgHeight, 0,GL_BGRA_EXT,GL_UNSIGNED_BYTE,
jupiterImg.data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // 设置纹理过滤模式
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glBindTexture(GL_TEXTURE