GLM:如何转置矢量?

aes*_*eis 7 c++ vector glm-math

也许我只是遗漏了文档中的内容,但似乎GLM不可能采用向量的转置.我也看不到mat3x1或mat1x3类型.glm :: transpose也不适用于矢量.我错过了什么或者这只是GLM缺乏的功能吗?

Nic*_*las 8

GLM基于GLSL,根本不需要转置矢量.如果进行向量/矩阵乘法,它将以对矩阵大小有效的方式乘以向量(除非它必须改变乘法的顺序).因此,如果你有a mat4和do mat4*vec4,你的vec4被认为是列向量.如果这样做vec4*mat4,则将其视为行向量.如果你这样做mat2x4*vec4,你会得到一个错误,同时vec4*mat2x4工作(作为行向量).

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

  • @Chuck:您正在谈论的操作是[外部产品](http://en.wikipedia.org/wiki/Outer_product).哪个[GLSL](http://www.opengl.org/sdk/docs/manglsl/xhtml/outerProduct.xml)和[GLM](http://glm.g-truc.net/api-0.9.4 /a00133.html#ga5d896e8651512fc098a677dbe403eeac)可以做到. (6认同)
  • 如果你想计算类似 v * transpose(v) 的东西,其中 v 是 vec4,该怎么办?我想要的是一个 mat4 结果。即,将 4x1 与 1x4 相乘得到 4x4。我不知道如何在 GLM 中做到这一点。也许你不能? (2认同)

dr *_*bob 6

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

glm::core::function::matrix::outerProduct(u, v)
Run Code Online (Sandbox Code Playgroud)

Nicol 的 GLM 链接现在是 404,因为他们的 API 链接格式从: