Tikz: faces de cubo de textura usando imagem png

Tikz: faces de cubo de textura usando imagem png

Eu gostaria de desenhar um cubo usando Tikz com algumas faces do cubo tendo uma textura (a textura seria uma imagem PNG)

meu código atual está no seguinte:

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{3d,calc}
\tikzset{persp/.style={scale=3.0,x={(-0.8cm,-0.4cm)},y={(0.8cm,-0.4cm)}, z={(0cm,1cm)}},points/.style={fill=white,draw=black,thick}}

\begin{document}
\begin{tikzpicture}[persp]\def\i{-15}
    \pgfmathparse{cos(\i)}\let\ci\pgfmathresult
    \pgfmathparse{sin(\i)}\let\si\pgfmathresult 
    \coordinate (Ocube) at (0,0,0);
    \coordinate (Xcube) at (\ci,\si,0);
    \coordinate (Ycube) at (-\si,\ci,0);
    \coordinate (Zcube) at (0,0,1);
    \coordinate (C0) at ($(Ocube)-(Xcube)-(Ycube)-(Zcube)$);
    \coordinate (C1) at ($(Ocube)+(Xcube)-(Ycube)-(Zcube)$);
    \coordinate (C2) at ($(Ocube)-(Xcube)+(Ycube)-(Zcube)$);
    \coordinate (C3) at ($(Ocube)+(Xcube)+(Ycube)-(Zcube)$);
    \coordinate (C4) at ($(Ocube)-(Xcube)-(Ycube)+(Zcube)$);
    \coordinate (C5) at ($(Ocube)+(Xcube)-(Ycube)+(Zcube)$);
    \coordinate (C6) at ($(Ocube)-(Xcube)+(Ycube)+(Zcube)$);
    \coordinate (C7) at ($(Ocube)+(Xcube)+(Ycube)+(Zcube)$);
    \fill[black!20, draw=black, dashed,opacity=0.3] (C0)--(C1)--(C3)--(C2)--cycle;
    \fill[black!20, draw=black, dashed,opacity=0.3] (C0)--(C1)--(C5)--(C4)--cycle;
    \fill[black!20, draw=black, dashed,opacity=0.3] (C0)--(C2)--(C6)--(C4)--cycle;
    \fill[black!20, draw=black, thick,opacity=0.3] (C4)--(C5)--(C7)--(C6)--cycle;
    \fill[black!20, draw=black, thick,opacity=0.3] (C2)--(C3)--(C7)--(C6)--cycle;
    \fill[black!20, draw=black, thick,opacity=0.3] (C1)--(C3)--(C7)--(C5)--cycle;   
    \coordinate (Q0) at ($(Ocube)-.8*(Xcube)+(Ycube)-.8*(Zcube)$);
    \coordinate (Q1) at ($(Ocube)+.8*(Xcube)+(Ycube)-.8*(Zcube)$);
    \coordinate (Q2) at ($(Ocube)-.8*(Xcube)+(Ycube)+.8*(Zcube)$);
    \coordinate (Q3) at ($(Ocube)+.8*(Xcube)+(Ycube)+.8*(Zcube)$);
    \fill[white!20, draw=black, thick,opacity=0.3] (Q0)--(Q1)--(Q3)--(Q2)--cycle;
\end{tikzpicture}
\end{document}

Na última linha, em vez de preencher com uma cor branca (branco!20), gostaria de desenhar a imagem "face.png". Este desenho deve ser distorcido para se ajustar ao rosto de forma realista.

Alguém poderia me ajudar a fazer isso?

Responder1

Não é exatamente uma resposta para a pergunta, mas é divertido.

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{backgrounds}

\begin{document}
\begin{tikzpicture}
  \draw[yellow,yslant=0.5] (0,0) rectangle (2,2);
  \node[yslant=0.5,anchor=center,opacity=0.3]  at (1,1.5) {\includegraphics[width=2cm,height=2cm]{example-image-a}};
  \draw[magenta,yslant=-0.5] (-2,2) rectangle (0,0);
  \node[yslant=-0.5,anchor=center,opacity=0.3]  at (-1,1.5) {\includegraphics[width=2cm,height=2cm]{example-image-b}};
  \begin{scope}[on background layer]
  \draw[orange,yslant=-0.5] (0,2) rectangle (2,4);
  \node[yslant=-0.5,anchor=center,xshift=0cm,yshift=1cm,opacity=0.3]  at (1,1.5) {\includegraphics[width=2cm,height=2cm]{example-image-b}};
  \draw[green,yslant=0.5,,xshift=-2cm,yshift=2cm] (0,0) rectangle (2,2);
  \node[yslant=0.5,anchor=center,xshift=-2cm,yshift=2cm,opacity=0.3]  at (1,1.5) {\includegraphics[width=2cm,height=2cm]{example-image-a}};
\draw[blue,yslant=-0.5,xslant=1] (-2,0) rectangle (0,2);
\node[yslant=-0.5,anchor=center,xshift=0cm,yshift=2cm,xslant=1,opacity=0.3]  at (-0,-1) {\includegraphics[width=2cm,height=2cm]{example-image-a}};
  \end{scope}
  \draw[red,yslant=-0.5,xslant=1] (-4,2) rectangle (-2,4);
\node[yslant=-0.5,anchor=center,xshift=0cm,yshift=4cm,xslant=1,opacity=0.3]  at (-0,-1) {\includegraphics[width=2cm,height=2cm]{example-image-a}};

\end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

Responder2

Existem diversas perguntas no site que abordam o preenchimento de um shape com uma imagem no TikZ, por exemplo:

Podemos adaptar essas soluções à sua forma 3D. Usamos \clippara restringir ao quadrado frontal do cubo, depois adicionamos a imagem e, por fim, desenhamos a borda ao redor dela.

Eu substituí a linha:

\fill[white!20, draw=black, thick,opacity=0.3] (Q0)--(Q1)--(Q3)--(Q2)--cycle;

com

\def\frontsquare{(Q0)--(Q1)--(Q3)--(Q2)--cycle}

\begin{scope}
    \clip \frontsquare;
    \node {\includegraphics{grass.jpg}};
\end{scope}

\draw[black, thick] \frontsquare;

Primeiro defino \frontsquarea área que você deseja preencher. O \clipcontido no escopo restringe tudo o mais que desenhamos nessa área, até \end{scope}. Quando utilizo \includegraphicspara adicionar uma imagem, apenas a parte da imagem que está dentro do quadrado frontal. O \drawcomando então adiciona uma borda.

Esta é a aparência do cubo resultante:

insira a descrição da imagem aqui

e aqui está o código completo:

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{3d,calc}
\tikzset{persp/.style={scale=3.0,x={(-0.8cm,-0.4cm)},y={(0.8cm,-0.4cm)}, z={(0cm,1cm)}},points/.style={fill=white,draw=black,thick}}

\begin{document}
\begin{tikzpicture}[persp]\def\i{-15}
    \pgfmathparse{cos(\i)}\let\ci\pgfmathresult
    \pgfmathparse{sin(\i)}\let\si\pgfmathresult 
    \coordinate (Ocube) at (0,0,0);
    \coordinate (Xcube) at (\ci,\si,0);
    \coordinate (Ycube) at (-\si,\ci,0);
    \coordinate (Zcube) at (0,0,1);
    \coordinate (C0) at ($(Ocube)-(Xcube)-(Ycube)-(Zcube)$);
    \coordinate (C1) at ($(Ocube)+(Xcube)-(Ycube)-(Zcube)$);
    \coordinate (C2) at ($(Ocube)-(Xcube)+(Ycube)-(Zcube)$);
    \coordinate (C3) at ($(Ocube)+(Xcube)+(Ycube)-(Zcube)$);
    \coordinate (C4) at ($(Ocube)-(Xcube)-(Ycube)+(Zcube)$);
    \coordinate (C5) at ($(Ocube)+(Xcube)-(Ycube)+(Zcube)$);
    \coordinate (C6) at ($(Ocube)-(Xcube)+(Ycube)+(Zcube)$);
    \coordinate (C7) at ($(Ocube)+(Xcube)+(Ycube)+(Zcube)$);
    \fill[black!20, draw=black, dashed,opacity=0.3] (C0)--(C1)--(C3)--(C2)--cycle;
    \fill[black!20, draw=black, dashed,opacity=0.3] (C0)--(C1)--(C5)--(C4)--cycle;
    \fill[black!20, draw=black, dashed,opacity=0.3] (C0)--(C2)--(C6)--(C4)--cycle;
    \fill[black!20, draw=black, thick,opacity=0.3] (C4)--(C5)--(C7)--(C6)--cycle;
    \fill[black!20, draw=black, thick,opacity=0.3] (C2)--(C3)--(C7)--(C6)--cycle;
    \fill[black!20, draw=black, thick,opacity=0.3] (C1)--(C3)--(C7)--(C5)--cycle;   
    \coordinate (Q0) at ($(Ocube)-.8*(Xcube)+(Ycube)-.8*(Zcube)$);
    \coordinate (Q1) at ($(Ocube)+.8*(Xcube)+(Ycube)-.8*(Zcube)$);
    \coordinate (Q2) at ($(Ocube)-.8*(Xcube)+(Ycube)+.8*(Zcube)$);
    \coordinate (Q3) at ($(Ocube)+.8*(Xcube)+(Ycube)+.8*(Zcube)$);

    \def\frontsquare{(Q0)--(Q1)--(Q3)--(Q2)--cycle}

    \begin{scope}
        \clip \frontsquare;
        \node {\includegraphics{grass.jpg}};
    \end{scope}

    \draw[black, thick] \frontsquare;
\end{tikzpicture}
\end{document}

informação relacionada