当前位置:网站首页>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
在下一节中将继续学习
边栏推荐
- Talking about the realization idea of "frame" of "frame synchronization online game"
- 屏幕后期处理之:Sobel算子实现边缘检测
- Introduction to KDE Framework
- 剑指 Offer(第 2 版)7/4 1-4
- Multisim软件的基本使用
- 剑指 Offer(第 2 版)7/6 9-13
- 探究乱码问题的本源:GBK,UTF8,UTF16,UTF8BOM,ASN1之间的关联
- Unity2D动画生成操作(简单)
- Using parseInt() in TypeScript
- UnityShader入门精要-立方体纹理、反射、折射、菲涅尔反射
猜你喜欢
随机推荐
Talking about 3 common shadow rendering techniques in games (2): shadow cone
C#热更新比Lua好在哪里?
Two-dimensional cartoon rendering of strokes
mkfs.minix.c之minix_super_block.s_ninodes获取解析
观察者模式-数据池
开源游戏服务器框架NoahGameFrame(NF)简介(一)
动态规划、背包问题 6/22 96-100
Myunity框架笔记3
手把手教你改内核源码--sysfs虚拟文件系统1
unity守则(随时持续更新\自我总结)
Unity中实现Animation Clip动画片段的倒播(该案例可以防止动画延迟)
Talking about the realization idea of "frame" of "frame synchronization online game"
【fiddler3】使用fiddler设置弱网模式
序列化、编码、requests库json和data参数
Unity资源热更新--资源管理、Addressable
剑指 Offer(第 2 版)7/4 1-4
UnityShader入门精要-渲染纹理 镜子 玻璃 效果
C#对MySQL数据库进行增删改查操作(该操作还有防止MySQL注入功能)
浅谈《帧同步网络游戏》之“框架”实现思路
Unity中Xml简介以及通过脚本读取Xml文本中的内容









