我目前正在研究 OpenGL 中的光照,它利用了 GLSL 中称为 normalize 的函数。根据 OpenGL 文档,它说它“计算两个向量的归一化乘积”。但是,它仍然没有解释“标准化”是什么意思。我曾尝试在 Google 上查找什么是标准化产品,但我似乎找不到任何关于它的信息。谁能解释归一化的含义并提供一些归一化值的示例?
3 回答
我认为混淆来自于规范化“一个值”而不是“一个向量”的想法。如果您只是将单个数字视为一个值,那么标准化没有任何意义。规范化仅在应用于向量时才有用。
向量是一个数字序列;在 3D 图形中,它通常是表示为 的坐标v = <x,y,z>
。
每个向量都有一个大小或长度,可以使用毕达哥拉定理找到:|v| = sqrt(x^2 + y^2 + z^2)
这基本上是从原点<0,0,0>
到向量表示的点的直线长度。
一个向量是正常的,如果它的长度是 1。就是这样!
规范化向量意味着改变它,使其指向相同的方向(想想从原点开始的那条线),但它的长度是一。
我们使用法线向量的主要原因是表示一个方向;例如,如果您正在对无限远的光源进行建模,则无法为其提供精确的坐标。但是您可以使用法线向量指示从特定点到哪里找到它。
这是一个数学术语,这个链接用非常简单的术语解释了它的含义:
2D 和 3D 计算机图形中的操作通常使用已归一化的向量副本执行,即。转换为单位向量...归一化向量涉及两个步骤:
- 计算它的长度,然后,
- 将它的每个(
xy
或xyz
)组件除以它的长度......
如果您对向量甚至向量代数不太了解,那么解释起来会很复杂。(您可以查看这篇关于向量、法线向量甚至规范化过程等一般概念的文章)查看
但是“规范化”的过程或概念是指使某物标准化或“正常化”的过程。</p>
在向量的情况下,让我们暂时假设标准向量的长度为 1。因此,要对向量进行归一化,就是取任意长度的向量,并保持它指向同一方向,将其长度更改为1,把它变成所谓的单位向量。