#define WM_TOGGLEFULLSCREEN (WM_USER+1) // 定义全屏/窗口切换消息
#define TIMER1 101 // 定义时钟代号,设置为101号
#define TITLE "5DG'S Earth And Moon" // 定义窗口标题
#define CLASSNAME "5DG_OPENGL" // 定义窗口类名
#define WIDTH 800 // 定义窗口宽度
#define HEIGHT 600 // 定义窗口高度
#define BPP 16 // 定义每象素的位数
#define MAX_NO_TEXTURES 9
#define MAXTEXTURE 4 // 定义最大的纹理数目
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif _DEBUG
#define TEXTURE_LOAD_ERROR "Failed to load texture"
#define new DEBUG_NEW
#define MAX_NO_TEXTURES 9
#define PI 3.141592654
#define DEG2RAD(angle) angle * (PI / 180) // 将角度转换为弧度
#define ROTATION_SPEED 1
#define aR 5
#define bR 4
#define cR 3
#define RR 3
// 在此处引用程序要求的头文件:
#include <windows.h> // Windows的头文件
#include <gl\gl.h> // OpenGL32库的头文件
#include <gl\glu.h> // Glu32库的头文件
#include <gl\glaux.h> // Glaux库的头文件
#include <stdio.h> // 标准输入/输出库的头文件
#include <math.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <gl/glaux.h>
#include <gl/glut.h>
//#include <glut.lib>
//#include <glut32.lib>
// 在此处加入程序要求的库到链接器中:
#pragma comment (lib, "opengl32.lib") // 链接时查找OpenGL32.lib
#pragma comment (lib, "glu32.lib") // 链接时查找glu32.lib
#pragma comment (lib, "glaux.lib") // 链接时查找glaux.lib
#pragma comment (lib, "glut.lib") // 链接时查找glu32.lib
#pragma comment (lib, "glut32.lib") // 链接时查找glaux.lib
// 在此处定义与窗口相关的结构体:
typedef struct { // 定义处理键盘的结构体
BOOL keyDown [256]; // 存储键盘按键状态的数组
} Keys;
////////////////////////////////////
//#if !defined(AFX_TEXTURES_H__7586694F_51C1_4B03_9941_6E04EA1E2453__INCLUDED_)
#define AFX_TEXTURES_H__7586694F_51C1_4B03_9941_6E04EA1E2453__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
float RRR=0;
float DX=0;
float DY=0;
float DZ=0;
//int load_texture (char *file_name, int width, int height, int depth, GLenum colour_type, GLenum filter_type);
int load_texture ( char *file_name, int width, int height, int depth, GLenum colour_type, GLenum filter_type )
{
GLubyte *raw_bitmap ;
FILE *file;
if (( file = fopen(file_name, "rb"))==NULL )
{
return 1;
}
raw_bitmap = (GLubyte *)malloc(width * height * depth * (sizeof(GLubyte)));
if ( raw_bitmap == NULL )
{
fclose ( file );
return 2;
}
fread ( raw_bitmap , width * height * depth, 1 , file );
fclose ( file);
// 设置过滤类型
glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter_type );
glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter_type );
// 设置纹理环境
glTexEnvf ( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
gluBuild2DMipmaps ( GL_TEXTURE_2D, colour_type, width, height, colour_type,
GL_UNSIGNED_BYTE, raw_bitmap );
free ( raw_bitmap );
return 0;
}
void LoadTextures(GLuint *texture_id, int MaxNrOfTextures)
{
glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
glGenTextures(MaxNrOfTextures, texture_id);
glBindTexture(GL_TEXTURE_2D, texture_id[0]);
if (load_texture("mercury.raw", 640, 320, 3, GL_RGB, GL_NEAREST))
{
MessageBox(NULL, TEXTURE_LOAD_ERROR, "Error", MB_OK);
exit(1);
}
glBindTexture(GL_TEXTURE_2D, texture_id[1]);
if (load_texture("venus.raw", 640, 320, 3, GL_RGB, GL_NEAREST))
{
MessageBox(NULL, TEXTURE_LOAD_ERROR, "Error", MB_OK);
exit(1);
}
glBindTexture(GL_TEXTURE_2D, texture_id[2]);
if (load_texture("earth.raw", 640, 320, 3, GL_RGB, GL_NEAREST))
{
MessageBox(NULL, TEXTURE_LOAD_ERROR, "Error", MB_OK);
exit(1);
}
glBindTexture(GL_TEXTURE_2D, texture_id[3]);
if (load_texture("mars.raw", 640, 320, 3, GL_RGB, GL_NEAREST))
{
MessageBox(NULL, TEXTURE_LOAD_ERROR, "Error", MB_OK);
exit(1);
}
glBindTexture(GL_TEXTURE_2D, texture_id[4]);
if (load_texture("jupiter.raw", 640, 320, 3, GL_RGB, GL_NEAREST))
{
MessageBox(NULL, TEXTURE_LOAD_ERROR, "Error", MB_OK);
exit(1);
}
glBindTexture(GL_TEXTURE_2D, texture_id[5] );
if (load_texture( "saturn.raw", 640, 320, 3, GL_RGB, GL_NEAREST))
{
MessageBox(NULL, TEXTURE_LOAD_ERROR, "Error", MB_OK);
exit(1);
}
glBindTexture(GL_TEXTURE_2D, texture_id[6]);
if (load_texture("uranus.raw", 640, 320, 3, GL_RGB, GL_NEAREST))
{
MessageBox(NULL, TEXTURE_LOAD_ERROR, "Error", MB_OK);
exit(1);
}
glBindTexture(GL_TEXTURE_2D, texture_id[7]);
if (load_texture("neptune.raw", 640, 320, 3, GL_RGB, GL_NEAREST))
{
MessageBox(NULL, TEXTURE_LOAD_ERROR, "Error", MB_OK);
exit(1);
}
glBindTexture(GL_TEXTURE_2D, texture_id[8]);
if (load_texture("pluto.raw", 640, 320, 3, GL_RGB, GL_NEAREST))
{
MessageBox(NULL, TEXTURE_LOAD_ERROR, "Error", MB_OK);
exit(1);
}
}
struct Planet
{
float size,sections,posX,posY,posZ,SolarAngle,OwnAxisAngle;
int TextureID;
};
struct GlobalPosition
{
float fPosX,fPosY;
int iDegreesX,iDegreesY;
bool bRotationOn;
};
//////////////////////////////////
typedef struct { // 定义存储应用程序实例的结构体
HINSTANCE hInstance; // 应用程序实例
const char* className; // 应用程序类名
} Application;
typedef struct { // 定义初始化窗口所需信息
Application* application; // 所属的应用程序
char* title; // 窗口标题
int width; // 窗口宽度
int height; // 窗口高度
int bitsPerPixel; // 每像素的位数
BOOL isFullScreen; // 是否全屏
} GL_WindowInit;
typedef struct { // 定义窗口结构体
Keys* keys; // 键盘
HWND hWnd; // 窗口句柄
HDC hDC; // 设备描述表
HGLRC hRC; // 绘制描述表
GL_WindowInit init; // 提供Window初始化信息的结构体
} GL_Window;
GlobalPosition globalPosition;
Planet planet;
// 此代码模块中包含的函数的前向声明:
BOOL Initialize(GL_Window* window, Keys* keys); // 设置你绘制前的初始化值
void DrawSceneGL(void); // 在这里完成场景的绘制
void Update(void); // 在此处更新对消息的动作
void Deinitialize(void); // 在此处做退出前扫尾工作
void DrawSun();
// 在此处定义全局变量:
GL_Window* OGL_window; // 存储窗口信息
Keys* OGL_keys; // 存储按键信息
// 在此处定义用户变量:
GLfloat ep_Angle; // 地球公转的角度
GLfloat es_Angle; // 地球自转的角度
GLfloat mp_Angle; // 月亮公转的角度
GLfloat ms_Angle; // 月亮自转的角度
GLuint texture[MAXTEXTURE]; // 纹理数组,保存纹理名字
GLUquadricObj *quadric; // 建立二次曲面对象
GLfloat angle_Z; // 星空旋转角度
GLfloat LightAmbient[] = {0.5f, 0.5f, 0.5f, 1.0f};
GLfloat LightDiffuse[] = {1.0f, 1.0f, 1.0f, 1.0f};
GLfloat LightPosition[] = {0.0f, 0.0f, 0.0f, 1.0f};
GLfloat LightAmbient2[] = {0.2f, 0.2f, 0.2f, 1.0f};
GLfloat LightDiffuse2[] = {0.5f, 0.5f, 0.5f, 1.0f};
GLfloat LightPosition2[] = {0.0f, 0.0f, 2.0f, 1.0f};
/*
GLfloat LightAmbient[] = { 1.0f, 1.0f, 1.0f, 0.0f }; // 定义环境光的颜色
GLfloat LightDiffuse[] = { 1.0f, 1.0f, 1.0f, 0.0f }; // 定义漫反射光的颜色
GLfloat LightPosition[] = { 0.0f, 0.0f, 0.0f, 1.0f }; // 定义光源的位置
*/
GLfloat fogColor[4] = {0.5f, 0.0f, 0.5f, 1.0f}; // 雾的颜色为紫色
//////////////////////////////////////////////////////////////////////////////////////////
GLuint texture_id[MAX_NO_TEXTURES];
int iCometAngle, iCometPos ;
Planet mercury, venus, earth, mars, jupiter, saturn, uranus, neptune, pluto;
jiudaxingxing.rar_jiudaxingxing_visual c_显示太阳
版权申诉
150 浏览量
2022-09-14
16:39:22
上传
评论
收藏 1.89MB RAR 举报
weixin_42651887
- 粉丝: 80
- 资源: 1万+