#define WM_TOGGLEFULLSCREEN (WM_USER+1) // 定义全屏/窗口切换消息
#define TIMER1 101 // 定义时钟代号,设置为101号
#define TITLE "笔记本" // 定义窗口标题
#define CLASSNAME "5DG_OPENGL" // 定义窗口类名
#define WIDTH 640 // 定义窗口宽度
#define HEIGHT 480 // 定义窗口高度
#define BPP 16 // 定义每象素的位数
#define MAXTEXTURE 15 // 定义最大的纹理数目(new)
// 在此处引用程序要求的头文件:
#include <windows.h> // Windows的头文件
#include <gl\gl.h> // OpenGL32库的头文件
#include <gl\glu.h> // Glu32库的头文件
#include <gl\glaux.h>
#include <stdio.h> // Glaux库的头文件
// 在此处加入程序要求的库到链接器中:
#pragma comment(lib, "opengl32.lib") // 链接时查找OpenGL32.lib
#pragma comment(lib, "glu32.lib") // 链接时查找glu32.lib
#pragma comment(lib, "glaux.lib") // 链接时查找glaux.lib
// 在此处定义与窗口相关的结构体:
typedef struct { // 定义处理键盘的结构体
BOOL keyDown [256]; // 存储键盘按键状态的数组
} Keys;
GLfloat angle_X; // 笔记本绕X轴的旋转角度
GLfloat angle_Y; // 笔记本绕Y轴的旋转角度
GLfloat angle_Z=-2.0f; // U盘
BOOL openbox = FALSE; // 打开/关闭笔记本
GLfloat rot = 0.0f; // 用来打开笔记本
BOOL pKeyF; // 键F按下了吗?
BOOL pKeyE; // 键E按下了吗?
BOOL fog_on; // 雾效果是否启用
GLuint filter; // 使用哪种滤波方式?
GLuint fogMode[] = { GL_EXP, GL_EXP2, GL_LINEAR }; // 储存雾的3种类型
GLuint fogfilter = 0;
GLfloat fogColor[4] = { 1.0f, 1.0f, 0.8f, 1.0f}; // 雾的颜色
GLfloat pos_z; // 透明贴图在z轴上的坐标
GLfloat pos_x; // 透明贴图在x轴上的坐标
GLfloat blendAlpha = 0.5f; // 初始化第二张的贴图为半透明
BOOL pKeyB; // B键是否按下?
BOOL blend; // 混合开/关控制
BOOL Oping; //换电脑屏幕
int i=9; //控制电脑屏幕
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;
// 此代码模块中包含的函数的前向声明:
BOOL Initialize(GL_Window* window, Keys* keys); // 设置你绘制前的初始化值
void DrawSceneGL(void); // 在这里完成场景的绘制
void Update(void); // 在此处更新对消息的动作
void Deinitialize(void); // 在此处做退出前扫尾工作
// 在此处定义全局变量:
GL_Window* OGL_window; // 存储窗口信息
Keys* OGL_keys; // 存储按键信息
GLuint texture[MAXTEXTURE]; // 纹理数组,保存纹理名称
// 定义位置在屏幕右上方的光源
GLfloat light_position0[] = {1.0f, 1.0f, 1.0f, 0.0f}; // 设置光源的位置
GLfloat light_ambient0[] = {0.7f, 0.7f, 0.7f, 1.0f}; // 定义环境光的颜色
GLfloat light_diffuse0[] = {4.0f, 2.0f, 0.0f, 1.0f}; // 定义漫反射光的颜色
GLfloat light_specular0[] = {1.0f, 7.0f, 5.0f, 1.0f}; // 定义镜面反射光的颜色
// 定义位置在屏幕左下方的光源
GLfloat light_position1[] = {-1.0f, -1.0f, 1.0f, 0.0f}; // 设置光源的位置
GLfloat light_ambient1[] = {0.7f, 0.7f, 0.7f, 1.0f}; // 定义环境光的颜色
GLfloat light_diffuse1[] = {1.0f, 0.0f, 1.0f, 1.0f}; // 定义漫反射光的颜色
GLfloat light_specular1[] = {1.0f, 1.0f, 1.0f, 1.0f}; // 定义镜面反射光的颜色
BOOL lighting = FALSE; // 控制光照的开启/关闭
BOOL light = FALSE; // 用以切换两个光源
BOOL pKeyL; //检测L键是否按下
BOOL pKeyC; //检测C键是否按下
// 在此处定义用户变量:
void ResizeWindowGL(int width, int height) // 重新设置窗口大小
{
glViewport(0, 0, (GLsizei)(width), (GLsizei)(height)); // 重置当前视口大小
glMatrixMode(GL_PROJECTION); // 切换到投影矩阵模式
glLoadIdentity(); // 重置投影矩阵
gluPerspective(45, (float)width/(float)height, 0.1, 100); // 设置透视投影
glMatrixMode(GL_MODELVIEW); // 切换到模型视图矩阵
glLoadIdentity(); // 重置模型视图矩阵
}
BOOL ChangeScreenResolution(int width, int height, int bitsPerPixel) // 修改屏幕分辨率
{
DEVMODE dmScreenSettings; // 设备设置模式
ZeroMemory(&dmScreenSettings, sizeof(DEVMODE)); // 清空
dmScreenSettings.dmSize = sizeof(DEVMODE); // Devmode结构的大小
dmScreenSettings.dmPelsWidth = width; // 设置为屏幕宽度
dmScreenSettings.dmPelsHeight = height; // 设置为屏幕高度
dmScreenSettings.dmBitsPerPel = bitsPerPixel; // 设为指定位长;
dmScreenSettings.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
// 尝试设置显示模式并返回结果。注: CDS_FULLSCREEN 移去了状态栏
if (ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
{
return FALSE; // 分辨率修改失败,返回 False
}
return TRUE; // 分辨率修改成功,返回 True;
}
BOOL CreateWindowGL(GL_Window* window) // 建立OpenGL窗口
{
DWORD windowStyle = WS_OVERLAPPEDWINDOW; // 设置窗口样式
DWORD windowExtendedStyle = WS_EX_APPWINDOW; // 设置窗口扩展样式
PIXELFORMATDESCRIPTOR pfd = // 像素格式描述符(pfd)的设置
{
sizeof(PIXELFORMATDESCRIPTOR), // 像素的尺寸
1, // 版本号
PFD_DRAW_TO_WINDOW | // pfd必须支持窗口绘制
PFD_SUPPORT_OPENGL | // pfd必须支持OpenGL
PFD_DOUBLEBUFFER, // pfd必须支持双缓存
PFD_TYPE_RGBA, // 像素格式为RGBA
window->init.bitsPerPixel, // 设置颜色深度
0, 0, 0, 0, 0, 0, // 忽略颜色位数
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}; // 定义窗口大小
GLuint PixelFormat; // 保存像素格式
if (window->init.isFullScreen == TRUE) // 切换全屏
{
if (ChangeScreenResolution(window->init.width, window->init.height, window->init.bitsPerPixel) == FALSE)
{
// 全屏切换失败
MessageBox(HWND_DESKTOP, "无法切换到全屏模式,在窗口模式下运行.\nMode Switch Failed,Running In Windowed Mode.", "Error", MB_OK | MB_ICONEXCLAMATION);
window->init.isFullScreen = FALSE; // 设置 isFullscreen 为False
}
else // 全屏切换成功
{
ShowCursor (FALSE); // 隐藏鼠标
windowStyle = WS_POPUP; // 设置窗口样式
windowExtendedStyle |= WS_EX_TOPMOST; // 设置窗口扩展样式
}
}
else
{
// 调整窗口大小,包括窗口边界
AdjustWindowRectEx(&windowRect, windowStyle, 0, windowExtendedStyle);
}
// 开始创建 OpenGL 窗口
window->hWnd = CreateWindowEx(windowExtendedStyle, // 窗口扩展样式
window->init.application->className,// 应用程序类名
window->init.title, // 窗口标题
windowStyle, // 窗口样式
0, 0, // 窗口的 X,Y 坐标位置
windowRect.r
a398302010
- 粉丝: 5
- 资源: 29
最新资源
- 技术资料分享STM32F102x8B-DS-CH-V2很好的技术资料.zip
- 技术资料分享STM32F102x46-DS-CH-V2很好的技术资料.zip
- Unity 三A级的点燃烟雾和火焰粒子系统
- 汇集原创了性小程序源码、精品小程序源码及分析、由浅入深的系列精品教程.zip
- 人员检测,可识别在工作区的人并通过YOLOv9打标签,12484张图片
- 关于图片复原的实践方案
- 【完美运营源码】最新找茬微信小程序源码+搭建教程+全套素材+前端源码
- 人工智能实验四 智能2202 钱杨帆 202221156046.doc
- 技术资料分享STM32F103x8B-DS-CH-V10很好的技术资料.zip
- AgileWorking 是一个团队协作的微信小程序,此工程为小程序的后台实现.zip
- 关于图片复原的实践方案
- 关于图片复原的实践方案
- C语言程序设计(小项目).zip
- 技术资料分享STM32F103x46-DS-CH-V2很好的技术资料.zip
- 627578713.EPUB
- iconfont,小程序彩色图标方案,小程序彩色iconfont生成工具.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈