2
我对使用OpenGL ES 2.0相当陌生。也即时使用iPhone和GLM数学库。正如我参考的,我一直在使用本教程:http://tomdalling.com/blog/modern-opengl/03-matrices-depth-buffering-animation/但是我发现很难找到2D OpenGL教程。2D opengl旋转导致精灵失真
我想旋转2D精灵但图像被扭曲。 例如以0度的旋转角度:http://i.imgur.com/yBTN2ST.png和以45度的旋转角度:http://i.imgur.com/cY5IJcg.png
以我精灵类
glm::mat4 projection = glm::ortho(0.0f, 480.0f, 0.0f, 320.0f);
glUniformMatrix4fv(projectionUniform, 1, GL_FALSE, glm::value_ptr(projection));
glm::mat4 newModel = glm::rotate(glm::mat4(), 0.0f, glm::vec3(0, 0, 1));
glUniformMatrix4fv(modelUniform, 1, GL_FALSE, value_ptr(newModel));
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
以我的顶点着色器
vec4 newPosition = vec4(position + offset, 0.0, 1.0);
gl_Position = model * projection * newPosition;
我认为这部分问题是图像是b eing旋转而不考虑纵横比我不知道如何解决这个问题。
谢谢
我试过你的代码,它似乎修复了偏移问题。但是,图像似乎并未围绕其中心旋转。 http://i.imgur.com/C2oIM96.png请您澄清一下您的翻译意思。这是否移动矩阵?谢谢。 – Eamonn
glm :: rotate将围绕原点创建一个旋转。要围绕不同的点旋转,必须将该点翻译为原点,旋转,然后再次翻译。如果精灵的顶点被定义为原点位于中心,那么这很容易。您想要如下组合矩阵:投影*平移*旋转。翻译是一种改变立场。 – GuyRT
明白了。非常感谢你的帮助。 – Eamonn