【问题标题】:Unexpected order of appearance / visual stacking of patches in MatlabMatlab中补丁的意外外观顺序/视觉堆叠
【发布时间】:2018-02-16 09:37:45
【问题描述】:

我的 MATLAB GUIDE 应用程序似乎存在关于 3D 补丁渲染的问题。遗憾的是,我无法在另一个 GUIDE 实例中或仅在 Matlab 图中重现该问题。

当绘制包含面的 3D-Patch 时(从给定的角度来看,这会相互遮挡)。通过面看不到轴的网格线,但通过另一个面可以看到被遮挡面的边缘。 下图显示了我的两个矩形的问题:第二个矩形的边缘不应该通过第一个矩形可见!我尝试更改 FaceColor 和我能找到的所有“Alpha”属性,但没有任何帮助。

Example of the obscured face beeing seen through the other one

Edge Visibility Bug - 您看不到对象后面的网格线,但每个 Edge 都是可见的,就好像您可以看到它的内部一样。

此外,当绘制多个面片时,最后定义的面片会显示在其他面片的前面,无论采用何种视角。下图显示了这一点。

Visual Stacking Bug - 左边的柱子通常应该可以看到,因为它在架子前面。

通常,在 3D 情况下,如果在另一个对象前面看到一个对象,则它更接近观察者的点。然后,当您将对象的视角改变 180 度时,另一个应该在前面,因为它现在更近了。这不会发生在我在 Matlab 应用程序中的图中。

谷歌搜索让我相信,这个问题可能与渲染器有关,或者是隐藏表面移除/Z-Buffer/....
在执行补丁命令之前,我尝试将渲染器切换到 z-buffer、painters 并返回到 opengl,但老实说,我没有看到任何区别,也不知道我是否做得正确。

请帮我解决这个问题,很遗憾我无法将我的代码追溯到它第一次出现的那一刻。也许它只是像渲染器这样的设置?还是图中的补丁的视觉堆叠?

【问题讨论】:

  • 嗯,不错。您是在问什么,还是只是在展示它?
  • 抱歉,我说得不够清楚:我不想要这种出现顺序,你能帮我解决这个意外行为吗?
  • 我们没有代码,所以我们不知道如何重现它,很明显。熟悉How to Ask 并始终提供minimal reproducible exampleedit你的问题很好,添加问题和相关信息
  • 好的,我来了!谢谢你给我指点礼仪!与此同时,我将把这个问题留在这里,因为它以某种方式遇到了完全相同的问题。
  • 等等,你有什么问题?这些盒子是透明的,但根本没有视觉伪影,即使你的眼睛似乎看到了它们。例如,在第二张图片中,立方体的每个面都由对角线隔开,但所有线条都位于应有的位置。只需使用属性 facecolor 填充您的补丁

标签: matlab matlab-figure patch matlab-guide perspective


【解决方案1】:

Mathworks-Support-Team 迅速帮助我解决了这个问题:

如果您将坐标区的“SortMethod”设置为“childorder”而不是默认设置“depth”,则您描述的行为是预期的。请在您的 GUIDE GUI 中检查此属性的设置。请参阅以下内容以了解有关该属性的更多信息:

http://www.mathworks.com/help/releases/R2017b/matlab/ref/matlab.graphics.axis.axes-properties.html#property_d119e55686

您可以通过在 MATLAB 提示符下键入以下内容在本地访问同一页面:

web([docroot, '/matlab/ref/matlab.graphics.axis.axes-properties.html#property_d119e55686'])

我不知道此属性在我的应用程序中是如何更改的,但我很高兴可以通过在 GUIDE 中更改此属性轻松修复它。希望这对某人有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 2023-01-23
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    相关资源
    最近更新 更多