![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
OpenGL学习笔记
文章平均质量分 96
Floyd.993
一直在前进......
展开
-
LearnOpenGL——SSAO学习笔记
SSAO是一项屏幕采样技术,由于我们没有物体的几何信息,我们就需要将每个片元的几何数据渲染成屏幕空间的纹理,然后将这些纹理发给SSAO着色器,这样就可以访问每个片元的几何数据。shaderSSAO的片元着色器,会接受G-Buffer中的数据,也接受噪声纹理和法向半球核心样本作为输入参数,最终结果是一个灰度值,表示当前片段的遮蔽程度。由于平铺的随机向量纹理保持了一致的随机性,我们可以使用这一性质来创建一个简单的模糊着色器:对当前像素和其邻近像素进行采样,并计算加权平均值来代替当前像素的值。原创 2024-08-21 22:18:31 · 613 阅读 · 0 评论 -
LearnOpenGL——延迟渲染学习笔记
我们之前使用的一直是,指的是在场景中根据所有光源照亮一个物体,之后再渲染下一个物体。对程序性能影响很大,因为对于每一个需要渲染的物体,而且还有一部分被渲染的片段会被覆盖遮挡,造成浪费。原创 2024-08-21 15:05:11 · 711 阅读 · 0 评论 -
LearnOpenGL——HDR、Bloom学习笔记
色调映射(Tone Mapping)是一个损失很小的转换浮点颜色值至我们所需的LDR[0.0, 1.0]范围内的过程,通常会伴有特定的风格的色平衡(Stylistic Color Balance)。默认的帧缓冲默认一个颜色分量只占用8位,当使用32位每颜色分量的浮点帧缓冲时,就相当于要4倍的内存,所以除非非常高的精度,一般16够用。高斯模糊基于高斯曲线,高斯曲线通常被描述为一个钟形曲线,中间的值达到最大化,随着距离的增加,两边的值不断减少。我么可以通过MRT,在单独的一个渲染pass中提取两张图片。原创 2024-08-21 11:20:07 · 707 阅读 · 0 评论 -
LearnOpenGL——法线贴图、视差贴图学习笔记
我们将观察方向变化到切线空间中,所以P向量的x和y分量会与表面切线和副切线对齐,由于切线和副切线向量与表面纹理坐标的方向相同,我们可以用P的x和y元素作为纹理坐标的偏移量。目前,如果我们让平面竖直面对我们,此时效果正常,因为法线贴图中的法线方向指向z正方向并且平面的法线也指向z轴正方向。将法线向量的x、y、z元素储存到纹理中,代替颜色的r、g、b元素,因为法线向量的范围在[-1,1],所以我们要先将其映射到[0,1],变换为RGB颜色元素。法线向量从z轴方向也有向其他方向的偏差,颜色也就发生了轻微的变化。原创 2024-08-19 15:26:16 · 1059 阅读 · 0 评论 -
LearnOpenGL——点光源阴影笔记
为了把值渲染到深度立方体贴图,我们将需要3个着色器:顶点和像素着色器,以及一个它们之间的几何着色器。点光源发出的光线向四面八方扩散,对于ShaderCalculation函数,与普通的阴影计算不同,我们将fragment的光空间位置换成了fragment的位置,我们将使用一个方向向量来采样立方体深度贴图。我们创建了6个视图矩阵,把它们乘以投影矩阵,来得到6个不同的光空间变换矩阵。使用这些着色器渲染场景,立方体贴图附加的帧缓冲对象激活以后,你会得到一个完全填充的深度立方体贴图,以便于进行第二阶段的阴影计算。原创 2024-08-17 16:18:15 · 592 阅读 · 0 评论 -
LearnOpenGL——阴影映射
因为我们渲染的是深度贴图(黑白灰),所以颜色缓冲没啥用,所以我们将调用glDrawBuffer和glReadBuffer把读和绘制缓冲设置为GL_NONE,告诉OpenGL我们不适用任何颜色数据进行渲染。图片每个斜坡代表深度贴图一个单独的纹理像素,有些在地板上面,有些在地板下面,这样我们所得到的阴影就有了差异。深度贴图是从光的透视图里渲染的深度纹理,用它计算阴影。光的视锥不可见的区域一律被认为是处于阴影中,不管它真的处于阴影之中,发生这种情况的原因是我们之前将深度贴图的环绕方式设置成了GL_REPEAT。原创 2024-08-17 14:41:13 · 725 阅读 · 0 评论 -
LearnOpenGL——Blinn-Phong模型光照、伽马矫正
Gamma矫正就是在显示到显示器之前加一个Gamma2.2的倒数Gamma0.45进行矫正。我们在颜色显示到显示器的时候把每个颜色输出都加上这个翻转的Gamma曲线,这样应用了显示器Gamma以后最终的颜色将会变为线性的。举个例子,我们想要将暗红色0.50.00.00.50.00.0显示在屏幕上,线性的颜色显示出来相当于降低了2.2次幂的亮度,即0.50.00.02.20.2180.00.00.50.00.02.20.2180.00.0,亮度会减弱。原创 2024-08-16 14:26:12 · 873 阅读 · 0 评论 -
LearnOpenGL——抗锯齿
关于抗锯齿技术的原理可以参考另外一篇笔记。原创 2024-08-15 14:30:18 · 576 阅读 · 0 评论 -
LearnOpenGL——几何着色器、实例化
在顶点着色器和片元着色器之间还有一个可选的几何着色器,几何着色器输入的是一个图元(点或者三角形)的一组顶点,几何着色器可以在片元着色器之前对它们进行随意变化,可以变换为不同的图元,也可以生成更多的顶点。我们需要声明从顶点着色器输入的图元类型——在in前面加一个布局修饰符(如下),如果我们要绘制三角形,就将修饰符修改为triangles,括号内的数字表示的是一个图元所包含的最小顶点数。几何着色器,会接收每一个顶点(包括一个位置向量和一个法向量),并在每个位置向量处绘制一个法线向量。原创 2024-08-15 11:29:55 · 946 阅读 · 0 评论 -
LearnOpenGL——高级数据、高级GLSL
当从文件中加载数据时,得到的会是分类好的数据数组,比如会得到三个数组position[]、normal[]、texture[],而不是像我们之前使用的交错的数据数组123123123这样的。目前对于一个个uniform变量,我们还需要一个个来设置,我们可以使用Uniform缓冲对象的工具。我们能够选用的其中一个图元是GL_POINTS,每个顶点都是一个图元,都会被渲染为一个点,我们可以使用float类型的变量gl_PointSize来调整渲染出来的点的大小(可以在顶点着色器中修改这个值)。原创 2024-08-12 14:21:48 · 812 阅读 · 0 评论 -
LearnOpenGL——帧缓冲、立方体贴图
如果你想将你的屏幕渲染到一个更小或更大的纹理上,你需要(在渲染到你的帧缓冲之前)再次调用glViewport,使用纹理的新维度作为参数,否则只有一小部分的纹理或屏幕会被渲染到这个纹理上。由于渲染缓冲对象通常都是只写的,它们会经常用于深度和模板附件,当我们不需要从这些缓冲中采样的时候,通常都会选择渲染缓冲对象,因为它会更优化一点。,附件是一个内存位置,作为帧缓冲的其中一个缓冲,可以想象为一张图片。当把一个纹理附加到帧缓冲的时候,所有的渲染指令将会写入到这个纹理中,就像它是一个普通的颜色/深度或模板缓冲一样。原创 2024-08-10 21:37:39 · 827 阅读 · 0 评论 -
LearnOpenGL——混合、面剔除
实际的环绕顺序是。原创 2024-08-09 11:49:11 · 661 阅读 · 0 评论 -
LearnOpenGL-深度测试与模板测试
它会与将要写入缓冲的模板值进行与(AND)运算。默认情况下设置的位掩码0xFF所有位都为1,不影响输出,但如果我们将它设置为0x00,写入缓冲的所有模板值最后都会变成0.这与深度测试中的glDepthMask(GL_FALSE)是等价的。深度缓冲包含了一个介于0.0和1.0之间的深度值,观察空间的z值可能是投影平截头体的近平面(Near)和远平面(Far)之间的任何值。深度缓冲像颜色缓冲一样,在每个片段中存储了信息,并且有一样的宽度高度,都是由窗口自动创建的,在大部分系统中,深度缓冲的精度都是24位。原创 2024-08-08 15:11:43 · 842 阅读 · 0 评论 -
LearnOpenGL-入门章节学习笔记
OpenGL一般被认为是图像API,其本身并不是API,而是由Khronos组织制定并维护的规范。实际的OpenGL库的开发者通常是显卡的生产商。原创 2024-08-05 22:07:00 · 1145 阅读 · 0 评论