• PUDN用户
    了解作者
  • Visual C++
    开发工具
  • 9.4MB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 7
    下载次数
  • 2011-05-12 10:30
    上传日期
OpenGL程序,描述喷泉的场景和流行的滑落!!
Scene.rar
  • Scene
  • Debug
  • vc60.pdb
    100KB
  • Scene.pdb
    1.9MB
  • Scene.exe
    548KB
  • vc80.pdb
    156KB
  • vc60.idb
    153KB
  • BuildLog.htm
    4.9KB
  • mt.dep
    67B
  • 5DG'S Matrix.obj
    41.6KB
  • Scene.exe.embed.manifest
    146B
  • 5DG_Window.obj
    34.7KB
  • Scene.exe.intermediate.manifest
    145B
  • Scene.exe.embed.manifest.res
    212B
  • Scene.ilk
    1.3MB
  • vc80.idb
    403KB
  • Texture.obj
    33.1KB
  • 场景-音乐
  • Data
  • Particle.JPG
    755B
  • Font.JPG
    21.1KB
  • Bgmusic.mp3
    2.8MB
  • Fmodvc.lib
    151.7KB
  • 5DG_Window.h
    2KB
  • Fmod.h
    42.6KB
  • Scene.exe
    548KB
  • 5DG_Window.cpp
    13.9KB
  • Texture.cpp
    8.8KB
  • 5DG'S Matrix.cpp
    11.9KB
  • Fmod.dll
    134KB
  • Texture.h
    507B
  • Data
  • Particle.JPG
    755B
  • Font.JPG
    21.1KB
  • Bgmusic.mp3
    2.8MB
  • Fmodvc.lib
    151.7KB
  • 5DG_Window.h
    2KB
  • 5DG'S Matrix.asp
    249B
  • Fmod.h
    42.6KB
  • Scene.exe
    548KB
  • Scene.suo
    7KB
  • Scene.dsw
    518B
  • Scene.vcproj.291A680F038A478.touch.user
    1.4KB
  • 5DG_Window.cpp
    13.9KB
  • Scene.dsp
    4.1KB
  • Scene.sln
    874B
  • Scene.ncb
    9.5MB
  • Texture.cpp
    8.8KB
  • Scene.opt
    49.5KB
  • 5DG'S Matrix.cpp
    11.9KB
  • Scene.plg
    1.8KB
  • Texture.asp
    249B
  • Scene.vcproj
    6.2KB
  • Fmod.dll
    134KB
  • Texture.h
    507B
内容介绍
#include "5DG_Window.h" void TerminateApplication(GL_Window* window) // 结束程序 { PostMessage(window->hWnd, WM_QUIT, 0, 0); // 发送WM_QUIT消息 g_isProgramLooping = FALSE; // 停止程序 } 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.right - windowRect.left, // 窗口宽度 windowRect.bottom - windowRect.top, // 窗口高度 HWND_DESKTOP, // 父窗口为桌面 0, // 无菜单 window->init.application->hInstance,// 传入应用程序实例 window); if (window->hWnd == 0) // 窗口是否成功创建 { return FALSE; // 若失败,则返回FALSE } window->hDC = GetDC(window->hWnd); // 取得当前窗口的设备描述表 if (window->hDC == 0) // 若未得到设备描述表 { DestroyWindow(window->hWnd); // 销毁该窗口 window->hWnd = 0; // 窗口句柄清零 return FALSE; // 返回FALSE } PixelFormat = ChoosePixelFormat(window->hDC, &pfd); // 选择兼容的像素格式 if (PixelFormat == 0) // 若选择失败 { ReleaseDC(window->hWnd, window->hDC); // 释放设备描述表 window->hDC = 0; // 将设备描述表清零 DestroyWindow(window->hWnd); // 销毁窗口 window->hWnd = 0; // 窗口句柄清零 return FALSE; // 返回FALSE } if (SetPixelFormat(window->hDC, PixelFormat, &pfd) == FALSE) // 设置像素格式并判断是否失败 { ReleaseDC(window->hWnd, window->hDC); // 释放设备描述表 window->hDC = 0; // 将设备描述表清零 DestroyWindow(window->hWnd); // 销毁窗口 window->hWnd = 0; // 窗口句柄清零 return FALSE; // 返回FALSE } window->hRC = wglCreateContext(window->hDC); // 取得绘制描述表 if (window->hRC == 0) // 若未得到绘制描述表 { ReleaseDC(window->hWnd, window->hDC); // 释放设备描述表 window->hDC = 0; // 将设备描述表清零 DestroyWindow(window->hWnd); // 销毁窗口 window->hWnd = 0; // 窗口句柄清零 return FALSE; // 返回FALSE } if (wglMakeCurrent(window->hDC, window->hRC) == FALSE) // 设置绘制描述表并判断是否失败 { wglDeleteContext(window->hRC); // 删除绘制描述表 window->hRC = 0; // 将绘制描述表清零 ReleaseDC(window->hWnd, window->hDC); // 释放设备描述表 window->hDC = 0; // 将设备描述表清零 DestroyWindow(window->hWnd); // 销毁窗口 window->hWnd = 0; // 窗口句柄清零 return FALSE; // 返回FALSE } ShowWindow(window->hWnd, SW_NORMAL); // 显示窗口 ResizeWindowGL(window->init.width, window->init.height); // 重设窗口 ZeroMemory(window->keys, sizeof(Keys)); // 清空键盘缓冲区 return TRUE; // 窗口创建成功 } BOOL DestroyWindowGL(GL_Window* window) // 销毁窗口并释放程序所用的资源 { if (window->hWnd != 0) // 窗口有句柄? { if (window->hDC != 0) // 窗口是否有得到绘制描述表? { wglMakeCurrent(window->hDC, 0); // 将当前描述表指针置为0 if (window->hRC != 0) // 该窗口是否有绘制描述表 { wglDeleteContext(window->hRC); // 释放绘制描述表 window->hRC = 0; // 将绘制描述表清零 } ReleaseDC(window->hWnd, window->hDC); // 释放设备描述表 window->hDC = 0; // 将设备描述表清零 } DestroyWindow(window->hWnd); // 销毁窗口 window->hWnd = 0; // 将窗口句柄清零 } if (window->init.isFullScreen) // 若窗口在全屏模式下 { ChangeDisplaySettings(NULL, 0); // 切换为桌面分辨率 ShowCursor(TRUE); // 显示鼠标 } return TRUE; // 返回TRUE } LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { GL_Window* window = (GL_Window*)(GetWindowLong(hWnd, GWL_USERDATA)); switch (uMsg) // 取得Window的消息值 { case WM_SYSCOMMAND: // 截取系统命令 { switch (wParam) // 监听系统调用 { case SC_SCREENSAVE: // 要运行屏保(Screensaver)? case SC_MONITORPOWER: // 显示器进入节电模式(Powersave)? return 0; // 提前返回0,防止系统调用执行 } break; // 退出 } case WM_CREATE: // 创建Window { CREATESTRUCT* creation = (CREATESTRUCT*)(lParam); // 保存窗口结构指针 window = (GL_Window*)(creation->lpCreateParams); Se
评论
    相关推荐