GLM:如何转置向量?

Posted

技术标签:

【中文标题】GLM:如何转置向量?【英文标题】:GLM: How to transpose a vector? 【发布时间】:2012-03-25 20:43:34 【问题描述】:

也许我只是在文档中遗漏了一些东西,但 GLM 似乎不可能对向量进行转置。我也看不到 mat3x1 或 mat1x3 类型。 glm::transpose 也不适用于向量。我错过了什么还是这只是 GLM 中缺少的一个功能?

【问题讨论】:

【参考方案1】:

GLM 基于 GLSL,根本不需要转置向量。如果您进行向量/矩阵乘法,它将以适用于矩阵大小的方式乘以向量(除非它必须更改乘法的顺序)。因此,如果您有mat4 并执行mat4*vec4,则您的vec4 被视为列向量。如果你做vec4*mat4,它被认为是一个行向量。如果你使用mat2x4*vec4,你会得到一个错误,而vec4*mat2x4 工作(作为一个行向量)。

所以一般来说,没有理由需要“转置”一个向量。该系统只是做任何工作。

【讨论】:

我明白了,我想那是我不理解的。谢谢。 如果你想计算像 v * transpose(v) 这样的东西,其中 v 是一个 vec4。我想要的是一个 mat4 结果。 IE。将 4x1 和 1x4 相乘得到 4x4。我看不到如何在 GLM 中做到这一点。也许你不能? @Chuck:嗯,这可能是因为它不是一个非常有用的操作。此外,您可以自己轻松地进行数学计算;它只是将向量的每个元素成对相乘。 我自己当然可以。但是,它是一个非常有用的通用操作。例如,它是一个标准的东西,比如 Rodrigues 旋转公式的矩阵公式。仅仅作为语法糖会很好。 APL、A+、k、Matlab 等语言开箱即用。 @Chuck:你说的操作是Outer Product。 GLSL 和 GLM 都可以做到。【参考方案2】:

作为寻找如何在 GLSL/GLM 中转置向量(主要用于计算外积 - u vT)的人的参考;它的:

glm::core::function::matrix::outerProduct(u, v)

Nicol 的 GLM 链接现在为 404,因为他们的 API 链接已从以下格式更改:

旧链接:http://glm.g-truc.net/api-0.9.4/a00133.html#ga5d896e8651512fc098a677dbe403eeac

新链接:http://glm.g-truc.net/0.9.4/api/a00133.html#ga5d896e8651512fc098a677dbe403eeac

【讨论】:

以上是关于GLM:如何转置向量?的主要内容,如果未能解决你的问题,请参考以下文章

如何理解 glm::distance 和 glm::length 背后的向量数学?

如何理解glm中四元数与向量相乘函数的写法

glm::translate - 它是不是从向量构建矩阵?

GLM的向量矩阵乘法行为?

如何为 LookAt 转换获得正确的向上向量?

glm::dot 返回一个向量