在SDL中缩放精灵

时间:2010-02-15 19:18:23

标签: sdl sprite scale image-scaling

如何在SDL中缩放精灵?

5 个答案:

答案 0 :(得分:8)

SDL不直接提供缩放功能,但an additional library called SDL_gfx提供了旋转和缩放功能。还有another library called Sprig提供了类似的功能。

答案 1 :(得分:1)

如果你使用SDL_RenderCopy()从纹理中获取精灵,你可以进行缩放,但我无法保证你的抗锯齿效果。

使用函数SDL_RenderCopy()传递4个参数:

  • 指向渲染器的指针(您要在其中重新渲染)。
  • 指向纹理的指针(你将获得精灵)。
  • 指向源rect的指针(在纹理上获得精灵的区域和位置)。
  • 和指向dest rect的指针(您要绘制的渲染器上的区域和位置)。

你应该只修改你的目标,例如,如果你要渲染一个300 x 300的图像并且你想要它缩放,你的目标应该是150 x 150或72 x 72或你想要​​的任何值规模。

答案 2 :(得分:0)

易卜拉欣CS解决方案有效。

让我扩展此解决方案并提供代码。 要注意的另一件事是计算左上角为原点的新位置(x,y)以渲染缩放的纹理。

我这样做

// calculate new x and y
int new_x = (x + texture->w/2) - (texture->w/2 * new_scale);
int new_y = (y + texture->h/2) - (texture->h/2 * new_scale);
// form new destination rect
SDL_Rect dest_rect = { new_x, new_y, texture->w * scale, texture->h * scale };
// render
SDL_RenderCopy(renderer, texture, NULL, &dest_rect);

假设textureSDL_Texture,而rendererSDL_Renderer,则可以完全从输入纹理渲染到目标。

答案 3 :(得分:-1)

你没有提供任何代码,所以我假设你正在使用纹理和SDL_Renderer:

使用SDL_RenderCopy()时,纹理将被拉伸以适合目标SDL_Rect,因此如果使目标SDL_Rect更大或更小,则可以执行纹理的简单缩放。

https://wiki.libsdl.org/SDL_RenderCopy

答案 4 :(得分:-3)

如果您使用SFML,那么您将获得一组非常相似的跨平台功能,但图形是硬件加速的,并且免费提供缩放和旋转等功能,无需额外依赖性和在没有明显的CPU运行时间方面。