我正在寻找一种解决方案,可以在立方体的表面上(或具有透视的类似 3d 平面)进行绘制,最好使用tikz
。基础知识在Tikz:使用 png 图像纹理立方体表面但这并不能解决图像扭曲的问题。我 100% 肯定,我在网上看到过这样的解决方案,95% 是在 SE 上,一张脸上有 Tux,但我再也找不到了,因此如果你能引导我找到这个问题或解决方案,那就太好了!
答案1
这只是为了澄清问题。透视投影和正交投影之间是有区别的。对于后者,将图片投影到立方体上几乎是微不足道的。
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{perspective,3d}
\tikzset{pics/perspective cuboid/.style={code={
\tikzset{perspective cuboid/.cd,#1}%
\def\pv##1{\pgfkeysvalueof{/tikz/perspective cuboid/##1}}%
\draw (tpp cs:x=-\pv{a},y=-\pv{a},z=-\pv{a})
-- (tpp cs:x=\pv{a},y=-\pv{a},z=-\pv{a})
-- (tpp cs:x=\pv{a},y=\pv{a},z=-\pv{a})
-- (tpp cs:x=-\pv{a},y=\pv{a},z=-\pv{a}) -- cycle
(tpp cs:x=-\pv{a},y=-\pv{a},z=\pv{a}) edge (tpp cs:x=-\pv{a},y=-\pv{a},z=-\pv{a})
-- (tpp cs:x=\pv{a},y=-\pv{a},z=\pv{a}) edge (tpp cs:x=\pv{a},y=-\pv{a},z=-\pv{a})
-- (tpp cs:x=\pv{a},y=\pv{a},z=\pv{a}) edge (tpp cs:x=\pv{a},y=\pv{a},z=-\pv{a})
-- (tpp cs:x=-\pv{a},y=\pv{a},z=\pv{a}) edge (tpp cs:x=-\pv{a},y=\pv{a},z=-\pv{a})
-- cycle;
}},perspective cuboid/.cd,a/.initial=1}
\begin{document}
\begin{tikzpicture}[3d view,perspective]
\pic{perspective cuboid};
\end{tikzpicture}
\begin{tikzpicture}[3d view]
\pic{perspective cuboid};
\begin{scope}[canvas is xz plane at y=-1,transform shape]
\node{\includegraphics[width=2cm,height=2cm]{example-image-duck}};
\end{scope}
\end{tikzpicture}
\end{document}
可以使用库将图像投影到第一个立方体的面上,该立方体以透视投影方式绘制perspective
?是的,可以。一些相关帖子如下
- https://tex.stackexchange.com/a/319271/
- https://tex.stackexchange.com/a/447120/
- https://tex.stackexchange.com/a/479188/
如您所见,它们都不是微不足道的,对于复杂的图像,编译将需要一段时间。因此,我恳请您将问题说得更精确一些,这样就不会有人花大量时间去做这件事,结果却听到“哦,这不是我想要的”。