PGFplots z 缓冲区无法正确对绘制的对象进行排序

PGFplots z 缓冲区无法正确对绘制的对象进行排序

我有一个 PGFplots 轴环境,在其中我尝试绘制几个线对象和一个表面对象。

必须对对象进行“排序”,即哪个对象画在另一个对象之前或之后。

PGFplots 中的密钥z buffer应该可以解决这个问题,但我似乎无法让它正常工作。

根据脚本中对象的顺序,表面对象会使线对象消失,或者线对象仅显示在表面对象的顶部,而它们应该在后面。

我该如何解决这个问题?

最小工作示例:

\documentclass{standalone}

\usepackage{filecontents}

\begin{filecontents}{3ddata.dat}
0   0   0
0.125   0   0
0.25    0   0
0.375   0   0
0.5 0   0
0.5 0   0
0.625   0   0
0.75    0   0
0.875   0   0
1   0   0
0   0.125   0.25
0.125   0.125   0.1875
0.25    0.125   0.125
0.375   0.125   0.0625
0.5 0.125   0
0.5 0.125   0
0.625   0.125   0
0.75    0.125   0
0.875   0.125   0
1   0.125   0
0   0.25    0.5
0.125   0.25    0.375
0.25    0.25    0.25
0.375   0.25    0.125
0.5 0.25    0
0.5 0.25    0
0.625   0.25    0
0.75    0.25    0
0.875   0.25    0
1   0.25    0
0   0.375   0.75
0.125   0.375   0.5625
0.25    0.375   0.375
0.375   0.375   0.1875
0.5 0.375   0
0.5 0.375   0
0.625   0.375   0
0.75    0.375   0
0.875   0.375   0
1   0.375   0
0   0.5 1
0.125   0.5 0.75
0.25    0.5 0.5
0.375   0.5 0.25
0.5 0.5 0
0.5 0.5 0
0.625   0.5 0
0.75    0.5 0
0.875   0.5 0
1   0.5 0
0   0.5 1
0.125   0.5 0.75
0.25    0.5 0.5
0.375   0.5 0.25
0.5 0.5 0
0.5 0.5 0
0.625   0.5 0
0.75    0.5 0
0.875   0.5 0
1   0.5 0
0   0.625   0.75
0.125   0.625   0.5625
0.25    0.625   0.375
0.375   0.625   0.1875
0.5 0.625   0
0.5 0.625   0
0.625   0.625   0
0.75    0.625   0
0.875   0.625   0
1   0.625   0
0   0.75    0.5
0.125   0.75    0.375
0.25    0.75    0.25
0.375   0.75    0.125
0.5 0.75    0
0.5 0.75    0
0.625   0.75    0
0.75    0.75    0
0.875   0.75    0
1   0.75    0
0   0.875   0.25
0.125   0.875   0.1875
0.25    0.875   0.125
0.375   0.875   0.0625
0.5 0.875   0
0.5 0.875   0
0.625   0.875   0
0.75    0.875   0
0.875   0.875   0
1   0.875   0
0   1   0
0.125   1   0
0.25    1   0
0.375   1   0
0.5 1   0
0.5 1   0
0.625   1   0
0.75    1   0
0.875   1   0
1   1   0
\end{filecontents}
\usepackage{pgfplots}

\begin{document}
    \begin{tikzpicture}
        \begin{axis}

            % Plot the function cuts at the boundary.
            \addplot3 [color=red,solid] table {
0   0.5 0
0   0   1
0.5 0   0
};
            \addplot3 [color=red,solid] table {
0   0   0
0.5 0   1
1   0   0
            };
            \addplot3 [color=red,solid] table {
0.5 0   0
1   0   1
1   0.5 0
};
            \addplot3 [color=red,solid] table {
0   1   0
0   0.5 1
0   0   0
};
            \addplot3 [color=red,solid] table {
1   0   0
1   0.5 1
1   1   0
};
            \addplot3 [color=red,solid] table {
0.5 1   0
0   1   1
0   0.5 0
};
            \addplot3 [color=red,solid] table {
1   1   0
0.5 1   1
0   1   0
};
            \addplot3 [color=red,solid] table {
1   0.5 0
1   1   1
0.5 1   0
};

            % Plot function on the interior.
            \addplot3
            [
                surf,
                mesh/rows=10,
                blue,
                faceted color=black,
            ]
            table[header=false] {3ddata.dat};

        \end{axis}
    \end{tikzpicture}
\end{document}

最终结果如下:

答案1

手册(v1.11)的第 4.6.1 节pgfplots有以下内容z buffer

pgfplots 在一定程度上支持 z 缓冲技术:它对于单散点图(z buffer=sort)、网格或曲面图(z buffer=auto)或参数网格和曲面图(z buffer=sort)效果很好。但是,它不能组合不同的 \addplot 命令,这些命令将按出现的顺序绘制。有时您可能会遇到限制。也许它会在未来的版本中得到改进。

如果您决定需要高复杂度、高速度和 100% 可靠的 z 缓冲区(深度信息),则应考虑使用其他可视化工具,并在几年后返回 pgfplots。如果您可以等待复杂的图片,并且甚至看不到 z 缓冲限制带来的限制,则应该使用 pgfplots。

就你的情况而言,由于你使用不同的\addplot命令来绘图,所以你改变出现顺序的努力不会奏效。你应该尝试使用单个\addplot命令(如果可能)或尝试使用其他工具来绘制图形。

相关内容