Текстурирование примитива сферы - PullRequest
10 голосов
/ 02 января 2012

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

Ответы [ 3 ]

11 голосов
/ 02 января 2012

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

6 голосов
/ 02 января 2012

Как то так будет полезно:

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 голосов
/ 02 января 2012

Для полноты картины вы также можете создавать сферы с текстурами, используя 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, который является графическим примитивом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...