金字塔代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DestroyWindow(wΒιβλιοθήκη Baidundow->hWnd);//销毁该窗口
HWNDhWnd;//窗口句柄
HDChDC;//设备描述表
HGLRChRC;//绘制描述表
GL_WindowInitinit;//提供Window初始化信息的结构体
} GL_Window;
//此代码模块中包含的函数的前向声明:
BOOL Initialize(GL_Window* window, Keys* keys);//设置你绘制前的初始化值
dmScreenSettings.dmFields= DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
//尝试设置显示模式并返回结果。注: CDS_FULLSCREEN移去了状态栏
if (ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
window);
if (window->hWnd == 0)//窗口是否成功创建
{
return FALSE;//若失败,则返回FALSE
}
window->hDC = GetDC(window->hWnd);//取得当前窗口的设备描述表
if (window->hDC == 0)//若未得到设备描述表
{
glMatrixMode(GL_PROJECTION);//切换到投影矩阵模式
glLoadIdentity();//重置投影矩阵
gluPerspective(45, (float)width/(float)height, 0.1, 100);//设置透视投影
glMatrixMode(GL_MODELVIEW);//切换到模型视图矩阵
dmScreenSettings.dmSize= sizeof(DEVMODE);// Devmode结构的大小
dmScreenSettings.dmPelsWidth= width;//设置为屏幕宽度
dmScreenSettings.dmPelsHeight= height;//设置为屏幕高度
dmScreenSettings.dmBitsPerPel= bitsPerPixel;//设为指定位长;
#include <gl\gl.h>// OpenGL32库的头文件
#include <gl\glu.h>// Glu32库的头文件
#include <gl\glaux.h>// Glaux库的头文件
#include <stdio.h>//标准输入/输出头文件
//在此处加入程序要求的库到链接器中:
#pragma comment(lib, "opengl32.lib")//链接时查找OpenGL32.lib
DWORD windowExtendedStyle = WS_EX_APPWINDOW;//设置窗口扩展样式
PIXELFORMATDESCRIPTOR pfd =//像素格式描述符(pfd)的设置
{
sizeof(PIXELFORMATDESCRIPTOR),//像素的尺寸
1,//版本号
PFD_DRAW_TO_WINDOW |// pfd必须支持窗口绘制
//定义位置在屏幕左下方的光源
GLfloat light_position1[] = {-1.0f, -1.0f, 1.0f, 0.0f};//设置光源的位置
GLfloat light_ambient1[] = {0.5f, 0.5f, 0.5f, 1.0f};//定义环境光的颜色
GLfloat light_diffuse1[] = {1.0f, 1.0f, 1.0f, 1.0f};//定义漫反射光的颜色
GLuint PixelFormat;//保存像素格式
if (window->init.isFullScreen == TRUE)//切换全屏
{
if (ChangeScreenResolution(window->init.width, window->init.height, window->init.bitsPerPixel) == FALSE)
0,//无Alpha缓存
0,//忽略偏移位
0,//无累积缓存
0, 0, 0, 0,//忽略累积缓存位
16,//深度缓存为16位
0,//无模板缓存
0,//无辅助缓存
PFD_MAIN_PLANE,//主要绘制层
0,//保留位
0, 0, 0//忽略层遮罩
};
RECT windowRect = {0, 0, window->init.width, window->init.height};//定义窗口大小
PFD_SUPPORT_OPENGL |// pfd必须支持OpenGL
PFD_DOUBLEBUFFER,// pfd必须支持双缓存
PFD_TYPE_RGBA,//像素格式为RGBA
window->init.bitsPerPixel,//设置颜色深度
0, 0, 0, 0, 0, 0,//忽略颜色位数
#defineWIDTH640//定义窗口宽度
#define HEIGHT480//定义窗口高度
#define BPP16//定义每象素的位数
#define MAXTEXTURE1//定义最大的纹理数目(new)
//在此处引用程序要求的头文件:
#include <windows.h>// Windows的头文件
}
//开始创建OpenGL窗口
window->hWnd = CreateWindowEx(windowExtendedStyle,//窗口扩展样式
window->init.application->className,//应用程序类名
window->init.title,//窗口标题
windowStyle,//窗口样式
#define WM_TOGGLEFULLSCREEN (WM_USER+1)//定义全屏/窗口切换消息
#define TIMER1101//定义时钟代号,设置为101号
#define TITLE"5DG'S Lighting"//定义窗口标题
#define CLASSNAME"5DG_OPENGL"//定义窗口类名
char*title;//窗口标题
intwidth;//窗口宽度
intheight;//窗口高度
intbitsPerPixel;//每像素的位数
BOOLisFullScreen;//是否全屏
} GL_WindowInit;
typedef struct {//定义窗口结构体
Keys*keys;//键盘
#pragma comment(lib, "glu32.lib")//链接时查找glu32.lib
#pragma comment(lib, "glaux.lib")//链接时查找glaux.lib
//在此处定义与窗口相关的结构体:
typedef struct {//定义处理键盘的结构体
BOOL keyDown [256];//存储键盘按键状态的数组
//GLfloat light_ambient0[] = {0.7f, 0.7f, 0.7f, 1.0f};//定义环境光的颜色
//GLfloat light_diffuse0[] = {1.0f, 0.0f, 1.0f, 1.0f};//定义漫反射光的颜色
//GLfloat light_specular0[] = {1.0f, 1.0f, 1.0f, 1.0f};//定义镜面反射光的颜色
//在此处定义用户变量:
GLfloat angle_X;
GLfloat angle_Y;
GLuinttexture[MAXTEXTURE];//纹理数组,保存纹理名称
//定义位置在屏幕右上方的光源
//GLfloat light_position0[] = {1.0f, 1.0f, 1.0f, 0.0f};//设置光源的位置
}
else//全屏切换成功
{
ShowCursor (FALSE);//隐藏鼠标
windowStyle = WS_POPUP;//设置窗口样式
windowExtendedStyle |= WS_EX_TOPMOST;//设置窗口扩展样式
}
}
else
{
//调整窗口大小,包括窗口边界
AdjustWindowRectEx(&windowRect, windowStyle, 0, windowExtendedStyle);
BOOL light = FALSE;//用以切换两个光源
BOOL type = FALSE;//用来控制透明的方式
BOOL pKeyL;
BOOL pKeyC;
BOOL pKeyT;
void ResizeWindowGL(int width, int height)//重新设置窗口大小
{
glViewport(0, 0, (GLsizei)(width), (GLsizei)(height));//重置当前视口大小
glLoadIdentity();//重置模型视图矩阵
}
BOOL ChangeScreenResolution(int width, int height, int bitsPerPixel)//修改屏幕分辨率
{
DEVMODE dmScreenSettings;//设备设置模式
ZeroMemory(&dmScreenSettings, sizeof(DEVMODE));//清空
} Keys;
typedef struct {//定义存储应用程序实例的结构体
HINSTANCEhInstance;//应用程序实例
const char*className;//应用程序类名
} Application;
typedef struct {//定义初始化窗口所需信息
Application*application;//所属的应用程序
void DrawSceneGL(void);//在这里完成场景的绘制
void Update(void);//在此处更新对消息的动作
void Deinitialize(void);//在此处做退出前扫尾工作
//在此处定义全局变量:
GL_Window*OGL_window;//存储窗口信息
Keys*OGL_keys;//存储按键信息
GLfloat light_specular1[] = {1.0f, 1.0f, 1.0f, 1.0f};//定义镜面反射光的颜色
//定义位置在屏幕右上方的光源
GLfloat light_position0[] = {1.0f, 1.0f, 1.0f, 0.0f};//设置光源的位置
GLfloat light_ambient0[] = {0.5f, 0.5f, 0.5f, 1.0f};//定义环境光的颜色
0, 0,//窗口的X,Y坐标位置
windowRect.right - windowRect.left,//窗口宽度
windowRect.bottom - windowRect.top,//窗口高度
HWND_DESKTOP,//父窗口为桌面
0,//无菜单
window->init.application->hInstance,//传入应用程序实例
{
//全屏切换失败
MessageBox(HWND_DESKTOP, "无法切换到全屏模式,在窗口模式下运行.\nMode Switch Failed,Running In Windowed Mode.", "Error", MB_OK | MB_ICONEXCLAMATION);
window->init.isFullScreen = FALSE;//设置isFullscreen为False
{
return FALSE;//分辨率修改失败,返回False
}
return TRUE;//分辨率修改成功,返回True;
}
BOOL CreateWindowGL(GL_Window* window)//建立OpenGL窗口
{
DWORD windowStyle = WS_OVERLAPPEDWINDOW;//设置窗口样式
GLfloat light_diffuse0[] = {1.0f, 1.0f, 1.0f, 1.0f};//定义漫反射光的颜色
GLfloat light_specular0[] = {1.0f, 1.0f, 1.0f, 1.0f};//定义镜面反射光的颜色
BOOL lighting = FALSE;//控制光照的开启/关闭
相关文档
最新文档