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

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