【OpenGL】计算着色器入门
摘要 OpenGL4.3 引入了 计算着色器(Compute Shader) 这使得我们可以在 GPU 上直接利用 GPU 的并行计算能力来处理非图形任务,标志着 OpenGL正式具备了 GPGPU(通用图形处理器计算)的能力 这篇文章将会以例子的角度来介绍如何使用 Compute Shader ...
摘要 OpenGL4.3 引入了 计算着色器(Compute Shader) 这使得我们可以在 GPU 上直接利用 GPU 的并行计算能力来处理非图形任务,标志着 OpenGL正式具备了 GPGPU(通用图形处理器计算)的能力 这篇文章将会以例子的角度来介绍如何使用 Compute Shader ...

延迟渲染(Deferred Rendering) 是一种专为高效处理海量光源而设计的渲染技术,旨在解决传统前向渲染(Forward Rendering) 在多光源场景下的性能瓶颈。在前向渲染中,每个物体在绘制时都必须遍历场景内的所有光源并逐一计算光照。这意味着,若场景中有 $n$ 个几何片段和 $m$ 个光源,计算复杂度将达到 $O(n \times m)$。当光源数量增加时,渲染开销会呈线性爆发式增长。 ...

在没有将辐射度量学引入计算机图形学中用于渲染之前程序员或者美术师们都是通过凭感觉或者经验调整Phong或者Blinn-Phong模型的参数,想做出非常精美的效果非常困难。 而且Phong和Blinn-Phong模型都是经验模型,它们都没办法表示真实的物理效果。因此我们引入了辐射度量学来以科学的角度定量地、物理正确地描述光。 ...

HDR 传统的显示设备使用的是 LDR 模式,即线性 Device-Independent-RGB 模式,它通常使用 8 位来代表一个每个颜色通道的值。 但是在 LDR 模式下所有的颜色都被限制到了 0 到 1 之间,这导致如果场景中存在一个颜色值超过 1 的物体,那么这个物体的颜色就会变成纯白。 HDR 模式则允许颜色的值超过 1,因此 HDR 模式下可以处理更丰富的场景。 如下图所示,LDR 模式下物体的纹理细节根本看不见 ...

如果你玩过现代 3D 游戏那么其中大多数的的动态物体阴影都是 **阴影映射(Shadow Mapping)**这个算法的变种。 所以为了研究其他的现代的实时动态阴影我们必须先学习一下 Shadow Mapping 的原理,以及如何使用OpenGL去实现。 ...

【OpenGL】使用曲面细分着色器绘制Bezier曲线 这篇文章将直接介绍使用曲面细分着色器绘制Bezier曲线,而不会介绍Bezier曲线,但是会介绍 OpenGL 的曲面细分着色器的简单用法以及相关内容。 介绍 曲面细分着色器(Tessellation Shaders) 是在 OpenGL4.0 版本引入的。在这之前,有一些私有扩展可以使用,但是直到 4.0 曲面细分才正式成为 OpenGL 的一部分。 ...

Hugo 全功能测试 这是一篇用于测试 Hugo + PaperMod 博客功能是否正常的文章。 目录应该会自动生成。 1. 行内公式 这是一个行内公式: $E = mc^2$ 这是另一个: $\mathbf{v'} = R_z(\theta)\mathbf{v}$ 2. 块级公式 $$ f(x) = x^2 + 2x + 1 $$ 3. 矩阵测试(图形学重要) $$ R_z(\theta) = \begin{pmatrix} \cos\theta & -\sin\theta & 0 \\\\ \sin\theta & \cos\theta & 0 \\\\ 0 & 0 & 1 \end{pmatrix} $$ 4. 多行公式 $$ \begin{aligned} x' &= x\cos\theta - y\sin\theta \\\\ y' &= x\sin\theta + y\cos\theta \end{aligned} $$ 5. 代码高亮 (C++) 1#include <glm/glm.hpp> 2#include <glm/gtc/matrix_transform.hpp> 3 4glm::mat4 model = glm::rotate( 5 glm::mat4(1.0f), 6 glm::radians(45.0f), 7 glm::vec3(0,0,1) 8); 6. Shader 代码 (GLSL) 1vec3 rotateZ(vec3 p, float theta) 2{ 3 mat3 R = mat3( 4 cos(theta), -sin(theta), 0.0, 5 sin(theta), cos(theta), 0.0, 6 0.0, 0.0, 1.0 7 ); 8 9 return R * p; 10} 7. Python 代码 1import numpy as np 2 3theta = np.pi / 4 4 5R = np.array([ 6 [np.cos(theta), -np.sin(theta), 0], 7 [np.sin(theta), np.cos(theta), 0], 8 [0,0,1] 9]) 8. 表格 Algorithm Complexity Notes Ray Tracing O(n) realistic Rasterization O(1) fast Path Tracing expensive global illumination 9. 引用 Computer graphics is the art of turning mathematics into images. ...