Я использую 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}}]]
Ответ 2
Что-то вроде этого будет полезно:
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}]
Ответ 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]]]
Если я правильно понимаю, ответ Хайке показывает, что первой частью результата является GraphicsComplex, который является графическим примитивом.