Followers 0

3 posts in this topic

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.

Edited by hatfarm
0

Share on other sites

What happens if you use glm::translate but you do your uniform call like this

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

0

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.

0

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.

0

Create an account

Register a new account