GLM: How to transpose a vector?

13,614

Solution 1

GLM is based on GLSL, where there's simply no need to transpose a vector. If you do vector/matrix multiplication, it will multiply the vector in the way that works for the size of the matrix (unless it would have to change the order of the multiplication). So if you have a mat4 and do mat4*vec4, your vec4 is considered a column vector. If you do vec4*mat4, it is considered a row vector. If you do mat2x4*vec4, you get an error, while vec4*mat2x4 works (as a row vector).

So in general, there's no reason to need to "transpose" a vector. The system simply does whatever works.

Solution 2

As a reference for people looking for how to transpose a vector (primarily for calculating outer products - u vT) in GLSL/GLM; its:

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

Nicol's GLM link now 404s as their API links have changed format from:

Share:
13,614

Related videos on Youtube

aeskreis
Author by

aeskreis

Updated on June 04, 2022

Comments

  • aeskreis
    aeskreis almost 2 years

    Maybe I'm just missing something in the docs, but it seem it's not possible with GLM to take the transpose of a vector. I also see no mat3x1 or mat1x3 types. Also glm::transpose doesn't work for vectors. Am I missing something or is this just a feature lacking in GLM?

  • aeskreis
    aeskreis about 12 years
    I see, I think that is what I wasn't understanding. Thank you.
  • Chuck
    Chuck about 11 years
    What if you want to calculate something like v * transpose(v) where v is a vec4. What I want is a mat4 as a result. I.e. multiplying a 4x1 and a 1x4 to get a 4x4. I don't see how to do that in GLM. Maybe you can't?
  • Nicol Bolas
    Nicol Bolas about 11 years
    @Chuck: Well, that's probably because it's not a very useful operation. Besides, you can do the math for it yourself easily enough; it's just pairwise multiplying each element of the vector.
  • Chuck
    Chuck about 11 years
    Of course I can do it myself. However, it is a very useful general purpose operation. For instance, it is a standard piece of things like the matrix formulation of the Rodrigues' rotation formula. It would be nice to have merely as syntactic sugar. Languages like APL, A+, k, Matlab, etc... provide this out of the box.
  • Nicol Bolas
    Nicol Bolas about 11 years
    @Chuck: The operation you're talking about is the Outer Product. Which both GLSL and GLM can do.