cover

【CG】HDR & Tone Mapping

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

March 17, 2026 · 2 min · 644 words · 氧均竭
cover

【CG】Shadow Mapping 使用OpenGL实现

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

March 16, 2026 · 6 min · 2707 words · 氧均竭
cover

【OpenGL】使用曲面细分着色器绘制Bezier曲线

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

March 15, 2026 · 7 min · 3289 words · 氧均竭
test cover

Hugo 功能测试文章

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. ...

March 15, 2026 · 2 min · 574 words · 氧均竭