纹理球体基元

时间:2012-01-01 21:36:50

标签: wolfram-mathematica

我正在使用Mathematica 8,我正在努力进行纹理化。尽管多面体对象的纹理化已被证明相对简单,但我在尝试纹理球体时遇到了问题。在文档中,纹理显示的球体的唯一方法是使用SphericalPlot3D,恕我直言,这是一个kludgey解决方案,特别是因为我正在尝试在球体上执行操作(例如:翻译)。 在toto 中,我的问题是:有没有办法纹理一个球体原语?

3 个答案:

答案 0 :(得分:11)

您无法直接对Sphere进行纹理处理,但可以使用以下方法创建纹理球体: SphericalPlot3D并提取第一部分以获取可以使用Translate操作的基元。例如

sphere = SphericalPlot3D[1, th, phi, Mesh -> False, PlotPoints -> 25,
  PlotStyle -> {Opacity[1], Texture[ExampleData[{"ColorTexture", "GiraffeFur"}]]},
  TextureCoordinateFunction -> ({#4, #5} &)][[1]];

Graphics3D[Translate[sphere, {{0, 0, 0}, {2, 2, 2}}]]

textured spheres

答案 1 :(得分:6)

这样的事情会有所帮助:

enter image description here

enter image description here

sphere = SphericalPlot3D[1, {u, 0, Pi}, {v, 0, 2 Pi},
                             TextureCoordinateFunction -> ({2 #5, 1 - 2 #4} &), 
                             PlotStyle -> { Lighting -> "Neutral", Axes -> False,
                             Boxed -> False, Texture[texture]},     Mesh -> None][[1]];

F[k_] := Graphics3D[ Rotate[ sphere, k, {2, 1, 6}, {0, 0, 0}], Boxed -> False]

现在,我们可以设置旋转纹理球体的动画(围绕锚点{2, 1, 6}锚定的矢量{0,0,0}):

Animate[F[k], {k, 0, 2 Pi}]

enter image description here

答案 2 :(得分:3)

为了完整起见,您还可以使用ParametricPlot3D生成带纹理的球体。

map = ExampleData[{"TestImage", "Lena"}];
sphere = ParametricPlot3D[{Cos[u] Sin[v], Sin[u] Sin[v], Cos[v]}, {u, 
  0, 2 Pi}, {v, 0, Pi}, Mesh -> None, 
TextureCoordinateFunction -> ({#4, 1 - #5} &), 
Lighting -> "Neutral", Axes -> False, Boxed -> False, 
PlotStyle -> Texture[Show[map]]]

lenasphere

如果我理解正确,Heike的答案显示结果的第一部分是GraphicsComplex,它是一个图形基元。