法线可视化

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,看看整体颜色会变深还是变浅。

GLSL 代码编辑器

正确代码预览

当前代码预览