法线可视化
3 / 17
在简单球体上学习光照项(漫反射/高光/边缘光)。
把法线方向直接显示成颜色,核心就是这一行:
下面拆解它。
什么是法线
法线是一个三维向量,表示表面上某个点"朝哪个方向看"。它就像一根垂直插在表面上的箭头。在球体上,中心点的法线朝正前方,边缘的法线朝向侧面。
每个分量(X、Y、Z)的范围是 -1.0 到 1.0:X 正方向朝右,Y 正方向朝上,Z 正方向朝向摄像机。
为什么要 * 0.5 + 0.5
法线的每个分量在 -1.0 到 1.0 之间,但颜色只能用 0.0 到 1.0(即 0% 到 100%)表示。
* 0.5 + 0.5 把范围从 [-1, 1] 重新映射到 [0, 1]:
- 朝左(-1)→ 0%(黑)
- 正中(0)→ 50%(中灰)
- 朝右(+1)→ 100%(亮)
这样三个轴分别对应红(X)、绿(Y)、蓝(Z)通道,球体就显示出彩色渐变。
试着改一改
| 改动 | 效果 |
|---|---|
n * 0.5 + 0.5 改为 abs(n) | 取绝对值,只剩正值,颜色对称分布 |
改为 vec4(vec3(n.z * 0.5 + 0.5), 1.0) | 只看 Z 轴,球体中心最亮、边缘变暗 |
改为 vec4(vec3(n.x * 0.5 + 0.5), 1.0) | 只看 X 轴,左暗右亮的灰度图 |
练习
当前练习区球体是全黑的,补全 TODO,让球体显示出法线可视化颜色。
答案解析
初始状态:c 固定是 vec3(0.0),所以球全黑。
改动:把法线 n 乘以 0.5 再加 0.5,把范围从 [-1, 1] 压缩到 [0, 1],这样才能作为颜色输出。每个轴对应一种颜色通道(X→红,Y→绿,Z→蓝)。
试着把 * 0.5 + 0.5 改成 * 0.5 + 0.3,看看整体颜色会变深还是变浅。