Текстурирование примитива сферы

Я использую Mathematica 8, и я борюсь с текстурированием. Хотя текстурирование многогранных объектов оказалось относительно простым, я столкнулся с проблемой, пытающейся текстурировать сферу. В документации единственный способ текстурирования показанной сферы - использовать SphericalPlot3D, что, IMHO, является решением kludgey, тем более, что я пытаюсь выполнить операции (например: перевод) в сфере. В toto, мой вопрос: есть ли способ текстурирования примитива сферы?

Ответ 1

Вы не можете напрямую текстурировать 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

Ответ 2

Что-то вроде этого будет полезно:

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

Ответ 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

Если я правильно понимаю, ответ Хайке показывает, что первой частью результата является GraphicsComplex, который является графическим примитивом.