2011-04-24 160 views
32

我在搞SDL,发现你不能用SDL旋转图像。有人问到问题,人们说使用OpenGL进行轮换。我一直认为SDL与OpenGL是完全分离的,我错在想这个吗?我甚至发现了在SDL中使用OpenGL的教程,这让我更加困惑。 SDL和OpenGL之间的关系究竟是什么?为什么不只是使用OpenGL,如果它更强大,并允许你做更多(这是从我读过的)?为什么SDL和OpenGL相关?

+0

如何旋转特定问题:https://stackoverflow.com/questions/30198713/how-to-rotate-a-rect-in-sdl2现在可以完成,但更高级的效果将不可能。 SDL + OpenGL最小示例:https:// stackoverflow。com/questions/40061276 /如何绘制三角形与sdl2-and-opengl/40824828#40824828 – 2017-11-22 22:31:25

回答

18

SDL是一个跨平台的多媒体库,旨在提供对音频,键盘,鼠标,操纵杆等的低级访问。它还通过OpenGL支持3D硬件。

OpenGLis a standard specification defining a cross-language, cross-platform API for writing applications that produce 2D and 3D computer graphics。该界面由超过250个不同的函数调用组成,可用于从简单图元中绘制复杂的三维场景。 OpenGL由Silicon Graphics Inc.(SGI)于1992年开发[4],广泛应用于CAD,虚拟现实,科学可视化,信息可视化和飞行模拟。它也用于视频游戏,它在Microsoft Windows平台上与Direct3D竞争(参见OpenGL与Direct3D)。

2

SDL处理输入,窗口创建,图像加载以及OpenGL无法处理的其他一些功能。

3

SDL将OpenGL用作硬件渲染器,用于需要在某些平台上进行硬件渲染的内容。如果你有这样一个平台,那么OpenGL就是SDL是抽象的基础API。

10

SDL是OpenGL上的一层;实际上它默认使用Windows上的GDI,并且还有一个DirectX后端。人们可能会说,你可以使用OpenGL来避开在默认使用OpenGL(ahem,Linux)的平台上SDL 的限制,因为更高级别的抽象并不公开此功能。然而,那么你的代码对于Windows而言是“少”可移植的(或者至少使用GDI后端的Windows)。

此外,SDL除了图形外还有很多其他的功能 - 音频,输入等,OpenGL不会这样做。

+0

是否有文档或其他地方有关SDL在Windows上使用GDI的任何证据? – SerG 2014-01-02 12:48:31

+0

[Wikipedia](http://en.wikipedia.org/wiki/Simple_DirectMedia_Layer)指出GDI是Windows“默认端口”部分的默认后端。 – 2014-01-02 22:44:08

2

正如很多人所说。 SDL处理的不仅仅是渲染。除了处理音频,输入和所有其他好东西以外,它还通过让您访问许多您需要自行实现的功能来简化图形的使用。
因此,SDL是OpenGL之上的抽象层。您仍然可以在应用程序中访问OpenGL,因此可以使用它的全部功能。
一个简单的补充,因为你似乎对这种API是新的:如果你想要一个类似于SDL的API(用于2D图形),我可以推荐看看SFML。它基于C++而不是C具有旋转等功能。它也基于OpenGL。 :)

4

关于您关于旋转图形的示例:最好使用OpenGL(即硬件加速)而不是使用SDL本身(即在CPU上),因为它通常是计算密集型的(特别是如果您有很多位图可以旋转每一帧,并且您希望效果平滑)。

但是,没有任何东西(除了原因)使您无法使用具有模块SDL_rotozoom的SDL_gfx程序包负责旋转和缩放位图。