OpenGL入门(一):第一个OpenGL程序

OpenGL

1、OpenGL简介

OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specification)。

OpenGL规范严格规定了每个函数该如何执行,以及它们的输出值。至于内部具体每个函数是如何实现(Implement)的,将由OpenGL库的开发者自行决定(注:这里开发者是指编写OpenGL库的人)。因为OpenGL规范并没有规定实现的细节,具体的OpenGL库允许使用不同的实现,只要其功能和结果与规范相匹配(亦即,作为用户不会感受到功能上的差异)。

实际的OpenGL库的开发者通常是显卡的生产商。你购买的显卡所支持的OpenGL版本都为这个系列的显卡专门开发的。当你使用Apple系统的时候,OpenGL库是由Apple自身维护的。在Linux下,有显卡生产商提供的OpenGL库,也有一些爱好者改编的版本。这也意味着任何时候OpenGL库表现的行为与规范规定的不一致时,基本都是库的开发者留下的bug。

2、准备运行程序的环境

网络上关于OpenGL的介绍很多,官方的书籍和网站说的也很详细,并且全部都是免费的,大家可以慢慢的了解。本人认为看书比较枯燥,我们还是从实战中来慢慢的了解OpenGL吧。

在我们画出出色的效果之前,首先要做的就是创建一个OpenGL上下文(Context)和一个用于显示的窗口。然而,这些操作在每个系统上都是不一样的,OpenGL有目的地从这些操作抽象(Abstract)出去。这意味着我们不得不自己处理创建窗口,定义OpenGL上下文以及处理用户输入。

幸有一些库已经提供了我们所需的功能,其中一部分是特别针对OpenGL的。这些库节省了我们书写操作系统相关代码的时间,提供给我们一个窗口和上下文用来渲染。最流行的几个库有GLUT,SDL,SFML和GLFW。在教程里我们将使用GLFW。为了后续使用的方面(zhuangbi),我们使用cmake自己编译glfw,那么接下来,我们就先安装cmake。

2.1cmake的安装

cmake的下载官网:https://cmake.org/download/

可能会有点慢,没办法,大环境所致,为了学习,老老实实等等吧。

直接下载一个最新版,安装就行了,个人感觉没啥好注意的。

2.2glfw的安装

 

2.2.1glfw下载

从glfw官方网站下载安装包。

网址:https://www.glfw.org/download.html

解压出来是这样的

2.2.2使用cmake编译glfw

打开cmake,输入源代码的地址,在同一目录下建立一个编译的文件夹。

点击configure,选择相应的平台进行编译。我是选择的win32,因为后面的全都是32位的。选择默认的配置。

再次点击configure,再点击generate。

再点击open project 

生成解决方案。就可以得到lib。

2.3glew的安装

因为我们用c++开发所以就需要这个。OpenGL扩展库是个简单的工具,用于帮助C/C++开发者初始化扩展(OpenGL扩展功能)并书写可移植的应用程序。

官方网站:http://glew.sourceforge.net/

图方便,就不编译了,直接用就行了

 

2.3第一个OpenGL代码



#include <iostream>

// GLEW
#define GLEW_STATIC
#include <GL/glew.h>

// GLFW
#include <GLFW/glfw3.h>



// Function prototypes
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode);

// Window dimensions
const GLuint WIDTH = 800, HEIGHT = 600;

// The MAIN function, from here we start the application and run the game loop
int main()
{
    std::cout << "Starting GLFW context, OpenGL 3.3" << std::endl;
    // Init GLFW
    glfwInit();
    // Set all the required options for GLFW
    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 GLFWwindow object that we can use for GLFW's functions
    GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "LearnOpenGL", nullptr, nullptr);
    if (window == nullptr)
    {
        std::cout << "Failed to create GLFW window" << std::endl;
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);
    // Set the required callback functions
    glfwSetKeyCallback(window, key_callback);

    // Set this to true so GLEW knows to use a modern approach to retrieving function pointers and extensions
    glewExperimental = GL_TRUE;
    // Initialize GLEW to setup the OpenGL Function pointers
    if (glewInit() != GLEW_OK)
    {
        std::cout << "Failed to initialize GLEW" << std::endl;
        return -1;
    }

    // Define the viewport dimensions
    int width, height;
    glfwGetFramebufferSize(window, &width, &height);
    glViewport(0, 0, width, height);

    // Game loop
    while (!glfwWindowShouldClose(window))
    {
        // Check if any events have been activiated (key pressed, mouse moved etc.) and call corresponding response functions
        glfwPollEvents();

        // Render
        // Clear the colorbuffer
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);

        // Swap the screen buffers
        glfwSwapBuffers(window);
    }

    // Terminate GLFW, clearing any resources allocated by GLFW.
    glfwTerminate();
    return 0;
}

// Is called whenever a key is pressed/released via GLFW
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
{
    std::cout << key << std::endl;
    if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
        glfwSetWindowShouldClose(window, GL_TRUE);
}

在virtual stdio 2019中新建一个c++项目。

接下来几个设置就很关键,只要理解了这个依赖就行了。这个目录是GLFW的包含目录。

我将依赖库和头文件单独放到一个文件夹下面,包括glfw和glew的。

然后就是项目的配置。

接下来直接就可以直接运行了。运行结果如下:

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: OpenGL超级宝典第七版源码是OpenGL编程的一个重要资料。该源码提供了一系列OpenGL实现的代码,涵盖了各种不同的OpenGL功能,包括基本渲染、矩阵操作、纹理贴图、着色器、光照、投影变换等方面的知识。 该源码的编写可帮助初学者更加深入地理解OpenGL的实现原理和机制,并且能够帮助开发者更加高效地进行OpenGL开发。在学习之初,可以通过阅读源码,理解OpenGL的概念、操作,同时也能够加深对于OpenGL的理解,掌握如何进行OpenGL编程。对于已经具备一定OpenGL经验的开发者,该源码也可以作为参考资料,提高OpenGL的开发水平及编写效率。 总的来说,OpenGL超级宝典第七版源码是一份非常有价值的资料,可供初学者、有经验的开发者和教师使用。通过学习该源码,开发者可以更加全面地了解OpenGL的工作原理,从而编写出更加高效、可靠的OpenGL应用程序,同时也可让用户获得更好的使用体验。 ### 回答2: OpenGL超级宝典第七版是一本OpenGL编程的优秀书籍,该书提供了详细的OpenGL编程实例及源码。书中代码使用了OpenGL 4.3版本进行编写,包括了OpenGL的基本概念、渲染流水线、光照、阴影、几何体绘制、纹理、高级技巧等内容。 该书源码共包含20个实例,从简单到复杂逐渐深入,涵盖了OpenGL编程的基本知识点,对OpenGL编程入门有很好的指导作用。该书源码使用了C++语言进行编写,注释清晰易懂,让读者能够更好地理解OpenGL编程的原理。 此外,源码支持跨平台编译,可以运行在Windows、Linux和Mac OS X等系统上。通过阅读书中实例代码,读者可以更加深入地了解OpenGL编程的各个方面,提高OpenGL编程能力。 综上所述,OpenGL超级宝典第七版的源码是OpenGL编程入门的良好资源,通过学习源码可以更好地理解OpenGL编程,提高OpenGL编程能力。 ### 回答3: OpenGL超级宝典第七版源码集合了OpenGL的基本概念、API和应用程序设计,以及各种实用技巧、优化策略和代码样例。源码主要包含了OpenGL的核心模块、常用工具和实践案例等内容。 通过学习OpenGL超级宝典第七版源码,可以深入了解OpenGL的原理和应用,掌握OpenGL编程的基本方法和技巧,从而提高OpenGL应用程序的开发效率和品质。 具体来说,OpenGL超级宝典第七版源码包括了如下内容: 1. OpenGL的基本概念和API:包括OpenGL的渲染管线、图形渲染的基本流程、OpenGL的渲染状态和矩阵变换等。 2. OpenGL的核心模块:包括OpenGL的渲染缓冲区、纹理、着色器和帧缓冲等核心模块的实现和应用。 3. OpenGL的常用工具:包括OpenGL的调试工具、性能分析工具和开发工具等。 4. OpenGL的实践案例:包括OpenGL的2D和3D图形绘制、游戏开发、虚拟现实和GPU计算等实践案例。 总之,OpenGL超级宝典第七版源码是OpenGL编程学习和开发的重要资源,为OpenGL初学者和开发者提供了丰富的参考资料和实践经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值