Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们应该使用OpenGL进行二维图形吗?_Opengl_Graphics_Gdi - Fatal编程技术网

我们应该使用OpenGL进行二维图形吗?

我们应该使用OpenGL进行二维图形吗?,opengl,graphics,gdi,Opengl,Graphics,Gdi,如果我们想制作一个像MS Paint这样的应用程序,我们应该使用OpenGL来渲染图形吗? 我想谈谈使用传统GDI与OpenGL时的性能。 如果有更好的库,请找我一个。GDI,X11,OpenGL。。。是渲染API,即通常不将其用于图像处理(您可以这样做,但需要一些预防措施) 在诸如MS Paint之类的绘图应用程序中,如果它是基于像素的,则通常使用常规代码或特殊的图像处理库处理一些图片缓冲区,然后将完整的缓冲区发送到渲染API 如果您的数据模型由笔划和单个形状(即矢量图形)组成,那么OpenG

如果我们想制作一个像MS Paint这样的应用程序,我们应该使用OpenGL来渲染图形吗? 我想谈谈使用传统GDI与OpenGL时的性能。
如果有更好的库,请找我一个。

GDI,X11,OpenGL。。。是渲染API,即通常不将其用于图像处理(您可以这样做,但需要一些预防措施)

在诸如MS Paint之类的绘图应用程序中,如果它是基于像素的,则通常使用常规代码或特殊的图像处理库处理一些图片缓冲区,然后将完整的缓冲区发送到渲染API


如果您的数据模型由笔划和单个形状(即矢量图形)组成,那么OpenGL是一个非常好的后端。然而,可能值得研究其他一些矢量图形API,比如OpenVG(在其当前的实现中,OpenVG位于OpenGL之上,但直接在GPU上运行的本机实现可能会出现)

在您的使用场景中,您不会在当前计算机上遇到任何性能问题,因此不要根据该标准选择API。在纹理、alpha混合等方面,OpenGL肯定比GDI快。但是,根据系统和GPU的不同,纯GDI在绘制圆弧或用复杂的缠绕规则填充复杂的自交多边形等简单的事情上可能比OpenGL表现更好。

没有理由不使用OpenGL。除非你有多年的GDI经验,但对OpenGL一无所知

另一方面,OpenGL在许多情况下可能非常优秀。如果计算机中有一个合理的新卡,在GLSL着色器中合成层或调整色调/饱和度/亮度/对比度将快几个数量级(事实上,几乎“立即”)。用“模糊”笔笔划自由画路径(即一次又一次地将精灵与alpha透明度混合)会快几个数量级。在尺寸合理的图像上,大多数过滤器内核应该接近实时运行。在硬件中运行双线性过滤的重缩放


这样的事情在512x512图像上并不重要,因为在这样的分辨率下几乎所有东西都是瞬时的,但在数码相机拍摄的典型4096x3072(或更大)图像上,这可能非常明显,特别是如果您有4-6层

在其当前的实现中,它位于OpenGL之上,但是直接在GPU上运行的本机实现可能会出现“->这是什么意思?@Calvin1602:到目前为止,现有的OpenCV实现都使用OpenGL作为后端。然而,GPU供应商可能决定实现优化的OpenCV驱动程序,直接访问GPU,而无需中间OpenGL层。矢量图形的某些方面很难用OpenGL表达,因此应该寻求一种更直接的方法。你的答案中不是混合了openCV、openVG,或者openCL吗?我完全不明白你的意思。哦,我很抱歉,如果我是指OpenVG的话。我正在准备关于OpenCV的讲座幻灯片;弗洛伊德的打字错误:P–我是指OpenVG。&@Calvin1602:我能理解你的意思。