任务

开始对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<GLFW\glfw3.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)

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

转载于:https://www.cnblogs.com/Ziyo/p/9630855.html

OpenGL--------第一个窗口相关推荐

  1. OpenGL noperspective在窗口空间中线性插值的实例

    OpenGL noperspective在窗口空间中线性插值 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <vmath.h> #i ...

  2. 4.2第一个窗口程序

    创建Win32工程和MessageBox函数 前面讲的程序都是使用控制台界面来接受输入.显示输出的.要想使用窗口界面与用户交互必须首先创建一个Win32工程. (1)运行VC++6.0,选择菜单命令& ...

  3. C#(VS2019)窗体应用程序之第一个窗口

    学习在VS2019上使用C#写窗体应用程序 打开VS2019,点最下面的创建新项目 选择 Windows窗体应用,配置新项目 此时会开始一个新的界面 在每一个 Windows 窗体应用程序的项目文件夹 ...

  4. Windows程序设计设计第一个窗口

    窗口调用的函数的简短解释: 来自小甲鱼的窗口模板: /* -------------------------------------------------------------------MyWi ...

  5. Eclipse中创建第一个窗口程序

      之前在VS中用C#做程序开发时,做的最多的是Winform窗口.现在学习在Eclipse中用java编程序,也希望尽快学习如何写窗口程序,但是在选择Eclipse做开发工具的时候就听说Eclips ...

  6. OpenGL的glViewPort窗口设置函数实现分屏

    OpenGL的glViewPort窗口设置函数实现分屏 之前实现过全景图片查看(OpenGL的几何变换3之内观察全景图),那么我们需要进行分屏该如何实现呢?如下图: 没错就是以前提过的glViewPo ...

  7. openGL学习笔记_配置开发环境第一个窗口

    https://learnopengl-cn.github.io/ openGL学习网站 开发语言  C++ https://www.khronos.org/registry/OpenGL/index ...

  8. 使用OpenGL,在窗口中绘制两个立体图形,位置分别为窗口的左侧和右侧,添加光照,两个图形分别绕x轴和y轴旋转。

    总体思路: 第一步,使用viewpoint函数来建立两个分割的窗口 第二步,在两个视口分别绘制带光照效果的立体图形 第三步,使用进栈出栈函数和Rotatef函数实现两图像各自的旋转 关于glPushM ...

  9. OpenGL入门:窗口开启、改变窗口背景颜色

    OpenGL入门 开启一个窗口: 运用OpenGL在窗口中绘制图形 显示一个窗口 利用OpenGL修改窗口背景颜色 改变颜色的闪烁 开启一个窗口: // Include for GLFW header ...

  10. 【OpenGL】八、初始化 OpenGL 渲染环境 ( 导入 OpenGL 头文件 | 链接 OpenGL 库 | 将窗口设置为 OpenGL 窗口 | 设置像素格式描述符 | 渲染绘制 ) ★

    文章目录 一.导入 OpenGL 的两个头文件 二.链接 OpenGL 库 三.将 Windows 桌面窗口改成 OpenGL 窗口 四.获取窗口设备 五.设置像素格式描述符 六.设置像素格式 七.创 ...

最新文章

  1. PWA项目实战分享(听书APP)
  2. python 内部函数,以及lambda,filter,map等内置函数
  3. php求未知数怎么求,PHP的-输入未知数的字段到MySQL-为此的最佳...
  4. python数据类型详解(全面)
  5. oracle基础教程实验,Oracle 11g 基础教程与实验指导(配光盘)(清华电脑学堂)
  6. Unity SRP自定义渲染管线 -- 5.Directional Shadows
  7. 这可能是最生动的加密相关科普文章
  8. opencv 边缘平滑_基于OpenCV的车道检测实现(一)
  9. android 系统联系人,Android读取系统联系人
  10. C++中对象初始化赋值是否需要调用operator=函数
  11. 国产操作系统有哪些,你知道吗?
  12. LTE: 小区特定参考信号功率与RRU发射功率的计算
  13. PHP微信公众号开发——群发消息
  14. 使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网)
  15. 深入了解Xcode 7——代码编辑
  16. 【ha知识两问】ha软件是什么?ha软件用途有哪些?
  17. centos安装NIS
  18. 闲谈安全测试左移三板斧
  19. 联想T430 安装msata接口的SSD固态硬盘
  20. C++数组练习题(一)

热门文章

  1. Java的企业级开发项目--OA办公系统
  2. OpenCV-Python教程:图像金字塔
  3. maya python window_安装了Anaconda之后,Maya运行报错,Python 找不到 Maya 的 Python 模块...
  4. 游戏计算机中有缓冲内存吗,内存再大都不行!CPU缓存竟这么重要
  5. SWA(随机权重平均)
  6. 点到平面的距离、向量与平面夹角
  7. c语言取地址和间接引用
  8. 耗纸古文风之四--登高
  9. K3 CLOUD计划方案-集中计划与协同计划的区别
  10. .Net大型购物平台源码