我在玩SDL的时候,发现SDL不能旋转图像。到处都有人问这个问题,说要用OpenGL来旋转。我一直以为SDL和OpenGL是完全分开的,难道我的想法错了吗?我还找到了在SDL中使用OpenGL的教程,这让我更加困惑。SDL和OpenGL到底是什么关系?为什么不使用OpenGL,如果它更强大,并允许你做更多的(这是从我读到的)?
ffx8fchx1#
SDL是OpenGL之上的一层;实际上,它在Windows上默认使用GDI,并且也有一个DirectX后端。人们可能会说,您可以在默认使用OpenGL* 的平台(嗯,Linux)上使用OpenGL来绕过SDL * 的限制,因为更高级别的抽象不会公开该功能。但是,您的代码在Windows上的可移植性“较低”(或者至少在使用GDI后端的Windows上)。此外,SDL还做了很多其他的事情,除了图形-音频,输入等,OpenGL不这样做。
wwtsj6pe2#
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 vs. Direct3D)。
sqxo8psd3#
SDL使用OpenGL作为硬件渲染器,用于在某些平台上进行硬件渲染的内容。如果您有这样的平台,则OpenGL是SDL抽象的底层API。
7d7tgy0s4#
关于旋转图形的例子:使用OpenGL(即硬件加速)比使用SDL本身(即在CPU上)更好,因为它通常是计算密集型的(特别是如果你有很多位图来旋转每帧,并且你希望效果平滑)。但是,没有什么(除了原因)可以阻止您使用SDL_gfx包,该包包含负责旋转和缩放位图的模块SDL_rotozoom。
rjee0c155#
SDL处理输入、窗口创建、图像加载和其他一些OpenGL无法处理的功能。
ktecyv1j6#
正如许多人所说,SDL处理的不仅仅是渲染。除了处理音频,输入和其他好东西,它还通过让您访问许多功能来简化图形的使用,否则您需要自己实现。因此,SDL是OpenGL之上的抽象层,但是,您仍然可以在应用程序中访问OpenGL,从而充分利用其功能。一个简单的补充,因为你似乎是新的这种API:如果你想要一个API,这是类似于SDL(2D图形),我建议看看SFML。它是基于C++而不是C,并有像旋转的功能。它也是基于OpenGL。:)
6条答案
按热度按时间ffx8fchx1#
SDL是OpenGL之上的一层;实际上,它在Windows上默认使用GDI,并且也有一个DirectX后端。人们可能会说,您可以在默认使用OpenGL* 的平台(嗯,Linux)上使用OpenGL来绕过SDL * 的限制,因为更高级别的抽象不会公开该功能。但是,您的代码在Windows上的可移植性“较低”(或者至少在使用GDI后端的Windows上)。
此外,SDL还做了很多其他的事情,除了图形-音频,输入等,OpenGL不这样做。
wwtsj6pe2#
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 vs. Direct3D)。
sqxo8psd3#
SDL使用OpenGL作为硬件渲染器,用于在某些平台上进行硬件渲染的内容。如果您有这样的平台,则OpenGL是SDL抽象的底层API。
7d7tgy0s4#
关于旋转图形的例子:使用OpenGL(即硬件加速)比使用SDL本身(即在CPU上)更好,因为它通常是计算密集型的(特别是如果你有很多位图来旋转每帧,并且你希望效果平滑)。
但是,没有什么(除了原因)可以阻止您使用SDL_gfx包,该包包含负责旋转和缩放位图的模块SDL_rotozoom。
rjee0c155#
SDL处理输入、窗口创建、图像加载和其他一些OpenGL无法处理的功能。
ktecyv1j6#
正如许多人所说,SDL处理的不仅仅是渲染。除了处理音频,输入和其他好东西,它还通过让您访问许多功能来简化图形的使用,否则您需要自己实现。
因此,SDL是OpenGL之上的抽象层,但是,您仍然可以在应用程序中访问OpenGL,从而充分利用其功能。
一个简单的补充,因为你似乎是新的这种API:如果你想要一个API,这是类似于SDL(2D图形),我建议看看SFML。它是基于C++而不是C,并有像旋转的功能。它也是基于OpenGL。:)