![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
GLSL
文章平均质量分 64
笑神552
这个作者很懒,什么都没留下…
展开
-
learnopengl网站学习9.混合.txt
OpenGL中的混合是通过下面这个方程来实现的::源颜色向量。这是源自纹理的颜色向量。:目标颜色向量。这是当前储存在颜色缓冲中的颜色向量。:源因子值。指定了alpha值对源颜色的影响。:目标因子值。指定了alpha值对目标颜色的影响。虽然都是这样glBlendFunc(GLenum sfactor, GLenum dfactor)函数接受两个参数,来设置源和目标因子。OpenGL为我们定义了很多个选项,我们将在下面列出大部分最常用的选项。注意常数颜色向量可以通过glBlendColor函数来原创 2022-02-15 13:44:22 · 61 阅读 · 0 评论 -
14.立方贴图环境映射.txt
反射#version 330 coreout vec4 FragColor;in vec3 Normal;in vec3 Position;uniform vec3 cameraPos;uniform samplerCube skybox;void main(){ vec3 I = normalize(Position - cameraPos); vec3 R = reflect(I, normalize(Normal)); FragC...原创 2022-02-16 22:58:18 · 39 阅读 · 0 评论 -
learnopengl网站学习4.简单光照.txt
#version 330 corestruct Material{ vec3 ambient; vec3 diffuse; vec3 specular; float shininess;};struct Light{ vec3 position; vec3 ambient; vec3 diffuse; vec3 specular;};out vec4 FragColor;in vec3 Normal; in vec3 FragPos...原创 2022-02-15 13:39:56 · 70 阅读 · 0 评论 -
learnopengl网站学习7.深度测试.txt
可以想象,在某些情况下你会需要对所有片段都执行深度测试并丢弃相应的片段,但不希望更新深度缓冲。基本上来说,你在使用一个只读的(Read-only)深度缓冲。OpenGL允许我们禁用深度缓冲的写入,只需要设置它的深度掩码(Depth Mask)设置为GL_FALSE就可以了:glDepthMask(GL_FALSE);OpenGL允许我们修改深度测试中使用的比较运算符。这允许我们来控制OpenGL什么时候该通过或丢弃一个片段,什么时候去更新深度缓冲。我们可以调用glDepthFunc函数来设置比较运算原创 2022-02-15 13:42:54 · 60 阅读 · 0 评论 -
learnopengl网站学习2.着色器.txt
一个典型的着色器结构#version version_numberin type in_variable_name;in type in_variable_name;out type out_variable_name;uniform type uniform_name;int main(){ // 处理输入并进行一些图形操作 ... // 输出处理过的结果到输出变量 out_variable_name = weird_stuff_we_processed;}当我们特...原创 2022-02-15 13:38:03 · 112 阅读 · 0 评论 -
learnopengl网站学习11.帧缓冲.txt
到目前为止,我们已经使用了很多屏幕缓冲了:用于写入颜色值的颜色缓冲、用于写入深度信息的深度缓冲和允许我们根据一些条件丢弃特定片段的模板缓冲。这些缓冲结合起来叫做帧缓冲(Framebuffer),它被储存在内存中。OpenGL允许我们定义我们自己的帧缓冲,也就是说我们能够定义我们自己的颜色缓冲,甚至是深度缓冲和模板缓冲。OpenGL中的其它对象一样,我们会使用一个叫做glGenFramebuffers的函数来创建一个帧缓冲对象(Framebuffer Object, FBO):unsigned int原创 2022-02-16 22:56:26 · 182 阅读 · 0 评论 -
16.高级GLSL.txt
顶点着色器变量gl_PointSize我们能够选用的其中一个图元是GL_POINTS,如果使用它的话,每一个顶点都是一个图元,都会被渲染为一个点。我们可以通过OpenGL的glPointSize函数来设置渲染出来的点的大小,但我们也可以在顶点着色器中修改这个值。在顶点着色器中修改点大小的功能默认是禁用的,如果你需要启用它的话,你需要启用OpenGL的GL_PROGRAM_POINT_SIZE:glEnable(GL_PROGRAM_POINT_SIZE);示例:void main(){ ..原创 2022-02-16 22:58:50 · 209 阅读 · 0 评论 -
17.集合着色器.txt
几何着色器,也就是根据顶点着色器输出的数据进行处理,比如让他们衍生啥的,反正就是处理关于几何链接着色器geometryShader = glCreateShader(GL_GEOMETRY_SHADER);glShaderSource(geometryShader, 1, &gShaderCode, NULL);glCompileShader(geometryShader); ...glAttachShader(program, geometryShader);glLinkProgr.原创 2022-02-18 20:13:47 · 57 阅读 · 0 评论 -
learnopengl网站学习1.窗口.txt
#include <glad/glad.h>#include <GLFW/glfw3.h>#include <iostream>void framebuffer_size_callback(GLFWwindow* window, int width, int height);void processInput(GLFWwindow *window);// settingsconst unsigned int SCR_WIDTH = 800;const u原创 2022-02-15 13:36:55 · 128 阅读 · 0 评论 -
learnopengl网站学习10.面剔除.txt
确认三角形是逆时针排序的,然后glEnable(GL_CULL_FACE);开启面剔除glCullFace(GL_FRONT);glCullFace函数有三个可用的选项:GL_BACK:只剔除背向面。GL_FRONT:只剔除正向面。GL_FRONT_AND_BACK:剔除正向面和背向面。这个可以设置设置正向面的环绕顺序glFrontFace(GL_CCW);默认值是GL_CCW,它代表的是逆时针的环绕顺序,另一个选项是GL_CW,它(显然)代表的是顺时针顺序。...原创 2022-02-15 13:44:53 · 1395 阅读 · 0 评论 -
learnopengl网站学习4.坐标.txt
本地坐标-模型矩阵-世界坐标-观察矩阵-观察坐标-投影矩阵-裁剪坐标-屏幕变换-屏幕坐标原创 2022-02-15 13:40:39 · 45 阅读 · 0 评论 -
13.立方贴图.txt
创建立方体贴图unsigned int textureID;glGenTextures(1, &textureID);glBindTexture(GL_TEXTURE_CUBE_MAP, textureID);int width, height, nrChannels;unsigned char *data; for(unsigned int i = 0; i < textures_faces.size(); i++){ data = stbi_load(texture...原创 2022-02-16 22:57:45 · 45 阅读 · 0 评论 -
learnopengl网站学习3.纹理.txt
纹理的工作方式顶点对应在纹理上的点,然后顶点之间的填充面就取插值在纹理上对应就行了纹理环绕方式 描述GL_REPEAT 对纹理的默认行为。重复纹理图像。GL_MIRRORED_REPEAT 和GL_REPEAT一样,但每次重复图片是镜像放置的。GL_CLAMP_TO_EDGE 纹理坐标会被约束在0到1之间,超出的部分会重复纹理坐标的边缘,产生一种边缘被拉伸的效果。GL_CLAMP_TO_BORDER 超出的坐标为用户指定的边缘颜色。前面提到的每个选项都可以使用g...原创 2022-02-15 13:38:58 · 69 阅读 · 0 评论 -
learnopengl网站学习8.模板测试.txt
一个模板缓冲中,(通常)每个模板值(Stencil Value)是8位的。所以每个像素/片段一共能有256种不同的模板值。我们可以将这些模板值设置为我们想要的值,然后当某一个片段有某一个模板值的时候,我们就可以选择丢弃或是保留这个片段了。和深度缓冲相似使用步骤启用模板缓冲的写入。渲染物体,更新模板缓冲的内容。禁用模板缓冲的写入。渲染(其它)物体,这次根据模板缓冲的内容丢弃特定的片段。关于开启你可以启用GL_STENCIL_TEST来启用模板测试。在这一行代码之后,所有的渲染调用都会以某种原创 2022-02-15 13:43:44 · 100 阅读 · 0 评论 -
learnopengl网站学习6.纹理的深刻简单光照.txt
想要应用纹理,首先讨论关于纹理的输入在拥有以下函数的前提下unsigned int loadTexture(char const* path){ unsigned int textureID; glGenTextures(1, &textureID); int width, height, nrComponents; unsigned char* data = stbi_load(path, &width, &height, &nr...原创 2022-02-15 13:41:49 · 286 阅读 · 0 评论 -
learnopengl网站学习12.后期处理接帧缓冲.txt
反相void main(){ FragColor = vec4(vec3(1.0 - texture(screenTexture, TexCoords)), 1.0);}灰度void main(){ FragColor = texture(screenTexture, TexCoords); float average = (FragColor.r + FragColor.g + FragColor.b) / 3.0; FragColor = vec4(avera...原创 2022-02-16 22:57:12 · 58 阅读 · 0 评论 -
18.集合着色器爆破发现例子.txt
对于几何着色器#version 330 corelayout (triangles) in;layout (triangle_strip, max_vertices = 3) out;//因为绘制的是三角形,所以第一个是triangles,第二个是triangle_stripin VS_OUT{ vec2 texCoords;}gs_in[];out vec2 TexCoords;uniform float time;//会被设置的时间vec4 explode(vec4 p..原创 2022-02-18 20:14:20 · 93 阅读 · 0 评论 -
21Gamma校正.txt
Gamma也叫灰度系数,每种显示设备都有自己的Gamma值,都不相同,有一个公式:设备输出亮度 = 电压的Gamma次幂,任何设备Gamma基本上都不会等于1,等于1是一种理想的线性状态,这种理想状态是:如果电压和亮度都是在0到1的区间,那么多少电压就等于多少亮度。对于CRT,Gamma通常为2.2,因而,输出亮度 = 输入电压的2.2次幂,你可以从本节第二张图中看到Gamma2.2实际显示出来的总会比预期暗,相反Gamma0.45就会比理想预期亮,如果你讲Gamma0.45叠加到Gamma2.2的显示设备原创 2022-02-18 20:14:50 · 138 阅读 · 0 评论