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