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<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--------第一个窗口相关推荐
- OpenGL noperspective在窗口空间中线性插值的实例
OpenGL noperspective在窗口空间中线性插值 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <vmath.h> #i ...
- 4.2第一个窗口程序
创建Win32工程和MessageBox函数 前面讲的程序都是使用控制台界面来接受输入.显示输出的.要想使用窗口界面与用户交互必须首先创建一个Win32工程. (1)运行VC++6.0,选择菜单命令& ...
- C#(VS2019)窗体应用程序之第一个窗口
学习在VS2019上使用C#写窗体应用程序 打开VS2019,点最下面的创建新项目 选择 Windows窗体应用,配置新项目 此时会开始一个新的界面 在每一个 Windows 窗体应用程序的项目文件夹 ...
- Windows程序设计设计第一个窗口
窗口调用的函数的简短解释: 来自小甲鱼的窗口模板: /* -------------------------------------------------------------------MyWi ...
- Eclipse中创建第一个窗口程序
之前在VS中用C#做程序开发时,做的最多的是Winform窗口.现在学习在Eclipse中用java编程序,也希望尽快学习如何写窗口程序,但是在选择Eclipse做开发工具的时候就听说Eclips ...
- OpenGL的glViewPort窗口设置函数实现分屏
OpenGL的glViewPort窗口设置函数实现分屏 之前实现过全景图片查看(OpenGL的几何变换3之内观察全景图),那么我们需要进行分屏该如何实现呢?如下图: 没错就是以前提过的glViewPo ...
- openGL学习笔记_配置开发环境第一个窗口
https://learnopengl-cn.github.io/ openGL学习网站 开发语言 C++ https://www.khronos.org/registry/OpenGL/index ...
- 使用OpenGL,在窗口中绘制两个立体图形,位置分别为窗口的左侧和右侧,添加光照,两个图形分别绕x轴和y轴旋转。
总体思路: 第一步,使用viewpoint函数来建立两个分割的窗口 第二步,在两个视口分别绘制带光照效果的立体图形 第三步,使用进栈出栈函数和Rotatef函数实现两图像各自的旋转 关于glPushM ...
- OpenGL入门:窗口开启、改变窗口背景颜色
OpenGL入门 开启一个窗口: 运用OpenGL在窗口中绘制图形 显示一个窗口 利用OpenGL修改窗口背景颜色 改变颜色的闪烁 开启一个窗口: // Include for GLFW header ...
- 【OpenGL】八、初始化 OpenGL 渲染环境 ( 导入 OpenGL 头文件 | 链接 OpenGL 库 | 将窗口设置为 OpenGL 窗口 | 设置像素格式描述符 | 渲染绘制 ) ★
文章目录 一.导入 OpenGL 的两个头文件 二.链接 OpenGL 库 三.将 Windows 桌面窗口改成 OpenGL 窗口 四.获取窗口设备 五.设置像素格式描述符 六.设置像素格式 七.创 ...
最新文章
- PWA项目实战分享(听书APP)
- python 内部函数,以及lambda,filter,map等内置函数
- php求未知数怎么求,PHP的-输入未知数的字段到MySQL-为此的最佳...
- python数据类型详解(全面)
- oracle基础教程实验,Oracle 11g 基础教程与实验指导(配光盘)(清华电脑学堂)
- Unity SRP自定义渲染管线 -- 5.Directional Shadows
- 这可能是最生动的加密相关科普文章
- opencv 边缘平滑_基于OpenCV的车道检测实现(一)
- android 系统联系人,Android读取系统联系人
- C++中对象初始化赋值是否需要调用operator=函数
- 国产操作系统有哪些,你知道吗?
- LTE: 小区特定参考信号功率与RRU发射功率的计算
- PHP微信公众号开发——群发消息
- 使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网)
- 深入了解Xcode 7——代码编辑
- 【ha知识两问】ha软件是什么?ha软件用途有哪些?
- centos安装NIS
- 闲谈安全测试左移三板斧
- 联想T430 安装msata接口的SSD固态硬盘
- C++数组练习题(一)