gpt4 book ai didi

c++ - 2D opengl旋转导致 Sprite 失真

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:56:53 26 4
gpt4 key购买 nike

我对使用 OpenGL ES 2.0 还很陌生。我也在使用 iPhone 和 GLM 数学库。正如我所提到的,我经常使用本教程:http://tomdalling.com/blog/modern-opengl/03-matrices-depth-buffering-animation/但是我发现很难找到 2D OpenGL 教程。

我正在尝试旋转 2D Sprite ,但图像扭曲了。例如,旋转角度为 0 度:http://i.imgur.com/yBTN2ST.png并以 45 度的旋转角度:http://i.imgur.com/cY5IJcg.png

在我的 Sprite 类中

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;

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

谢谢

最佳答案

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

代替:

gl_Position = model * projection * newPosition;

尝试:

gl_Position = projection * model * newPosition;

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

gl_Position = projection * ( model * newPosition );

甚至更好:在您的应用程序中乘以您的矩阵,并在您的着色器中执行单个矩阵 vector 乘法。您可能还应该在矩阵中包含翻译。

关于c++ - 2D opengl旋转导致 Sprite 失真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17212180/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com