摘要:上一节OpenGL入门——矩阵变换与坐标系统 - 一只小瓶子 - 博客园 (cnblogs.com)通过矩阵变换实现物体移动。OpenGL本身没有摄像机的概念,但是可以通过把场景中的所有物体往相反方向移动,来模拟摄像机的移动。下面介绍一下怎么通过这种方式在OpenGL中配置一个摄像机。 一、摄像机/
阅读全文
摘要:一、OpenGL的数学库GLM 向量和矩阵的运算就不作说明了,直接介绍OpenGL中如何使用矩阵变换。 GLM(官网:OpenGL Mathematics (g-truc.net))是OpenGL Mathematics的缩写,它是一个只有头文件的库,也就是说只需包含对应的头文件就行了,不用链接和编
阅读全文
摘要:上一节OpenGL入门——纹理 - 一只小瓶子 - 博客园 (cnblogs.com)中介绍了怎么使用纹理,实际使用过程中可能会用到多个纹理。跟顶点属性一样(顶点对象可以有多个属性,每个属性都有一个位置值(layout)),纹理采样器也有一个位置值(纹理单元),OpenGL中至少有16个纹理单元,从
阅读全文
摘要:已知,我们是对每个顶点去添加对应颜色,如果想要图像更加细节真实,就必须有足够多的点,点的密度要很大,而每个点都有个颜色属性,这样很浪费资源。 这时候我们就可以引入纹理,它可以用来添加图像的细节,类似于皮肤。每个顶点对应一个纹理坐标(表明从纹理图像的哪个位置采样,即获得颜色),其他片段进行插值采样(非
阅读全文
摘要:着色器的编写、编译、管理是个很繁琐的事。所以就需要写一个类,这个类可以从文件读取着色器源码,可以编译链接它们,可以对它们进行错误检测,可以设置Uniform值。 1. 类的声明 #pragma once #include <glad/glad.h> #include <string> #includ
阅读全文
摘要:前面几节简单使用了一下着色器 现在详细解释一下着色器和着色器语言(GLSL) 1. 着色器 着色器是运行在GPU上的小程序,它们之间不能互相通信,唯一的沟通只有输入和输出。 2. GLSL 着色器的开头是声明版本,接着是输入和输出变量、uniform和main函数。每个着色器的入口点都是main函数
阅读全文
摘要:上一节OpenGL入门——第一个三角形(1) - 一只小瓶子 - 博客园 (cnblogs.com)介绍了opengl怎么使用VAO和VBO绘制一个三角形 这一节介绍一下使用EBO绘制 元素缓冲对象(Element Buffer Object,EBO),也叫索引缓冲对象(Index Buffer O
阅读全文
摘要:一、渲染管线 在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,所以由OpenGL的图形渲染管线将3D坐标转为2D坐标。 图形渲染管线主要分为2个部分: 第一部分将3D坐标转为2D坐标,第二部分把2D坐标转为实际的颜色像素。 注意:2D坐标和像素也是不同的,2D坐标精确表示一个
阅读全文
摘要:先初始GLFW窗口 ///窗口初始化 glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);//主版本号,当API以不兼容的方式更改时,该值会增加。 glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3
阅读全文
摘要:OpenGL有意将建一个上下文(Context)和一个用于显示的窗口的操作抽象出去,所以我们就得自己处理创建窗口,定义OpenGL上下文以及处理用户输入。 有一些特别针对OpenGL创建窗口和上下文用来渲染的库,比如GLUT,SDL,SFML和GLFW。 这里先选择使用跟主页 - LearnOpen
阅读全文
摘要:OpenGL入门了很多次,但是一旦踏出一段时间,就又啥也不懂,从头开始。以前只是需要用的时候草草学一下怎么用,会套用就行,没让自己停下来认真思考消化...... 短时间看效率高,长时间看效率低,因为每次使用都得重新搜索学习。 所以想在再次入门的时候记录点东西,整理一下自己的思绪,以后有时间再再再无限
阅读全文