MATLAB图像渲染: OpenGL vs. Painters?

6

在处理MATLAB图形时,我对使用哪种渲染器毫无头绪,也不知道它何时起作用,但我遇到了某些例子,在这些例子中,确实很重要:

plot(0,0,'ko','markersize',50,'linewidth',8);
set(gcf,'renderer','opengl');
set(gcf,'renderer','painters');

左=OpenGL,右=Painters:

OpenGL渲染结果Painters渲染结果

(运行在Windows 7 Professional和MATLAB R2015b上)

在什么情况下使用OpenGL渲染器会比Painters渲染器产生更好的结果? 一般来说,这两个渲染器有何不同?


4
有趣的问题。作为一个经常使用MATLAB制作出版质量图形的非专业人士,如果能有一个明确的答案就好了。 - mikkola
点击这里阅读。通常情况下,绘图器更快。OpenGL在3D图的质量方面有很大的提升,特别是如果您使用光照或透明度,或者您拥有Retina显示屏。 - horchler
有没有一种方法可以将“painters”设置为所有绘图的默认值?在R2016a中,默认值是“opengl”。编辑:找到了答案:将set(0,'DefaultFigureRenderer','painters')放入startup.m中。 - Normadize
1
@horchler 提供的链接有误,但这里有个简短的说明:https://www.mathworks.com/help/matlab/ref/matlab.ui.figure-properties.html#property_d119e283913。 - EBH
1个回答

1
这些是我所知道的区别:
  • OpenGL是默认渲染器
  • OpenGL允许绘制透明度,而Painter不行
  • 如果使用OpenGL时出现图形错误或Matlab崩溃,请使用Painter
  • 选择Painter以postscript格式导出图像。当图像变得过于复杂时,使用OpenGL会将Matlab保存为位图,无法编辑。

来自Mathworks网站(滚动到“renderer”)

  • 'opengl' — OpenGL® 渲染器。如果您的系统支持,此选项允许MATLAB访问图形硬件。OpenGL渲染器将对象按照从前到后的顺序显示在监视器上。当处于监视器平面上相同位置时,线条始终在表面前面。

  • 'painters' — Painters 渲染器。此选项可用于2D视图中的轴。在2D中,Painters 渲染器按子代顺序(指定顺序)对图形对象进行排序。在3D中,Painters 渲染器按前后顺序排序对象。但是,在3D中它可能无法正确地绘制相交的多边形。

还可以参见此链接,了解如何使用OpenGL解决低级别图形问题。


我已经添加了链接。 - user1097111
因此,画家似乎专门使用CPU进行渲染。在可能出现opengl Z-fighting的情况下(例如,在同一绘图中绘制2D对象和3D绘图对象),画家似乎会一致地显示表面。 - Noob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接