OpenGL学习——搭建OpenGL运行环境——生成一个空白视口——基于GLFW&GLEW

摘要:
最近,我学习了OpenGL。我被OpenGL宝典蒙蔽了双眼,我不知道各种gl功能。决定首先构建OpenGL运行环境,如下所述。创建OpenGL上下文和显示窗口是非常低级的。当然,有一些图书馆可供选择。在这里,选择GLFW。运行环境为win10,vs2013。下载地址:https://www.glfw.org/download.htmlgithub : https://github.com/glfw/glfw/tree/master下载后,3。使用cmake编译GLFW静态库。制作下载地址:https://cmake.org/download/运行cmake-gui.exe进行如下配置:首先单击“配置”,然后单击“生成”,然后再单击几次。没有红色错误。

    最近学习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

        下载后OpenGL学习——搭建OpenGL运行环境——生成一个空白视口——基于GLFW&GLEW第1张

     3、用cmake编译GLFW静态库。

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

    OpenGL学习——搭建OpenGL运行环境——生成一个空白视口——基于GLFW&GLEW第2张运行cmake-gui.exe

          配置如下:

          OpenGL学习——搭建OpenGL运行环境——生成一个空白视口——基于GLFW&GLEW第3张

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

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

          OpenGL学习——搭建OpenGL运行环境——生成一个空白视口——基于GLFW&GLEW第4张

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

          OpenGL学习——搭建OpenGL运行环境——生成一个空白视口——基于GLFW&GLEW第5张

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

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

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

     OpenGL学习——搭建OpenGL运行环境——生成一个空白视口——基于GLFW&GLEW第6张

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

       OpenGL学习——搭建OpenGL运行环境——生成一个空白视口——基于GLFW&GLEW第7张

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

       OpenGL学习——搭建OpenGL运行环境——生成一个空白视口——基于GLFW&GLEW第8张

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

      OpenGL学习——搭建OpenGL运行环境——生成一个空白视口——基于GLFW&GLEW第9张

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

     OpenGL学习——搭建OpenGL运行环境——生成一个空白视口——基于GLFW&GLEW第10张

 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、运行效果,得到一个蓝绿低的空白窗口,如果报错就自行检查以上各步骤。

     OpenGL学习——搭建OpenGL运行环境——生成一个空白视口——基于GLFW&amp;GLEW第11张

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

       

          

免责声明:文章转载自《OpenGL学习——搭建OpenGL运行环境——生成一个空白视口——基于GLFW&amp;amp;GLEW》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇在VisualStudio调试器中使用内存窗口和查看内存分布企业如何部署开源邮箱系统?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[转]linux共享库位置配置(LD_LIBRARY_PATH环境变量 或者 更改/etc/lld.so.conf

Linux 运行的时候,是如何管理共享库(*.so)的?在 Linux 下面,共享库的寻找和加载是由 /lib/ld.so 实现的。 ld.so 在标准路经(/lib, /usr/lib) 中寻找应用程序用到的共享库。 但是,如果需要用到的共享库在非标准路经,ld.so 怎么找到它呢? 目前,Linux 通用的做法是将非标准路经加入 /etc/ld.so....

FFmpeg解码H264及swscale缩放详解

原文  http://blog.csdn.net/gubenpeiyuan/article/details/19548019 主题 FFmpeg 本文概要:         本文介绍著名开源音视频编解码库ffmpeg如何解码h264码流,比较详细阐述了其h264码流输入过程,解码原理,解码过程。同时,大部分应用环境下,以原始码流视频大小展示并不是...

coredump

1. core文件的简单介绍 在一个程序崩溃时,它一般会在指定目录下生成一个core文件。core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的。 2. 开启或关闭core文件的生成 用以下命令来阻止系统生成core文件:ulimit -c 0下面的命令可以检查生成core文件的选项是否打开:ulimit -a该命令将显示所有的用户定制,其中...

QGIS的编译 (Windows)

一、资源 https://github.com/qgis/QGIS https://github.com/qgis/QGIS/blob/master/INSTALL.md 二、编译需求 Following a summary of the required dependencies for building: Required build tools:...

Android OpenGL ES(七)基本几何图形定义 .

在前面Android OpenGL ES(六):创建实例应用OpenGLDemos程序框架我们创建了示例程序的基本框架,并提供了一个“Hello World”示例,将屏幕显示为红色。 本例介绍OpenGL ES 3D图形库支持的几种基本几何图形,通常二维图形库可以绘制点,线,多边形,圆弧,路径等等。OpenGL ES 支持绘制的基本几何图形分为三类:点,线...

OpenGL的glViewport视口变换函数详解[转]

调用glViewPort函数来决定视见区域,告诉OpenGL应把渲染之后的图形绘制在窗体的哪个部位。当视见区域是整个窗体时,OpenGL将把渲染结果绘制到整个窗口。 voidglViewPort(GLInt x; GLInty; GLSizeiWidth; GLSizeiHeight);     其中,参数X,Y指定了视见区域的左下角在窗口中的位置,一般情...