![](https://img-blog.csdnimg.cn/20200909145217132.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
OpenGL
OpenGL基础只是。learnOpenGL笔记
坡托
这个作者很懒,什么都没留下…
展开
-
PBR反射率公式推导过程
反射率公式Lo(p,ωo)=∫Ωfr(p,ωi,ωo)Li(p,ωi)n⋅ωidωiL_o(p,\omega_o) = \int\limits_{\Omega} f_r(p,\omega_i,\omega_o) L_i(p,\omega_i) n \cdot \omega_i d\omega_iLo(p,ωo)=Ω∫fr(p,ωi,ωo)Li(p,ωi)n⋅ωidωi辐射率L解析Li(p,ωi)L_i(p,\omega_i)Li(p,ωi)在指定方向上的单位立体角和垂直此方向的原创 2020-11-23 11:52:49 · 2735 阅读 · 0 评论 -
OpenGL--一些基础概念复习
OpenGL: 一个定义了函数布局和输出的图形API的正式规范。GLEW: 一个拓展加载库,用来为我们加载并设定所有OpenGL函数指针从而让我们能够使用所有(现代)OpenGL函数。视口(Viewport): 我们需要渲染的窗口。图形管线(Graphics Pipeline): 一个顶点在呈现为像素之前通过的过程。着色器(Shader): 一个运行在显卡上的小型程序。很多阶段的图形管道都可以使用自定义的着色器来代替原来的功能。标准化设备坐标(Normalized Device Coordinat原创 2020-09-10 16:01:25 · 139 阅读 · 0 评论 -
OpenGL--抗锯齿
Multidampling多重采样技术:光栅化阶段,不再使用单一的采样点来决定三角形的范围,而使用多个。采样点越多精度越高。颜色值的多重采样深度测试和模板测试多重采样OpenGL中的MSAA多样本缓冲 Multisample BufferglfwWindowHint(GLFW_SAMPLES, 4);glEnable(GL_MULTISAMPLE);多采样纹理附件glTexImage2DMultisampleGL_TEXTURE_2D_MULTISAMPLE多采样渲染缓冲对象gl原创 2020-09-10 15:57:25 · 128 阅读 · 0 评论 -
OpenGL--实例化
实例化调用一次渲染函数绘制很多物体的技术。减少从CPU到GPU的通信时间。实例化渲染函数:glDrawArraysInstanced、glDrawElementsInstanced新的内建变量:gl_InstanceID,渲染每个实例的索引值实例化数组glVertexAttribDivisor。这个函数告诉OpenGL什么时候去更新顶点属性的内容到下个元素。它的第一个参数是提到的顶点属性,第二个参数是属性除数(attribute divisor)。默认属性除数是0,告诉OpenGL在顶点着色器的每原创 2020-09-10 15:56:07 · 173 阅读 · 0 评论 -
OpenGL--GLSL
Built-in Variable内建变量https://www.khronos.org/opengl/wiki/Built-in_Variable_(GLSL)顶点着色器变量gl_Position【输出】定点着色器输出的位置向量。gl_PointSize【输出】以像素的方式设置点的高度和宽度。它在着色器中描述每个顶点做为点被绘制出来的大小。gl_VertexID【读取】储存着我们绘制的当前顶点的ID。片段着色器gl_FragCoord【输入】【只读】当前frag的窗原创 2020-09-10 15:54:19 · 104 阅读 · 0 评论 -
OpenGL--高级数据
填充缓冲glBufferSubData(GL_ARRAY_BUFFER, 24, sizeof(data), &data); // 范围: [24, 24 + sizeof(data)]通过offset和size填充一段数据缓冲,而不是全部glMapBuffer绑定一个指针到数据缓冲,然后直接对数据操作。glUnmapBuffer解绑指针复制缓冲void glCopyBufferSubData(GLenum readtarget, GLenum writetarget, GLintp原创 2020-09-09 16:53:19 · 98 阅读 · 0 评论 -
OpenGL--环境贴图
CubeMap立方体贴图:将多个纹理组合起来映射到一个单一纹理。这样做可以使用方向向量索引和采样。Skybox6张图组成一个cubemap采样:立方体中心位于坐标系原点,天空盒上的每个位置向量就是立方体这个位置对应的纹理值。深度测试:把skybox输入位置的z用w替换,使其深度永远为1,然后在绘制时改变深度测试方程GL_LEQUAL,这样深度为1的天空盒也可以通过测试。Environment mapping环境映射反射(Reflect): 根据观察方向和法线向量,计算出反射向量,使用这个反原创 2020-09-09 16:52:12 · 421 阅读 · 0 评论 -
OpenGL--帧缓冲
帧缓冲:颜色缓冲 + 深度缓冲 + 模板缓冲Renderbuffer objects渲染缓冲对象:以OpenGL原生渲染格式存储数据。渲染缓冲对象通常是只写的,不能修改。glfwSwapBuffers使用渲染缓冲对象实现由于渲染缓冲对象通常是只写的,它们经常作为深度和模板附件来使用,由于大多数时候,我们不需要从深度和模板缓冲中读取数据,但仍关心深度和模板测试。我们就需要有深度和模板值提供给测试,但不需要对这些值进行采样(sample),所以深度缓冲对象是完全符合的。在帧缓冲项目中,渲染缓冲对象可原创 2020-09-09 16:50:59 · 126 阅读 · 0 评论 -
OpenGL--面剔除
顶点连接顺序实际的顶点连接顺序是在光栅化阶段计算的,默认情况下,逆时针的顶点连接顺序被定义为三角形的正面。面剔除开启:glEnable(GL_CULL_FACE);设置:glCullFace(GL_BACK);glCullFace函数有三个可用的选项:GL_BACK:只剔除背面。GL_FRONT:只剔除正面。GL_FRONT_AND_BACK:剔除背面和正面。...原创 2020-09-09 16:48:44 · 169 阅读 · 0 评论 -
OpenGL--Blending
Discarding fragments丢弃片段Blending混合原创 2020-09-09 16:47:12 · 57 阅读 · 0 评论 -
OpenGL--模板检测使用
Stencil Buffer模板缓冲模板缓冲先清空模板缓冲设置所有片段的模板值为0,然后开启矩形片段用1填充。场景中的模板值为1的那些片段才会被渲染(其他的都被丢弃)。模板函数void glStencilFunc(GLenum func, GLint ref, GLuint mask)函数有三个参数:func:设置模板测试操作。这个测试操作应用到已经储存的模板值和glStencilFunc的ref值上,可用的选项是:GL_NEVER、GL_LEQUAL、GL_GREATER、GL_GEQUAL、G原创 2020-09-09 16:45:32 · 257 阅读 · 0 评论 -
OpenGL--深度测试简介
Depth Buffer深度缓冲由窗口系统自动创建,并将其深度值存储为16、24、32位的浮点数深度测试函数深度值精确度far和near是可见视图截锥的远近值,z是物体深度深度缓冲区的值并不是线性的屏幕空间(在视图空间投影矩阵应用之前是线性)。深度冲突两个平面或三角形如此紧密相互平行深度缓冲区不具有足够的精度以至于无法得到哪一个靠前。结果是,这两个形状不断似乎切换顺序导致怪异出问题。这被称为深度冲突(Z-fighting),因为它看上去像形状争夺顶靠前的位置。...原创 2020-09-09 16:40:01 · 134 阅读 · 0 评论 -
OpenGL--三种光源原理
Directional Light当一个光源无限远时,被称为定向光。所有的光线有着同一个方向。Point LightAttenuation:衰减DistanceConstantLinearQuadratic71.00.71.8131.00.350.44201.00.220.20321.00.140.07501.00.090.032651.00.070.0171001.00.0450.0075原创 2020-09-09 15:00:13 · 342 阅读 · 0 评论 -
OpenGL--一些基础概念复习
OpenGL: 一个定义了函数布局和输出的图形API的正式规范。GLEW: 一个拓展加载库,用来为我们加载并设定所有OpenGL函数指针从而让我们能够使用所有(现代)OpenGL函数。视口(Viewport): 我们需要渲染的窗口。图形管线(Graphics Pipeline): 一个顶点在呈现为像素之前通过的过程。着色器(Shader): 一个运行在显卡上的小型程序。很多阶段的图形管道都可以使用自定义的着色器来代替原来的功能。标准化设备坐标(Normalized Device Coordina.原创 2020-07-17 14:08:13 · 92 阅读 · 0 评论 -
OpenGL--相机.md
坐标空间的建立摄像机位置: cameraPos摄像机方向(z轴): cameraDirection = cameraPos - cameraTarget(0, 0, 0)右轴(x轴) : cameraRight定义一个上向量up = (0, 1, 0)cameraRight = cross(up, cameraDirection)上轴:cameraUp = cross(cameraDirection, cameraRight)Look At矩阵欧拉角俯仰角Pitch,绕x轴旋转偏原创 2020-07-17 14:00:44 · 130 阅读 · 0 评论 -
OpenGL--坐标系转换.md
坐标系局部空间(Local Space,或者称为物体空间(Object Space))世界空间(World Space)观察空间(View Space,或者称为视觉空间(Eye Space))裁剪空间(Clip Space)屏幕空间(Screen Space)坐标系转换模型矩阵视图矩阵投影矩阵...原创 2020-07-17 13:58:46 · 126 阅读 · 0 评论 -
OpenGL--向量计算和矩阵转换
点乘v¯⋅k¯=||v¯||⋅||k¯||⋅cosθ使用点乘可以很容易测试两个向量是否正交(Orthogonal)或平行(正交意味着两个向量互为直角)。点乘是通过将对应分量逐个相乘,然后再把所得积相加来计算的。叉乘叉乘只在3D空间中有定义,它需要两个不平行向量作为输入,生成一个正交于两个输入向量的第三个向量。矩阵相乘只有当左侧矩阵的列数与右侧矩阵的行数相等,两个矩阵才能相乘。矩阵相乘不遵守交换律(Commutative),也就是说A⋅B≠B⋅AA⋅B≠B⋅A。单位矩阵除对角线以外都原创 2020-07-17 13:56:30 · 436 阅读 · 0 评论 -
OpenGL--Texture|初识纹理
Wrapping 环绕方式环绕方式(Wrapping)描述GL_REPEAT对纹理的默认行为。重复纹理图像。GL_MIRRORED_REPEAT和GL_REPEAT一样,但每次重复图片是镜像放置的。GL_CLAMP_TO_EDGE纹理坐标会被约束在0到1之间,超出的部分会重复纹理坐标的边缘,产生一种边缘被拉伸的效果。GL_CLAMP_TO_BORDER超出的坐标为用户指定的边缘颜色。Texture Filtering 纹理过滤GL_NEAREST 临近原创 2020-06-09 20:44:52 · 329 阅读 · 0 评论 -
OpenGL--Shader的Uniform
UniformUniform是一种从CPU中的应用向GPU中的着色器发送数据的方式,但uniform和顶点属性有些不同。首先,uniform是全局的(Global)。全局意味着uniform变量必须在每个着色器程序对象中都是独一无二的,而且它可以被着色器程序的任意着色器在任意阶段访问。第二,无论你把uniform值设置成什么,uniform会一直保存它们的数据,直到它们被重置或更新。Uniform是只读的。同一个名字的Uniform变量可以在多个shader中使用,只要类型相同。...原创 2020-06-09 20:36:04 · 677 阅读 · 0 评论 -
LearnOpenGL--渲染一个三角形
渲染管线的各个阶段(蓝色是可自定义部分)图形渲染管线的第一个部分是顶点着色器(Vertex Shader),它把一个单独的顶点作为输入。顶点着色器主要的目的是把3D坐标转为另一种3D坐标(后面会解释),同时顶点着色器允许我们对顶点属性进行一些基本处理。图元装配(Primitive Assembly)阶段将顶点着色器输出的所有顶点作为输入(如果是GL_POINTS,那么就是一个顶点),并所有的点装配成指定图元的形状;本节例子中是一个三角形。图元装配阶段的输出会传递给几何着色器(Geometry S原创 2020-05-31 16:03:36 · 337 阅读 · 0 评论