2D opengl旋转会导致精灵失真

时间:2013-06-20 11:14:56

标签: c++ ios rotation opengl-es-2.0 glm-math

我很擅长使用OpenGL ES 2.0。我也使用iPhone和GLM数学库。正如我所提到的,我一直在使用本教程:http://tomdalling.com/blog/modern-opengl/03-matrices-depth-buffering-animation/但我发现很难找到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;

我认为问题的一部分是图像在不考虑宽高比的情况下进行旋转我不确定如何解决这个问题。

由于

1 个答案:

答案 0 :(得分:0)

我认为你正在以错误的顺序应用你的转换。

而不是:

gl_Position = model * projection * newPosition;

尝试:

gl_Position = projection * model * newPosition;

更好(避免将两个4x4矩阵相乘):

gl_Position = projection * ( model * newPosition );

更好:在应用程序中将矩阵相乘并在着色器中执行单个矩阵向量乘法。您可能还应该在矩阵中包含翻译。