归一化一个值是什么意思?

38

我目前正在学习OpenGL中的光照,其中涉及到GLSL中的一个函数normalize。根据OpenGL文档所述,该函数“计算两个向量的标准化乘积”。然而,仍然没有解释“标准化”是什么意思。我已经尝试在Google上寻找有关标准化乘积的信息,但似乎找不到任何相关内容。能否有人解释一下标准化的含义并提供一些标准化值的示例?


你在哪里找到的?在glsl规范中,有:normalize(genType x)-返回与x方向相同但长度为1的向量。http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.20.8.pdf - fen
奇怪...但是那里的描述提供了适当的信息。 - fen
一般来说,在涉足计算机图形学时,你至少应该具备简单线性代数的基础知识。因为将一个向量归一化并不是你经常会遇到的最复杂的问题。 - Christian Rau
2
为什么这个问题被踩得这么惨?这是一个完全合理的问题,有一个完全正确的答案。 - Hannesh
4
这是一个合理的问题。很显然@theAmateurProgrammer已经考虑过这个问题,但是由于很多假设你已经熟悉向量数学的写作使他/她感到困惑。他/她得到了我的同情;这不是有人要求别人发送代码的情况。 - benzado
显示剩余4条评论
3个回答

52

我认为混淆是来自于将“a value”标准化与将“a vector”标准化区分开来的想法;如果您只将一个单独的数字视为值,那么标准化没有任何意义。只有将标准化应用于向量时才有用。

向量是数字序列;在三维图形中,它通常表示为坐标v = <x,y,z>

每个向量都有一个大小或长度,可以使用勾股定理找到:|v| = sqrt(x^2 + y^2 + z^2)这基本上是从原点<0,0,0>到向量表示的点的一条线的长度。

如果向量的长度为1,则向量是向量单位向量。就是这样!

将向量标准化意味着更改它,使其指向相同的方向(考虑来自原点的那条线),但其长度为1。

我们使用法向量的主要原因是表示方向;例如,如果您正在建模无限距离处的光源,则无法为其提供精确的坐标。但是,您可以使用法向量指示从特定点找到它的位置。


2
规范化对于单个值确实是有意义的。这就是sign(x)所做的。 - user652038
@Jessy 好的,但这比三维向量的情况要少得多有趣/令人困惑。 - benzado
1
可能吧。虽然我认为理解这个概念是有帮助的。例如,我认为想象一下对一个标准化的“n>1向量”和一个“标准化的1向量”进行点积是很有用的。你可以想象其他维度的贡献不会影响向量之间的角度。只有与1向量匹配的维度才有影响。 - user652038
2
感谢确认。当我说“value”时,我基本上是指“vector”,但我不确定整数/浮点数是否也可以被归一化,因此术语“value”应该代表向量、整数和浮点数。 - TheAmateurProgrammer

16

这是一个数学术语,该链接用非常简单的方式解释了它的含义:

2D和3D计算机图形中的操作通常使用已经被标准化即转换为单位向量的向量副本来执行...将向量标准化涉及两个步骤:

  1. 计算其长度,然后,
  2. 将其 (xyxyz) 组件的每个元素除以其长度...

0

如果你对向量或者向量代数不是很了解,那么这个概念可能比较难以解释。(你可以查看这篇关于向量、法向量甚至标准化过程的文章查看

但是,“标准化”的过程或概念指的是使某物达到标准或“正常”的过程。

在向量的情况下,我们假设一个标准向量的长度为1。因此,标准化一个向量就是将任意长度的向量保持方向不变,将其长度改为1,从而将其转换为所谓的单位向量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接