Sign in to follow this  

GLM issues, please help

Recommended Posts

So, I'm having some issues with GLM.  At first I was doing my own matrix math, but I thought I had a rotation problem.  Unfortunately, switching to GLM has actually decreased my progress.  I just want to see what happens when I translate and it doesn't work right.  I'm wondering if I'm doing something wrong.  Here's the code I'm writing:


 glm::mat4 ret = glm::translate(glm::mat4(1.0f), glm::vec3(m_trans.x, m_trans.y, m_trans.z));


m_trans is a vec3, but I thought maybe that was part of the problem, that's why I'm using the vec3 constructor.  Anyway, it's doing some weird stuff, I printed out the matrix ret and I see that it's giving me ret[3][0] and ret[3][1] have values.  Instead of ret[0][3] and ret[1][3].  When I changed the code above to be: 


glm::mat4 ret(1.0f);
ret[0][3] = m_trans.x;
ret[1][3] = m_trans.y;
ret[2][3] = m_trans.z;


It worked properly.  Am I doing something wrong?  The way I'm putting the matrix into the shader is:


glUniformMatrix4fv(m_worldUniform, 1, GL_TRUE, glm::value_ptr(m_worldMat));


I'm sure there's something I'm doing wrong, but I cannot figure it out.  


Then, there's the issue with rotation.  When the box is rotated 90 degrees, it is wider than it is high, despite being 256x256 in size when I create it (I take the width/height of the window and convert that to the [-1,1] field.  This happens when I did my own rotation ,and when I use the glm rotation.  Any ideas?  Thanks ahead of time.


EDIT:  I'm using the most recent version of GLM.

Edited by hatfarm

Share this post

Link to post
Share on other sites

Genius!  That worked.  I also figured out the problem with rotating.  Since I was scaling the vertices to the screen without using the MVP to scale them, the height was larger than the width, and so when it was turned, that showed.

Share this post

Link to post
Share on other sites

GLM works with column major order just like OpenGL default behavior. That boolean flag indicates if it must transpose the matrix.


GL_FALSE = Leaves it as it is. What you should do if your matrix already is in column major order.

GL_TRUE = Transposes it. What you should do if your matrix is in row major order and you need to change it to column major order so OpenGL can work on it.


And yeah, if you're scaling by non-uniform values (ie, not the same scaling for all the axis), your mesh will deform when rotating it. 

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this