View more

View more

View more

### Image of the Day Submit

IOTD | Top Screenshots

### The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

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.

3 replies to this topic

### #1hatfarm  Members

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.

Edited by hatfarm, 12 April 2013 - 09:31 PM.

### #2TheChubu  Members

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

### #3hatfarm  Members

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.

### #4TheChubu  Members

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.