跳到主要内容
← 全部概念
3D 与渲染 / 02

法线

表面朝向哪一边

交互演示

交互演示 · 移动指针或点击画面,观察变化

法线是垂直于表面并朝外的单位向量。光照计算会比较它与指向光源的方向,因此在示例中,法线朝向灯泡的表面更亮。玩法代码也会使用同一个向量,让物体撞墙反弹,或区分可站立的地面与陡坡。

适用场景

使用表面法线计算光照、确定贴花朝向、反射弹体,或判断斜坡是否可视为地面。确保法线与用于比较的向量处于同一个坐标空间。

实现示例

不依赖特定引擎的伪代码。请根据你使用的引擎调整函数和坐标约定。

normal = normalize(hit.worldNormal)
walkable = dot(normal, worldUp) >= cos(maxSlopeAngle)
bounce = velocity - 2 * dot(velocity, normal) * normal

常见错误

位置向量并不是法线。遇到非均匀缩放时,应使用逆转置法线矩阵变换法线,再重新归一化。

延伸阅读

Three.js 手册 ↗
内容原作 Nicolas Zullo · 中文整理与交互改编