SDL 2.0中使用OpenGL绘制后,精灵会出现倾斜(变形)的情况

3
我是使用SDL创建窗口并在其中进行OpenGL绘制,绘制完成后使用SDL显示精灵(UI)。这在Windows、OSX和NDK上都可以正常工作,但在iOS上无法正常工作。以下是我绘制精灵的方式:
我首先创建窗口:
int flags = SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN;
gWindow = SDL_CreateWindow("example", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 400, 800, flags);

我创建了渲染器:
gRenderer = SDL_CreateRenderer(gWindow, id, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);

我加载纹理:
SDL_Texture* newTexture = NULL;
SDL_Surface* loadedSurface = SDL_LoadBMP(path.c_str());
newTexture = SDL_CreateTextureFromSurface(gRenderer, loadedSurface);
SDL_FreeSurface(loadedSurface);

这是我进行OpenGL绘图的地方。我加载.3ds模型,加载纹理,使用混合等。

然后我绘制精灵:

    dstRect.x = 0.0f;
    dstRect.y = 0.0f;
    dstRect.w = 128.0f;
    dstRect.h = 64.0f;

    SDL_RenderCopy(gRenderer, newTexture, NULL , &dstRect);

SDL_RenderPresent(gRenderer);

结果很奇怪。精灵显示为倾斜,而不是在矩形中绘制。

result http://vvcap.net/db/zHhZwoZa1ng7caeP1BG3.png

精灵被转换成那样的原因是什么?我该如何解决这个问题?有人遇到过类似的问题吗?

2个回答

1
我觉得相机变换轻微地围绕y轴旋转,透视投影使其看起来有些倾斜。
如果精灵意味着要绘制到屏幕空间,请确保在绘制前启用正交投影,并且宽度和高度为物理屏幕的大小(即480x800)。

即使透视矩阵发生变化,它看起来仍然相同。 - michal.ciurus

0

我没有找到解决方案,但我只是使用了SDL_RenderCopyEx而不是SDL_RenderCopy,然后它就起作用了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接