当前位置:网站首页>OpenGL学习笔记(LearnOpenGL)第一部分-环境配置与基础知识
OpenGL学习笔记(LearnOpenGL)第一部分-环境配置与基础知识
2022-08-10 05:37:00 【hippodu】
前言:
博主在开始学习opengl前学习了games101图形学基础的前十节(渲染管线部分)以及games202的前两节(基础部分),此笔记由games202的第二节展开,后续内容来自learnOpenGL(原本想读蓝宝书,感觉蓝宝书的环境gltools和sb7有点麻烦,发现learnOpenGL更好上手)
一些学习资源:

OpenGL:
一组用于在CPU上调用GPU的图形API。工作类似于画一张油画:
1.放置物体:模型选择、模型放置。使用VBO(vertex buffer object)存储模型放在GPU中。
使用OpenGL完成对物体的摆放移动等。
2.放置画架:放置相机(set camera进行视图变换)、创建framebuffer
3.添加画布:指定了一个framebuffer后可以用于渲染多张图,渲染一次相当于用一张画布。
4.绘画:进行shading,使用着色器着色。对顶点着色返回值、在片段着色器中进行插值,需要自行完成顶点和片段着色器,其余功能封装好可使用。

OpenGL的着色语言GLSL
vertex+fragment着色的着色语言
Render Equation(visibility用于处理环境关照,实时渲染中考虑)

环境配置
环境配置确实折腾了我一阵,非常感谢这位博主的分享。
VS2017+OpenGL环境的配置(完结篇)_BLUEHEART-CSDN博客_vs配置opengl
网上搜索了许多教程,因为懒得下载cmake,然后用了上面这个博主的方法,成功配置了glut和glfw。
第一个窗口
GLFW配置
下面的代码初始化glfw并告诉glfw使用OpenGL的版本为3.3,使用核心模式。
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);//前三个参数为宽与高与名称,后面的参数后续会用到
GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", NULL, NULL);
//检测是否创建成功,创建成功后终止glfw(用glfwTerminate())
if (window == NULL)
{
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}// ---------------------------------------
//启用glad--管理OpenGL的函数指针,给glad的加载器传入用来加载系统线管的OpenGL的函数指针地址的函数,其
//由glfwgetprocaddress得到
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;在上面的代码启用glad后,设置视口,由于随着窗口大小的变化,视口大小也应随之变化,设计回调函数使每次同步变化。其中glViewport方法用于设置渲染窗口的尺寸大小。设计的这种回调函数有广泛应用,如处理输入变化错误信息等。
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
// make sure the viewport matches the new window dimensions; note that width and
// height will be significantly larger than specified on retina displays.
glViewport(0, 0, width, height);
}
如果想要每次调整窗口大小时都可以调用此函数来对渲染窗口的大小进行更新,需要使用下面的语句:
glfwSetFramebufferSizeCallback(window,framebuffer_size_callback);
一些其他的函数:
glfwWindowShouldClose:检查GLFW是否被要求推出
glfwPollEvents:检查有没有触发什么事件
glfwSwapBuffers:交换颜色缓冲(双缓冲的技术:前缓冲保存最终输出的图像,后缓冲绘制,交换前后即呈现图像)
glfwTerminate():终止glfw
glfwGetKey(window,GLFW_KEY_ESCAPE)表示检查ESC键的状态,如果被摁下,则有
glfwGetKey(window,GLFW_KEY_ESCAPE)==GLFW_PRESS
未被摁下的画会返回GLFE_RELEASE
glClearColor(0.1f,0.2f,0.3f,1.0f)四个参数分别表示的是红 绿 蓝 透明度。
glClear(GL_COLOR_BUFFER_BIT) 先后调用这两个函数可以实现清除颜色缓冲后将颜色缓冲调整为上面函数设置的颜色。
glClear()可以接受一个缓冲位(Buffer Bit)有 COLOR \DEPTH \SETNCIL
在下一节中将继续学习
边栏推荐
猜你喜欢

浅谈游戏中3种常用阴影渲染技术(2):阴影锥

Talking about 3 Common Shadow Rendering Techniques in Games (3): Shadow Mapping

UnityShader入门精要-立方体纹理、反射、折射、菲涅尔反射

Easy to master Unity of eight prior to rendering

每日刷题(day01)——leetcode 53. 最大子数组和

ASP.Net利用代码点击相应按钮来关闭当前的页面(亲测有效)

【fiddler4】使用fiddler设置简单并发

ASP.NET连接SQL Server的步骤

Tkinter 模块学习

unity在UI界面上展示旋转模型
随机推荐
Unity screen coordinates to world coordinates, mouse click to get 3D position
Linux的文件IO与标准IO,以及IO缓存
21天学习挑战赛--分班
hanLP探索-语义距离计算的实现
在Unity中判断游戏物体是否在游戏屏幕范围之内
Unity2D动画生成操作(简单)
初学者也能看懂的Ray March体积云
Analysis of minix_super_block.s_nzones of mkfs.minix.c
Kernel performance analysis summary
动态规划、背包问题 6/28 121-124
动态规划、背包问题 6/25 110-115
clickhouse出现数据重复问题
Unity中Xml简介以及通过脚本读取Xml文本中的内容
每日刷题(day03)——leetcode 899. 有序队列
如何实现网格建造系统
酸回收工艺讲解
ASP.NET有关于文件上传、下载、全选、删除选中重要干货(亲测有效)
Unity插件DOTween使用指南2(简释贝塞尔曲线)
抛光树脂应用
剑指 Offer(第 2 版)7/7 14-17