zoukankan      html  css  js  c++  java
  • OpenGL学习——搭建OpenGL运行环境——生成一个空白视口——基于GLFW&GLEW

        最近学习OpenGL,读OpenGL宝典一头蒙,各种gl函数不知所云。逐决定先搭OpenGL运行环境,详细如下。

        1、首先OpenGL是什么?是一个标准规范,是一个巨大的状态机,并无具体实现,大多数实现都是由显卡厂商编写的。

            创建一个OpenGL上下文(Context)和一个用于显示的窗口,这个很底层。当然有一些库可以选择,这里选择用GLFW。

            运行环境为win10, vs2013。

        2、下载编译GLFW库,从库源码入手编译静态库,免得有兼容问题。

            下载地址:https://www.glfw.org/download.html

            github:https://github.com/glfw/glfw/tree/master

            下载后

         3、用cmake编译GLFW静态库。

              cmake下载地址:https://cmake.org/download/

        运行cmake-gui.exe

              配置如下:

              

                 先点 Configure, 再点Generate,多点几下,没有红色报错即可。

                 进入目录 D:codeOpenGLglfwglfw-masteruild , 用vs2013打开 GLFW.sln,仅编译 glfw 工程即可,其它无识。 生成静态库 buildsrcDebugglfw3.lib, include目录是GLFW的头文件;‘

              

              把glfw3.lib和头文件整理到一个新止录,prebuilt,如图:

              

    3、下载编译GLEW,用于管理OpenGL函数指针;

         下载地址:http://glew.sourceforge.net/index.html

         下载zip版本 glew-2.1.0.zip,解压依然用cmake编译,配置如下:

         

           用vs2013打开glew.sln,仅编译glew_s工程,生成静态库libglew32d.lib

           

           同样整理静态库和头文件到prebuilt,如图:

           

     4、新建空白C++工程,取名为 hi-opengl,设置工程属性如图,引入GLFW、GLEW的头文件目录和静态库目录:

          

         添加链接器,加入此三项 opengl32.lib;libglew32d.lib;glfw3.lib;   如图:

         

     5、开始编定OpenGL空白窗口代码。

          建一个空白cpp类,名为hi.cpp,代码如下:

          依次是:  初始化glfw、创建glfw窗口、初始化glew、从glew的window取出宽度和高度、调用gl的视口、添加游戏主循环、检查事件、opengl清屏调用、交换缓充区、结束。

          

    // GLEW
    #define GLEW_STATIC
    #include <GL/glew.h>
    // GLFW
    #include <GLFW/glfw3.h>
    #include <iostream>
    
    int main(){
        // glfw init
        glfwInit();
        glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
        glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
        glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
        glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
    
        //create a glfw window
        GLFWwindow *window = glfwCreateWindow(640, 360, "hi", nullptr, nullptr);
        if (window == nullptr){
            std::cout << "create glfw window failed..." << std::endl;
            glfwTerminate();
            return -1;
        }
        glfwMakeContextCurrent(window);//set current window
    
        // glew init
         glewExperimental = GL_TRUE;
        if (glewInit() != GLEW_OK){
            std::cout << "glew init failed..." << std::endl;
            return -1;
        }
    
        //get width and height from glfw window
        int width, height;
        glfwGetFramebufferSize(window, &width, &height);
        //define the glViewport
        glViewport(0, 0, width, height);
    
        //add the game loop
        while (!glfwWindowShouldClose(window)){
            //check event
            glfwPollEvents();
            
            //your OpenGL code logical
            //now clear window
            glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
            glClear(GL_COLOR_BUFFER_BIT);//the gl color buffer bit
    
            //swap buffer
            glfwSwapBuffers(window);
        }
    
        //the end, glfw window has been closed
        glfwTerminate();
        return 0;
    }

    6、运行效果,得到一个蓝绿低的空白窗口,如果报错就自行检查以上各步骤。

         

    7、有这个开始,可以尽情接受各种OpenGL函数的制裁!! 

           

              

  • 相关阅读:
    通过登入IP记录Linux所有用户登录所操作的日志
    PHP写的异步高并发服务器,基于libevent
    PHP event 事件机制
    PHP高级工程师的要求
    TBS 手册 --phpv 翻译
    两局域网互联解决方案
    比ngx_http_substitutions_filter_module 更强大的替换模块sregex的replace-filter-nginx-module
    直播平台虚拟币与人民币的关系
    查询出来的东西异步缓存
    如何解决GBK的编码的文件中的中文转换成为UTF-8编码的文件而且不乱码
  • 原文地址:https://www.cnblogs.com/xingchong/p/12051704.html
Copyright © 2011-2022 走看看