2012-07-25 65 views
32

我目前正在学习OpenGL中的照明,它利用GLSL中称为normalize的函数。根据OpenGL文档,它说它“计算两个向量的标准化产品”。但是,它仍不能解释“标准化”的含义。我试图寻找谷歌上的标准化产品,但我似乎无法找到任何有关它的信息。任何人都可以解释什么是标准化手段,并提供一些标准化值的例子吗?正常化一个值是什么意思?

+0

你是从哪里找到的?在glsl规范中有:normalize(genType x) - 返回与x相同方向的向量,但其长度为1. http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.20.8 .pdf – fen 2012-07-25 07:11:34

+0

在这里,我认为这是我搜索它时第一个出现的东西。 http://www.opengl.org/sdk/docs/manglsl/xhtml/normalize.xml – TheAmateurProgrammer 2012-07-25 07:14:49

+0

奇怪......但描述有一个适当的信息。 – fen 2012-07-25 07:17:58

回答

13

这是一个数学术语和this link解释很简单来说它的意义:

操作在2D和3D计算机图形通常使用已经正常化,即矢量的副本进行。转换为单位矢量...归一化矢量包括两个步骤:

  1. 计算其长度,然后,
  2. 鸿沟它的每一个(或xyxyz)由它的长度分量...
39

我认为混淆来自于将“一种价值”正规化而不是“一种向量”的想法;如果你只是将一个数字看作一个值,那么规范化就没有任何意义。标准化仅适用于矢量时有用。

一个向量是一个数字序列;在3D图形中,它通常表示为v = <x,y,z>的坐标。

每个矢量具有幅度长度,其可以使用Pythagora定理中找到:|v| = sqrt(x^2 + y^2 + z^2)这基本上是从原点<0,0,0>一行由矢量表示的点的长度。

一个载体是正常如果它的长度是1.就是这样!

使一个向量标准化意味着改变它,使它指向相同的方向(从原点看那条线),但其长度为1。

我们使用法向量的主要原因是表示方向;例如,如果建模距离无限远的光源,则无法给出精确的坐标。但是,您可以通过使用法向矢量来指示从特定点开始找到它的位置。

+1

规范化的确有意义为一个单一的价值。这就是sign(x)所做的。 – Jessy 2012-07-25 18:16:38

+0

@Jessy Fair够了,但比3矢量的情况要少得多。 – benzado 2012-07-25 19:21:49

+0

可能。不过,我认为这有助于理解这个概念。例如,我认为想象一下使用标准化的“n> 1向量”和“标准化的1向量”的点积很有用。您可以想象其他维度的贡献如何不影响矢量之间的角度。只有匹配1-矢量的维度才是重要的。 – Jessy 2012-07-25 23:41:18