2

我对使用 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;

我认为问题的一部分是图像在没有考虑纵横比的情况下被旋转,我不确定如何解决这个问题。

谢谢

4

1 回答 1

0

我认为您以错误的顺序应用您的转换。

代替:

gl_Position = model * projection * newPosition;

尝试:

gl_Position = projection * model * newPosition;

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

gl_Position = projection * ( model * newPosition );

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

于 2013-06-20T12:52:08.510 回答