【问题标题】:SDL 2.0 sprite draws skewed (transformed) after OpenGL drawsSDL 2.0 sprite 在 OpenGL 绘制后绘制倾斜(变形)
【发布时间】:2015-02-17 22:23:54
【问题描述】:

我正在使用 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

精灵被这样转换的原因可能是什么?我怎样才能解决这个问题 ? 有没有人遇到过类似的问题?

【问题讨论】:

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


    【解决方案1】:

    在我看来,相机变换似乎围绕 y 轴略微旋转,而透视投影使其看起来倾斜。

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

    【讨论】:

    • 透视矩阵变化时看起来一样
    【解决方案2】:

    我没有找到解决方案,但我只是使用 SDL_RenderCopyEx 而不是 SDL_RenderCopy 并且它有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多