opengl中天空盒的绘制

  • i7_388268
    了解作者
  • 3.5MB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-06-09 02:41
    上传日期
opengl中天空盒的绘制,纹理的贴图,四周的移动
opengl中天空盒的绘制.rar
  • 4.2&4.3
  • Camera.cpp
    4.4KB
  • Texture.h
    507B
  • Release
  • Texture.obj
    16KB
  • Camera.obj
    19.2KB
  • BuildLog.htm
    2.8KB
  • vc70.pdb
    100KB
  • 5DG'S Heightmap.exe
    56KB
  • 5DG'S Heightmap.pdb
    363KB
  • Terrain.obj
    12.5KB
  • vc70.idb
    211KB
  • 5DG_Window.obj
    20.8KB
  • Main.obj
    21.6KB
  • Vector3D.obj
    19.7KB
  • Main.plg
    846B
  • Main.dsw
    516B
  • Vector3D.h
    1.5KB
  • Vector3D.cpp
    4.1KB
  • Main.ncb
    41KB
  • Terrain.cpp
    2.9KB
  • Texture.cpp
    8.8KB
  • 5DG_Window.cpp
    13.9KB
  • Terrain.h
    628B
  • Main.dsp
    3.7KB
  • 5DG_Window.h
    2KB
  • Camera.h
    1.3KB
  • Debug
  • 5DG_Window.pdb
    489KB
  • Texture.obj
    20.5KB
  • Camera.obj
    29.3KB
  • Main.ilk
    324.9KB
  • Main.pch
    3.5MB
  • 5DG_Window.ilk
    316.7KB
  • 5DG_Window.exe
    240.1KB
  • vc60.idb
    169KB
  • Terrain.obj
    15.2KB
  • Main.pdb
    489KB
  • vc60.pdb
    100KB
  • Main.exe
    256.1KB
  • 5DG_Window.obj
    23.9KB
  • Main.obj
    28.9KB
  • Vector3D.obj
    23.6KB
  • 5DG_Window.pch
    3.5MB
  • Main.cpp
    7KB
  • Main.opt
    47.5KB
  • Data
  • Skybox
  • Bottom.jpg
    163KB
  • Left.jpg
    105KB
  • Back.jpg
    114.8KB
  • Right.jpg
    128.2KB
  • Front.jpg
    101.5KB
  • Top.jpg
    17.5KB
  • Terrain.jpg
    57.7KB
  • Terrain.raw
    1MB
内容介绍
#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, 3000); // 设置透视投影 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); S
评论
    相关推荐
    • 贴图查看tex
      Tex 贴图查看器,最新版,V1.2 附带:tex导出,查看,png、bmp、jpg、jpeg转换为tex贴图
    • sketchup贴图
      讲解sketchup的几种贴图方式,对sketchup贴图不怎么熟悉的有一定的帮助
    • 无缝贴图软件
      这个是用在MAX贴图的东东。很好用。很强大。。分享给大家
    • 按钮贴图png
      PNGBUTTON png 按钮 贴图三态,四态均可以,使用说明:首先把多态图片拼成一张图片,代码中可以通过资源ID来加载png图片,按钮属性要owner draw设置为ture,调用m_RegStop.Load(MAKEINTRESOURCE(IDB_StopR),"PNG",...
    • VRAY HDRI 贴图
      vray渲染用的HDR贴图,有8种哦,想看看的就下吧,有各种天气的哦。适用于建筑渲染~~~~~
    • 角色贴图渐变
      输出一张从上到下的光影图。给角色一个从上到下的光线渐变,建议在贴图绘制到粗贴阶段上叠加一张这样的黑白图。来达到增加光感的目的
    • Snipaste贴图神器
      切换应用它依然在最上方,你把鼠标放到贴图上滚动鼠标可以调节大小,Ctrl+滚轮可以调节透明度,按住可以拖动,当你不需要了这个贴图了,按Esc键隐藏贴图,或者双击,再次按F3可以在调出来,你要可以按Shift+Esc键...
    • openGL贴图
      openGL基本贴图,openGL与MFC的结合,包括贴图坐标,法向向量等。
    • 贴图PSAWII
      贴图PSAWII
    • 光栅贴图
      光栅贴图