zoukankan      html  css  js  c++  java
  • OpenGL--------第一个窗口

    任务

          开始对OpenGL的学习,今天的任务是在VS2017中配置OpenGL的库(GLFW,GLEW)并创建第一个窗口。

          

    搭建环境

          1.获取GLFW库

                从官方网站下载预编译的二进制版本和相应头文件,也可以下载源码包再进行编译(不建议)。

          2.将GLFW链接进工程

                工程属性(Project Properties) --> VC++目录 --> 包含目录/库目录 (如下图1)

                将include目录(包含glfw.h)的地址加入包含目录中

                将库目录(包含glfw.lib)的地址加入库目录中

                工程属性-->连接器-->输入-->附加依赖项-->将库名称加入附加依赖项中(如下图2)

    【图1】

    【图2】

          3.获取GLEW

                从官方网站下载预编译的二进制版本和相应头文件,也可以下载源码包再进行编译(不建议)。

          4.将GLEW链接进工程-----------同2

          5.将glew32s.lib连接进工程----Visual Studio默认安装opengl32.lib库,直接加入附加依赖项即可。

    代码实现

     1 // GLEW 使用静态链接库
     2 #define GLEW_STATIC
     3 #include<GL/glew.h>
     4 
     5 // GLFW
     6 #include<GLFWglfw3.h>
     7 
     8 #include<iostream>
     9 using namespace std;
    10 
    11 int main()
    12 {
    13     glewInit();
    14     // 初始化GLFW
    15     glfwInit();
    16     // 配置GLFW--告诉GLFW使用OpenGL版本为3.3
    17     // 确定主版本号(Mjaor)
    18     glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    19     // 确定副版本号 (Minor)
    20     glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    21     // 明确告诉GLFW使用核心模式,使用旧版函数将导致invalid operation(无效操作)
    22     glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    23     // 不允许用户调整窗口大小
    24     glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
    25 
    26     // 创建窗口对象,设定窗口宽,高,名称  nullptr--空指针
    27     GLFWwindow* window = glfwCreateWindow(800, 600, "Hello,OpenGL", nullptr, nullptr);
    28     if (window == nullptr)
    29     {
    30         std::cout << "Failed to create GLFW window" << std::endl;
    31         glfwTerminate();
    32         return -1;
    33     }
    34 
    35 
    36     // 初始化GLEW
    37     // 设置glewExperimental值为GL_TURE,是的GLEW在管理OpenGL的函数指针时更多使用现代化技术
    38     // 如果设值为GL_FALSE的话可能会在使用OpenGL的核心模式时出现问题
    39     glewExperimental = GL_TRUE;
    40     if (glewInit() != GLEW_OK)
    41     {
    42         std::cout << "Faild to initialize GLEW" << std::endl;
    43         return -1;
    44     }
    45 
    46     // 获取窗口尺寸,大小
    47     int width, height;
    48     glfwGetFramebufferSize(window, &width, &height);
    49     //  告诉OpenGL渲染窗口的尺寸大小--前两个参数控制窗口左下角的位置--取值范围[-1,1],映射到屏幕坐标[0, 800], [0,600]
    50     //                                后两个参数控制渲染窗口的宽度和高度
    51     glViewport(0, 0, width, height);
    52 
    53     // glfwWindowShouldClose 检查GLFW是否被要求退出
    54     while (!glfwWindowShouldClose(window))
    55     {
    56         // 检测事件触发
    57         glfwPollEvents();
    58         // 交换颜色缓冲(时一个储存GLFW窗口每一个像素颜色的大缓冲),在迭代中被用作绘制,并将输出显示在屏幕
    59         glfwSwapBuffers(window);
    60     }
    61 
    62     glfwTerminate();
    63     return 0;
    64 }

    错误总结

          1.获取glfw,glew库时,没必要下载源代码使用cmake编译,费时且效果不佳。

          2.添加glew依赖项,库目录路径不对,报错如下。

           

          3.与其他库的使用冲突,

            解决:工程-->属性-->连接器-->输入-->忽略特定默认库   加入冲突的默认库名称

            

          4.未链接opengl32.lib库,报错如下。

           

          5.调试时,窗口闪退,报错类似如下。(部分解决)

           

           解决:调试-->选项和设置 -->调试-->常规-->勾上启动原服务器支持-->常规-->符号-->勾选Microsoft符号服务器

                      原方案(https://blog.csdn.net/acliyu/article/details/78795869)

           仍存在问题,如下,暂不能解决。

          

  • 相关阅读:
    Leetcode: 二分搜索法
    ALM 中查看某个 test 的更改 history 历史
    Python: map() and reduce()
    如何查询注册表的值及 Powershell 应用
    使用 Windows PowerShell 实现 Web UI 自动化 (转)
    zhuan: WAN simulating tool
    Robot Framework 1
    Enable Coded UI Testing of Your Controls
    NetBeans GUI tests on Jenkins + Windows (转)
    (转)JDK 1.8 预览版Lambda语法分析
  • 原文地址:https://www.cnblogs.com/Ziyo/p/9630855.html
Copyright © 2011-2022 走看看