在OpenGL绘制之后,SDL 2.0精灵会绘制偏斜(变换)

时间:2014-10-12 16:45:18

标签: c++ ios opengl-es opengl-es-2.0

我使用SDL创建一个窗口并在其中绘制OpenGL,在绘制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

sprite被改造的原因是什么?我怎样才能解决这个问题 ? 有没有人有类似的问题?

2 个答案:

答案 0 :(得分:1)

我几乎看起来好像相机变换绕y轴略微旋转,透视投影使其看起来歪斜。

如果要将精灵绘制到屏幕空间中,请确保在绘制之前启用了正交投影,宽度和高度是物理屏幕的大小(即480x800)。

答案 1 :(得分:0)

我没有找到解决方案,但我只使用了SDL_RenderCopyEx代替SDL_RenderCopy而且效果很好。