在 LaTeX 中导入 3D 对象

在 LaTeX 中导入 3D 对象

有没有办法导入对象的 3D 文件(例如 .stl)以便将其 2D 投影绘制到 TeX 文档中?

我很惊讶没有找到有关该问题的任何主题,我认为可以使用 TikZ 或 Asymptote 进行转换。

有什么线索吗?

答案1

pgfplots支持将其作为其绘图处理程序的一部分patch。它有两种不同的输入语法选择:

\begin{tikzpicture}
\begin{axis}
% FokkerDrI_layer_0.facetIdx.dat contains:
% # each row makes up one facet; it
% # consists of 0-based indices into
% # the vertex array
% 0    1     2 % triangle of vertices #0,#1 and #2
% 0    3     1 % triangle of vertices #0,#3 and #1
% 3    4     1
% 5    6     7
% 6    8     7
% 8    9     7
% 8    10      9
% ...
% while FokkerDrI_layer_0.vertices.dat contains
% 105.577      -19.7332   2.85249    % vertex #0
% 88.9233      -21.1254   13.0359    % vertex #1
% 89.2104      -22.1547   1.46467    % vertex #2
% 105.577      -17.2161   12.146
% 105.577      -10.6054   18.7567
% 105.577      7.98161   18.7567
% 105.577      14.5923   12.146
% ...
\addplot3[patch,shader=interp,
    patch table=
         {plotdata/FokkerDrI_layer_0.facetIdx.dat}]
    file
    {plotdata/FokkerDrI_layer_0.vertices.dat};
\end{axis}
\end{tikzpicture}

或者

\begin{tikzpicture}
\begin{axis}[axis equal]
% FokkerDrI_layer_0.patches.dat contains:
% # each row is one vertex; three consecutive
% # vertices make one triangle (patch)
% 105.577    -19.7332    2.85249
% 88.9233    -21.1254    13.0359
% 89.2104    -22.1547    1.46467
% # end of facet 0
% 105.577    -19.7332    2.85249
% 105.577    -17.2161    12.146
% 88.9233    -21.1254    13.0359
% # end of facet 1
\addplot3[patch]
    file
    {plotdata/FokkerDrI_layer_0.patches.dat};
\end{axis}
\end{tikzpicture}

在此处输入图片描述

.3ds该模型是我自己的档案中的几个文件之一(我编写了一个 C++ 程序,将.3ds文件转换为上面提到的格式)。

该示例取自 pgfplots 手册(比较http://pgfplots.sourceforge.net/pgfplots.pdf部分“斑块图”)。数据文件随附pgfplots

pgfplots支持带有明确颜色的色彩图或色块图。纹理映射或照明超出范围。

答案2

例如使用pst-solides3d。如果您的数据定义了一个函数或简单的 3d 点,则可以使用 绘制这些点pst-plot3d。如果数据描述的是 3d 实体,则以这种方式使用它。使用 运行它xelatex

\documentclass{minimal}
\usepackage[svgnames]{pstricks}
\usepackage{pst-solides3d}
\begin{document}

\psset{unit=0.4}
\begin{pspicture}(-4,-8)(6,6)
 \psset{lightsrc=30 -40 10,viewpoint=50 -50 20 rtp2xyz,Decran=50,
   RotX=90,sommets=(sommets_nefer.dat) run}
 \psSolid[object=new,fillcolor=AntiqueWhite,linewidth=0.5\pslinewidth,faces=(faces_nefer.dat) run]
\end{pspicture}

\end{document}

在此处输入图片描述

数据文件是索梅茨_尼弗定义多边形的坐标,脸部检查器定义区域。每个坐标三元组都用 0、1、2、... 编号。这些数字用于多边形。例如:

\psset{unit=0.75cm,lightsrc=10 -20 50,viewpoint=50 -20 30 rtp2xyz,Decran=50}
\begin{pspicture}(-5.5,-2)(6,6)
\psSolid[object=new,fillcolor=red!50,incolor=yellow,action=draw,
 sommets= 2 4 3  -2 4 3  -2 -4 3  2 -4 3  2 4 0 
         -2 4 0  -2 -4 0  2 -4 0  0 4 5   0 -4 5,
 faces={ [0 1 2 3][7 6 5 4][0 3 7 4][3 9 2][1 8 0] 
         [8 9 3 0][9 8 1 2][6 7 3 2][2 1 5 6]},
 num=all,show=all]
\end{pspicture}

在此处输入图片描述

相关内容