首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >glm::normalize做了什么?

glm::normalize做了什么?
EN

Stack Overflow用户
提问于 2013-06-27 02:37:29
回答 4查看 24.2K关注 0票数 3

我试图用Java语言从C++源代码编写一个MD5加载器,但是我找不到这行代码在做什么:

代码语言:javascript
复制
animatedJoint.m_Orient = glm::normalize(animatedJoint.m_Orient);

其中animatedJoint.m_Orientvec4。是干什么的呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-06-27 02:40:52

它对animatedJoint.m_Orient向量进行归一化,通过获取向量的法线,并将其复制回向量本身。glm::normalize()方法不会修改您传递给它的对象。

票数 3
EN

Stack Overflow用户

发布于 2013-06-27 04:08:09

glm::normalize做了什么?

简而言之:它对向量进行标准化,即将length设置为1。

详细信息

归一化向量通常只是用来表示纯方向,而不关心大小(设置为1;因此它们的另一个更常见的名称单位向量),即向量推进多远并不重要,但它指向/推动的方向很重要。这也简化了计算--无论是在纸上还是在机器上(例如,点积变成了纯粹的余弦结果,省略了除以长度,等等)。

如果v = <v.x, v.y, v.z>某个非单位向量,即长度/幅值不等于1的向量,那么为了得到归一化(V),我们必须将它的每个分量除以它的长度。

代码语言:javascript
复制
vec3 normalize(const vec3 &v)
{
   float length_of_v = sqrt((v.x * v.x) + (v.y * v.y) + (v.z * v.z));
   return vec3(v.x / length_of_v, v.y / length_of_v, v.z / length_of_v);
}

单位向量的一个较旧的术语是direction cosines。假设矢量v与X轴成角度α,与Y轴成β角,与Z轴成γ角,然后由<cos α, cos β, cos γ>给出它的方向余弦或沿v的单位矢量。当我们不知道v的分量,但知道它与主轴的夹角时,这是很有用的。

余弦函数和单位向量相关的原因可以通过一个简单的二维例子来清楚,这个例子可以扩展到更高的维度。比方说一个向量

代码语言:javascript
复制
v = <3, 4> = 3i + 4j (3 units along X-axis and 4 units along Y-axis)

我们要沿v找到单位向量u。

代码语言:javascript
复制
length of v = √(3² + 4²) = 5
u = <3/5, 4/5>

现在X分量(沿着基数i) 3/5就是沿X轴的长度(相邻的)除以向量的长度(斜边),因为cosα= adj/hyp = 3/5,如果我们知道α,我们也会得到同样的结果。同样的道理也适用于Y分量(沿着基数j),它只不过是cosβ,其中β是相对于Y轴的,或者如果你想相对于X轴测量它,那么它将是90β,除了半径,这就是为什么我们有v=α,单位圆上一点的横坐标和纵坐标,从原点到圆上一点的向量,长度(半径)为1。

票数 14
EN

Stack Overflow用户

发布于 2013-06-27 02:41:26

归一化向量,即缩放其元素,使返回的向量长度为1。许多图形相关函数需要对传递的向量进行归一化。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17327906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档