Jump to content

  • Log In with Google      Sign In   
  • Create Account


GLM issues, please help


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
3 replies to this topic

#1 hatfarm   Members   -  Reputation: 224

Like
0Likes
Like

Posted 12 April 2013 - 09:12 PM

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, 12 April 2013 - 09:31 PM.


Sponsor:

#2 TheChubu   Crossbones+   -  Reputation: 4101

Like
0Likes
Like

Posted 12 April 2013 - 09:42 PM

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));


"I AM ZE EMPRAH OPENGL 3.3 THE CORE, I DEMAND FROM THEE ZE SHADERZ AND MATRIXEZ"

 

My journals: dustArtemis ECS framework and Making a Terrain Generator


#3 hatfarm   Members   -  Reputation: 224

Like
0Likes
Like

Posted 12 April 2013 - 11:12 PM

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.



#4 TheChubu   Crossbones+   -  Reputation: 4101

Like
0Likes
Like

Posted 13 April 2013 - 12:01 AM

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. 


"I AM ZE EMPRAH OPENGL 3.3 THE CORE, I DEMAND FROM THEE ZE SHADERZ AND MATRIXEZ"

 

My journals: dustArtemis ECS framework and Making a Terrain Generator





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS