OpenGL

今天从零开始,连续写关于在Windows下用VS2015开发学习OpenGL的过程,实战记录!!

手把手实战指导,每一步都是图文并茂详解,不怕你学不会,就怕你不想动!

第一步:首先你要下载并安装VS2015版本。

今后的相关连载文章或源码,都会以这个版本展开。

VS2015的具体下载和安装,这里就不讲了,网上搜一下应该很多。

第二步:准备好OpenGL的相关库,主要有两个GLFW和GLAD。

GLFW:是一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文,定义窗口参数以及处理用户输入,这正是我们需要的。

GLAD:由于OpenGL驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。所以任务就落在了开发者身上。幸运的是,有些库能简化此过程,其中GLAD是目前最新,也是最流行的库。

A:如何获得GLFW ?你可以从这个地址进行下载 

  (点击打开)  http://www.glfw.org/download.html

GLFW的官网提供了Source包和编译好的Binaries文件,我们选择下载(32-bit Windows binaries)。

为什么选择32-bit位的而不是64-bit位的呢?这里它一定要和你的VS2015的工程x86对应上。x86表示32位。

第三步:创建一个C++的工程,用来准备我们的测试。

打开安装好的VS2015,我们来创建一个名称叫”TestOpenGL“的C++“空项目”。

然后在项目名称上右键菜单,打开项目所在的目录。

然后,在项目目录下创建两个文件夹,分别是。Includes 和 Libs。像下图这样。

把在第二步下载好的GLFW的压缩包(glfw-3.2.1.bin.WIN32.zip)打开。

(a)把压缩包中的  ../include/GLFW/ 中的 glfw3.h 复制到上面在项目中创建好的 Inlcudes 文件夹中。

(b)把压缩包中的  ../lib-vc2015/ 中的 glfw3.lib 复制到上面在项目中创建好的 Libs 文件夹中。

回到VS2015软件界面中,在工程TestOpenGL名称上右键,选择《属性》。在弹出的“属性”界面中,选择C++目录。

在“包含目录”中添加 Inlcudes 文件夹目录。在“库目录”中添加 Libs 文件夹。如下图所示:

然后继续,左边点击链接器,输入,附加依赖项里输入:opengl32.lib   glfw3.lib 。

点击确定,到这里GLFW的环境已经布署完毕。接下来开始布署第二步提到的GLAD。

第三步:准备和布署GLAD。

A:如何获取GLAD ? 我们可以在它的一个在线服务网站来获得。(点击打开)http://glad.dav1d.de/

如上图所示,在API选择Version3.3,在Profile选项 Core。

然后下面的Options保证Generate a loader是勾上的。

点击 GENERATE 来创建和生成所要的包。

点击glad.zip下载到电脑。打开压缩包所下图所示。

(a)打开压缩包,把include中所有的文件复制到我们的Includes中

(b)把src中的文件 glad.c 复制到项目目录下,如下图所示:

然后,回到VS2015软件界面中。在源文件上右键,添加现有项,把glad.c添加进去。

到这里,GLFW和GLAD就全部搞完了。

最后一步,就是见证奇迹的时刻了!!!!

创建一个 mian.cpp 输入以下测试内容,先不用管这些代码有什么用。看不懂没关系后边会讲解。

现在主要是为了测试并启动openGL渲染窗口,来验证开发环境是否正确无误。

#include "Includes\glad\glad.h"  
#include "Includes\glfw3.h" 
 
#include <iostream>
 
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
void processInput(GLFWwindow *window);
 
// settings
const unsigned int SCR_WIDTH = 800;
const unsigned int SCR_HEIGHT = 600;
 
int main()
{
    // glfw: initialize and configure
    // ------------------------------
    glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
 
#ifdef __APPLE__
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // uncomment this statement to fix compilation on OS X
#endif
 
                                                         // glfw window creation
                                                         // --------------------
    GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", NULL, NULL);
    if (window == NULL)
    {
        std::cout << "Failed to create GLFW window" << std::endl;
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);
    glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
 
    // glad: load all OpenGL function pointers
    // ---------------------------------------
    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
    {
        std::cout << "Failed to initialize GLAD" << std::endl;
        return -1;
    }
 
    // render loop
    // -----------
    while (!glfwWindowShouldClose(window))
    {
        // input
        // -----
        processInput(window);
 
        // render
        // ------
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);
 
        // glfw: swap buffers and poll IO events (keys pressed/released, mouse moved etc.)
        // -------------------------------------------------------------------------------
        glfwSwapBuffers(window);
        glfwPollEvents();
    }
 
    // glfw: terminate, clearing all previously allocated GLFW resources.
    // ------------------------------------------------------------------
    glfwTerminate();
    return 0;
}
 
// process all input: query GLFW whether relevant keys are pressed/released this frame and react accordingly
// ---------------------------------------------------------------------------------------------------------
void processInput(GLFWwindow *window)
{
    if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
        glfwSetWindowShouldClose(window, true);
}
 
// glfw: whenever the window size changed (by OS or user resize) this callback function executes
// ---------------------------------------------------------------------------------------------
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
    // make sure the viewport matches the new window dimensions; note that width and 
    // height will be significantly larger than specified on retina displays.
    glViewport(0, 0, width, height);
}
调试运行,如果不出现意外,你的窗口应该如图所示,大功告成!!!

搞到这里,想想还是有些小激动,虽然是个小小开始,这就是迈向成功的一大步!

大门已经开启,接下来,是时候开始表演真正的技术了!!

从零开始真正进入OpengGL的3D世界!!
--------------------- 

原文:https://blog.csdn.net/sjt223857130/article/details/80037749 

NEHE的OPENGL教程 第42课 多视窗口… NEHE的OPENGL教程 第42课 多视窗口… NeHe的OPENGL中文教程:第41课 体… NeHe的OPENGL中文教程:第40课 绳… NeHe的OPENGL中文教程:第39课 物… NeHe的OPENGL中文教程:第39课 物… NeHe的OPENGL中文教程:第38课 从… NeHe的OPENGL中文教程:第37课 卡… 愚人节十大IT假新闻:Opera浏览器… NeHe的OPENGL中文教程:第36课 放… NeHe的OPENGL中文教程:第35课 AVI… NeHe的OPENGL中文教程:第35课 AVI… NeHe的OPENGL中文教程:第34课 从… NeHe的OPENGL中文教程:第33课 加… NeHe的OPENGL中文教程:第32课 Alp… NeHe的OPENGL中文教程:第32课 Alp… NeHe的OPENGL中文教程:第32课 Alp… NeHe的OPENGL中文教程:第31课 模… NEHE的OPENGL中文教程:第30课 碰… NEHE的OPENGL中文教程:第30课 碰… NeHe的OPENGL中文教程:第29课 Bli… NeHe的OPENGL中文教程:第28课 贝… NeHe的OPENGL中文教程:第27课 影… NeHe的OPENGL中文教程:第26课剪裁… NeHe的OPENGL中文教程:第25课 变… NeHe的OPENGL中文教程:第24课 TAG… NeHe的OPENGL中文教程:第23课 球… NeHe的OPENGL中文教程:第22课 凸… NeHe的OPENGL中文教程:第22课 凸… NeHe的OPENGL中文教程:第21课 反… NeHe的OPENGL中文教程:第21课 反… NeHe的OPENGL中文教程:第20课 蒙… NeHe的OPENGL中文教程:第19课 粒… NeHe的OPENGL中文教程:第18课 二… NeHe的OPENGL中文教程:第17课 2D… NeHe的OPENGL中文教程:第16课 雾 NeHe的OPENGL中文教程:第15课 图… NeHe的OPENGL中文教程:第14课 图… NeHe的OPENGL中文教程:第13课 位… NeHe的OPENGL中文教程:第12课 显… NeHe的OPENGL中文教程:第11课 飘… NeHe的OPENGL中文教程:第十课 漫… NeHe的OPENGL中文教程:第九课 漂… NeHe的OPENGL中文教程:第八课 Alp… NeHe的OPENGL中文教程:第七课 纹… NeHe的OPENGL中文教程:第七课 纹… NeHe的OPENGL中文教程:第六课 纹… NeHe的OPENGL中文教程:第五课 向3… NeHe的OPENGL中文教程:第四课 旋… NeHe的OPENGL中文教程:第三课 着… NeHe的OPENGL中文教程:第二课 多… NeHe的OPENGL中文教程:第一课 新… NeHe的OPENGL中文教程:第一课 新… DirectX与OpenGL方面的经典电子书… VC++ 6.0下OpengGL配置以及glut配… 怎样开始学习OpenGL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值