我使用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被改造的原因是什么?我怎样才能解决这个问题 ? 有没有人有类似的问题?
答案 0 :(得分:1)
我几乎看起来好像相机变换绕y轴略微旋转,透视投影使其看起来歪斜。
如果要将精灵绘制到屏幕空间中,请确保在绘制之前启用了正交投影,宽度和高度是物理屏幕的大小(即480x800)。
答案 1 :(得分:0)
我没有找到解决方案,但我只使用了SDL_RenderCopyEx
代替SDL_RenderCopy
而且效果很好。