创建OpenGL窗口
来源:互联网 发布:javascript 尚学堂 编辑:程序博客网 时间:2024/04/27 22:24
1,新建一个类(GLWindow)
2,头文件中 include 文件:glew.h、glfw3.h, 由于glew是静态库需要定义宏 #define GLEW_STATIC 1
3,具体代码如下:
class GLWindow{public: GLWindow(); ~GLWindow(); //创建窗口 /** *@param width:窗口的宽度 *@param height:窗口的高度 *@param title:标题 */ void createWindow(int width, int height, const char* title); //关闭窗口 void closeWindow(); //是否已经关闭窗口 bool windowShouldClose(); //交换前后端渲染缓冲 void pollEvents();private: GLFWwindow* m_pWindow;};
static const char* getKeyName(int key){ switch (key) { case GLFW_KEY_A: return "A"; case GLFW_KEY_B: return "B"; case GLFW_KEY_C: return "C"; case GLFW_KEY_D: return "D"; case GLFW_KEY_E: return "E"; case GLFW_KEY_F: return "F"; case GLFW_KEY_G: return "G"; case GLFW_KEY_H: return "H"; case GLFW_KEY_I: return "I"; case GLFW_KEY_J: return "J"; case GLFW_KEY_K: return "K"; case GLFW_KEY_L: return "L"; case GLFW_KEY_M: return "M"; case GLFW_KEY_N: return "N"; case GLFW_KEY_O: return "O"; case GLFW_KEY_P: return "P"; case GLFW_KEY_Q: return "Q"; case GLFW_KEY_R: return "R"; case GLFW_KEY_S: return "S"; case GLFW_KEY_T: return "T"; case GLFW_KEY_U: return "U"; case GLFW_KEY_V: return "V"; case GLFW_KEY_W: return "W"; case GLFW_KEY_X: return "X"; case GLFW_KEY_Y: return "Y"; case GLFW_KEY_Z: return "Z"; case GLFW_KEY_1: return "1"; case GLFW_KEY_2: return "2"; case GLFW_KEY_3: return "3"; case GLFW_KEY_4: return "4"; case GLFW_KEY_5: return "5"; case GLFW_KEY_6: return "6"; case GLFW_KEY_7: return "7"; case GLFW_KEY_8: return "8"; case GLFW_KEY_9: return "9"; case GLFW_KEY_0: return "0"; case GLFW_KEY_SPACE: return "SPACE"; case GLFW_KEY_MINUS: return "MINUS"; case GLFW_KEY_EQUAL: return "EQUAL"; case GLFW_KEY_LEFT_BRACKET: return "LEFT BRACKET"; case GLFW_KEY_RIGHT_BRACKET: return "RIGHT BRACKET"; case GLFW_KEY_BACKSLASH: return "BACKSLASH"; case GLFW_KEY_SEMICOLON: return "SEMICOLON"; case GLFW_KEY_APOSTROPHE: return "APOSTROPHE"; case GLFW_KEY_GRAVE_ACCENT: return "GRAVE ACCENT"; case GLFW_KEY_COMMA: return "COMMA"; case GLFW_KEY_PERIOD: return "PERIOD"; case GLFW_KEY_SLASH: return "SLASH"; case GLFW_KEY_WORLD_1: return "WORLD 1"; case GLFW_KEY_WORLD_2: return "WORLD 2"; case GLFW_KEY_ESCAPE: return "ESCAPE"; case GLFW_KEY_F1: return "F1"; case GLFW_KEY_F2: return "F2"; case GLFW_KEY_F3: return "F3"; case GLFW_KEY_F4: return "F4"; case GLFW_KEY_F5: return "F5"; case GLFW_KEY_F6: return "F6"; case GLFW_KEY_F7: return "F7"; case GLFW_KEY_F8: return "F8"; case GLFW_KEY_F9: return "F9"; case GLFW_KEY_F10: return "F10"; case GLFW_KEY_F11: return "F11"; case GLFW_KEY_F12: return "F12"; case GLFW_KEY_F13: return "F13"; case GLFW_KEY_F14: return "F14"; case GLFW_KEY_F15: return "F15"; case GLFW_KEY_F16: return "F16"; case GLFW_KEY_F17: return "F17"; case GLFW_KEY_F18: return "F18"; case GLFW_KEY_F19: return "F19"; case GLFW_KEY_F20: return "F20"; case GLFW_KEY_F21: return "F21"; case GLFW_KEY_F22: return "F22"; case GLFW_KEY_F23: return "F23"; case GLFW_KEY_F24: return "F24"; case GLFW_KEY_F25: return "F25"; case GLFW_KEY_UP: return "UP"; case GLFW_KEY_DOWN: return "DOWN"; case GLFW_KEY_LEFT: return "LEFT"; case GLFW_KEY_RIGHT: return "RIGHT"; case GLFW_KEY_LEFT_SHIFT: return "LEFT SHIFT"; case GLFW_KEY_RIGHT_SHIFT: return "RIGHT SHIFT"; case GLFW_KEY_LEFT_CONTROL: return "LEFT CONTROL"; case GLFW_KEY_RIGHT_CONTROL: return "RIGHT CONTROL"; case GLFW_KEY_LEFT_ALT: return "LEFT ALT"; case GLFW_KEY_RIGHT_ALT: return "RIGHT ALT"; case GLFW_KEY_TAB: return "TAB"; case GLFW_KEY_ENTER: return "ENTER"; case GLFW_KEY_BACKSPACE: return "BACKSPACE"; case GLFW_KEY_INSERT: return "INSERT"; case GLFW_KEY_DELETE: return "DELETE"; case GLFW_KEY_PAGE_UP: return "PAGE UP"; case GLFW_KEY_PAGE_DOWN: return "PAGE DOWN"; case GLFW_KEY_HOME: return "HOME"; case GLFW_KEY_END: return "END"; case GLFW_KEY_KP_0: return "KEYPAD 0"; case GLFW_KEY_KP_1: return "KEYPAD 1"; case GLFW_KEY_KP_2: return "KEYPAD 2"; case GLFW_KEY_KP_3: return "KEYPAD 3"; case GLFW_KEY_KP_4: return "KEYPAD 4"; case GLFW_KEY_KP_5: return "KEYPAD 5"; case GLFW_KEY_KP_6: return "KEYPAD 6"; case GLFW_KEY_KP_7: return "KEYPAD 7"; case GLFW_KEY_KP_8: return "KEYPAD 8"; case GLFW_KEY_KP_9: return "KEYPAD 9"; case GLFW_KEY_KP_DIVIDE: return "KEYPAD DIVIDE"; case GLFW_KEY_KP_MULTIPLY: return "KEYPAD MULTPLY"; case GLFW_KEY_KP_SUBTRACT: return "KEYPAD SUBTRACT"; case GLFW_KEY_KP_ADD: return "KEYPAD ADD"; case GLFW_KEY_KP_DECIMAL: return "KEYPAD DECIMAL"; case GLFW_KEY_KP_EQUAL: return "KEYPAD EQUAL"; case GLFW_KEY_KP_ENTER: return "KEYPAD ENTER"; case GLFW_KEY_PRINT_SCREEN: return "PRINT SCREEN"; case GLFW_KEY_NUM_LOCK: return "NUM LOCK"; case GLFW_KEY_CAPS_LOCK: return "CAPS LOCK"; case GLFW_KEY_SCROLL_LOCK: return "SCROLL LOCK"; case GLFW_KEY_PAUSE: return "PAUSE"; case GLFW_KEY_LEFT_SUPER: return "LEFT SUPER"; case GLFW_KEY_RIGHT_SUPER: return "RIGHT SUPER"; case GLFW_KEY_MENU: return "MENU"; default: return "UNKNOWN"; }}static const char* getActionName(int action){ switch (action) { case GLFW_PRESS: { return "pressed"; break; } case GLFW_RELEASE: { return "released"; break; } case GLFW_REPEAT: { return "repeated"; break; } } return "caused unknown action";}static const char* getButtonName(int button){ switch (button) { case GLFW_MOUSE_BUTTON_LEFT: { return "left"; break; } case GLFW_MOUSE_BUTTON_RIGHT: { return "right"; break; } case GLFW_MOUSE_BUTTON_MIDDLE: { return "middle"; break; } default: { static char name[16]; sprintf(name, "%i", button); return name; break; } }}static const char* getModsName(int mods){ static char name[512]; if (mods == 0) { return " no mods"; } name[0] = '\0'; if (mods & GLFW_MOD_SHIFT) { strcat(name, " shift"); } if (mods & GLFW_MOD_CONTROL) { strcat(name, " control"); } if (mods & GLFW_MOD_ALT) { strcat(name, " alt"); } if (mods & GLFW_MOD_SUPER) { strcat(name, " super"); } return name;}static const char* getCharacterString(int codepoint){ static char result[6 + 1]; int length = wctomb(result, codepoint); if (length == -1){ length = 0; } result[length] = '\0'; return result;}static void onErrorCallback(int error, const char* description){ fputs(description, stderr);}static void onKeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods){ if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) glfwSetWindowShouldClose(window, GL_TRUE);}static void onMouseButtonCallback(GLFWwindow* window, int button, int action, int mods){ glfwGetWindowUserPointer(window); printf("%0.3f: Mouse button %i (%s) (with%s) was %s\n", glfwGetTime(), button, getButtonName(button), getModsName(mods), getActionName(action)); if (GLFW_MOUSE_BUTTON_LEFT == button) { if (GLFW_PRESS == action)//按下 { } else if(GLFW_RELEASE == action)//释放 { } }}static void onCursorPositionCallback(GLFWwindow* window, double x, double y){ glfwGetWindowUserPointer(window); printf("%0.3f: Cursor position: %f %f GLPoint:%f,%f\n", glfwGetTime(), x, y);}static void onScrollCallback(GLFWwindow* window, double x, double y){ glfwGetWindowUserPointer(window); printf(" %0.3f: Scroll: %0.3f %0.3f\n", glfwGetTime(), x, y);}static void onCharCallback(GLFWwindow* window, unsigned int codepoint){ glfwGetWindowUserPointer(window); printf("%0.3f: Character 0x%08x (%s) input\n", glfwGetTime(), codepoint, getCharacterString(codepoint));}GLWindow::GLWindow() :m_pWindow(nullptr){}GLWindow::~GLWindow(){}void GLWindow::createWindow(int width, int height, const char* title){ glfwSetErrorCallback(onErrorCallback); if (!glfwInit()) { closeWindow(); } glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); m_pWindow = glfwCreateWindow(width, height, title, nullptr, nullptr); if (!m_pWindow) { closeWindow(); } glfwMakeContextCurrent(m_pWindow); glfwSwapInterval(1); glfwSetMouseButtonCallback(m_pWindow, onMouseButtonCallback); glfwSetCursorPosCallback( m_pWindow, onCursorPositionCallback); glfwSetScrollCallback( m_pWindow, onScrollCallback); glfwSetKeyCallback( m_pWindow, onKeyCallback); glfwSetCharCallback( m_pWindow, onCharCallback); glewInit(); //OpenGL版本信息 const GLubyte* name = glGetString(GL_VENDOR); //返回负责当前OpenGL实现厂商的名字 const GLubyte* biaoshifu = glGetString(GL_RENDERER); //返回一个渲染器标识符,通常是个硬件平台 const GLubyte* OpenGLVersion = glGetString(GL_VERSION); //返回当前OpenGL实现的版本号 printf("OpenGL实现厂商的名字:%s\n", name); printf("渲染器标识符:%s\n", biaoshifu); printf("OOpenGL实现的版本号:%s\n", OpenGLVersion);}void GLWindow::closeWindow(){ if (m_pWindow) { glfwDestroyWindow(m_pWindow); } glfwTerminate(); exit(EXIT_SUCCESS);}bool GLWindow::windowShouldClose(){ return glfwWindowShouldClose(m_pWindow) != 0;}void GLWindow::getFramebufferSize(int &width, int &height){ glfwGetFramebufferSize(m_pWindow, &width, &height);}void GLWindow::pollEvents(){ glfwSwapBuffers(m_pWindow); glfwPollEvents();}
0 0
- Qt OpenGL----创建openGL窗口
- Qt 创建OpenGL窗口
- 创建OpenGL窗口
- 【Modern OpenGL】创建窗口
- [OpenGL]创建一个窗口
- OpenGL 窗口创建
- opengl 创建窗口
- 【OpenGL】 创建窗口
- OpenGL 创建一个CEGUI窗口
- Windows下创建OpenGL窗口
- opengl 教程(1) 创建窗口
- 创建第一个OpenGL窗口
- 【OpenGL】创建窗口笔记拾遗
- OpenGL中创建一个窗口
- xlib创建一个openGL简单窗口
- 【菜鸟也能玩转OpenGL】创建Windows窗口
- Opengl备忘--创建一个简单GLFW窗口
- OpenGL入门(一):创建一个窗口
- ViewPager+Fragment取消预加载(延迟加载)
- ifndef/define/endif作用和用法
- 关于空间域图像增强中的模板算子理解
- C 标准库 bsearch 函数的实现
- MVVM中轻松实现Command绑定(三)任意事件的Command
- 创建OpenGL窗口
- 【python】python中的多态与duck typing
- 【java】多线程
- JaveSE-JTable 表头、数据居中显示
- Swift:表格视图单元格多选
- Struts2基础复习系列(4)
- 取石子(一)
- CentOS 6.5 64 安装多个mysql 服务 -阿里云服务器ECS
- MyBatis多参数传递的四种方式