领手工在家做的网站,制作app费用,百度网站提交收录入口,重庆建企业网站一、前三章节的前情回顾
章节一#xff1a;上下文(Context) OpenGL学习笔记【1】——简介-CSDN博客 章节一讲述了OpenGL在渲染的时候需要一个Context来记录了OpenGL渲染需要的所有信息和状态#xff0c;可以把上下文理解成一个大的结构体#xff0c;它里面记录了当前绘制使… 一、前三章节的前情回顾
章节一上下文(Context) OpenGL学习笔记【1】——简介-CSDN博客 章节一讲述了OpenGL在渲染的时候需要一个Context来记录了OpenGL渲染需要的所有信息和状态可以把上下文理解成一个大的结构体它里面记录了当前绘制使用的颜色、是否有光照计算以及开启的光源等。不同的操作系统都有各自的上下文创建方法最简单的上下文可以通过GLFW创建。
章节二GLFW库
OpenGL学习笔记【2】——开发环境配置(GLFWVSCmake)创建第一个项目-CSDN博客 章节二讲述了一个专门的窗口库GLFW库一个轻量级的图形界面框架GLFW 的主要功能是创建并管理窗口和 OpenGL 上下文同时还提供了处理手柄、键盘、鼠标输入的功能。 章节二还创建了一个空项目MyFirstOpenGL。
章节三 GLAD库 OpenGL学习笔记【3】—— GLAD配置-CSDN博客 章节三讲述了GLAD库是用来管理OpenGL的函数指针的所以在调用任何OpenGL的函数之前我们需要初始化GLAD从而让我们能够使用所有OpenGL函数。 章节三还创建了一个main.cpp文件,代码中引入了GLAD和GLFW的两个库文件。
前三章节准备工作已经完成接下来可以开始创建窗口了
二、创建窗口步骤 2.1、初始化GLFW库 glfwInit()函数 一般我们使用Glfw库首先初始化GLFW库即需要调用glfwInit()得到OpenGL随显卡驱动一起发布的新特性的函数入口地址。 2.2、 glfwWindowHint配置GLFW glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE) 使用核心模式(Core-profile)在调用一个OpenGL的废弃函数时会产生invalid operation 错误当意外的使用了不该使用的旧函数时是一个很好的提醒。 注意请确认您的系统支持OpenGL3.3或更高版本否则此应用有可能会崩溃或者出现不可预知的错误如果你的OpenGL版本低于3.3检查一下显卡是否支持OpenGL 3.3不支持的话你的显卡真的太老了并更新你的驱动程序有必要的话请更新显卡。 2.3、创建一个窗口对象 (1) glfwCreateWindow()函数创建窗口对象 返回值类型GLFWwindow*
参数1,2为窗口的宽度和高度参数3是窗口的名字最后两个参数可以忽略。
glfwCreateWindow 创建了一个宽度为800像素、高度为600像素的窗口。 注意 其实处理过的的窗口值是从-1到1的显示而00点就是窗口的中心。
(2) glfwMakeContextCurrent(window)函数
将窗口window设置为当前线程的主上下文即捕获当前窗口准备对当前窗口进行画图. (3) glfwTerminate(); 终止GLFW释放资源。
2.4、渲染循环 为了在主动关闭GLFW之前可以不断绘制,在OpenGL中需要添加一个while循环我们可以把它称之为渲染循环(Render Loop)。如果没有渲染循环程序运行的话渲染效果只会出现一次就会快速消失。
glfwWindowShouldClose(window)函数检查GLFW是否被要求退出。
2.5、点击本地Windows调试器运行测试
运行结果如下就表示窗口创建成功了
三、窗口创建后在窗口里面需创建一个“视口” 在我们开始渲染之前还有一件重要的事情要做我们必须告诉OpenGL渲染窗口(即视口)的尺寸大小即需要创建一个视口。 3.1、创建视口之前需要先初始化GLAD 因为用来创建视口的函数glViewport()是openGL的函数由第三章节对于GLAD的介绍我们已经知道在调用任何OpenGL的函数之前需要先初始化GLAD初始化后我们才能够使用所有的OpenGL函数。
//初始化GLAD
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{//初始化失败即加载函数地址失败打印错误信息std::cout Failed to initialize GLAD std::endl;return -1;
} gladLoadGLLoader(GLADloadproc)函数根据我们编译的系统GLAD库中用于加载系统相关的OpenGL函数指针地址。参数1为GLADloadproc类型的函数指针地址。这里我们通过GLFW中的glfwGetProcAddress属性获取了函数指针的的地址。 初始化GLAD后接下来就能够使用所有OpenGL函数 了即可以创建视口. 3.2、创建视口(glViewport) //参数1,2渲染窗口左下角的位置//参数3,4渲染窗口的宽度和高度单位像素glViewport(0, 0, 800, 600); 让我捋一下哈刚才还在创建窗口现在又有一个渲染窗口(视口)是不是有一丢丢儿蒙圈其实不难理解glfwCreateWindow 和 glViewport 是两个不同的函数。glfwCreateWindow 是GLFW库中的函数用于创建一个OpenGL窗口。而glViewport 是OpenGL的函数用于设置渲染窗口的大小和位置 。 这里存在两个分辨率其中glfwCreateWindow是实际的窗口大小分辨率glViewport是OpenGL视口的分辨率这两个分辨率是可以不一致的不一致的后果就是OpenGl会绘制部分内容在你的实际窗口外,或者内部。
四、释放/删除之前分配的所有资源 //终止GLFW,释放所有资源glfwTerminate(); 此章节的代码如下所示
#include glad/glad.h
#include GLFW/glfw3.h
#include iostream// C的标准输入输出头文件
int main()
{glfwInit();glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);//设置主板本号为3glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);//设置副版本号为3glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);//创建窗口对象 返回值类型GLFWwindow*GLFWwindow* window glfwCreateWindow(800, 600, LearnOpenGL, NULL, NULL);if (window NULL)//创建窗口对象失败打印错误信息{ std::cout Failed to create GLFW window std::endl;//需要引用iostream头文件 glfwTerminate(); //终止GLFWreturn -1;} glfwMakeContextCurrent(window); //将窗口的上下文设置为当前线程的主上下文//渲染循环while (!glfwWindowShouldClose(window)){ }//初始化GLADif (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)){//初始化失败即加载函数地址失败打印错误信息std::cout Failed to initialize GLAD std::endl;return -1;}//参数1,2渲染窗口左下角的位置//参数3,4渲染窗口的宽度和高度单位像素glViewport(0, 0, 800, 600);//终止GLFW,释放所有资源glfwTerminate();return 0;
} 下一章节OpenGL学习笔记【5】——给窗口添加渲染颜色以及监听键盘输入