2012-01-01 2 views
10

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

+0

Связанный: [RegionPlot на поверхности единичного шара?] (Http://stackoverflow.com/q/5788842/616736) и [Как вы можете настроить пользовательскую 3D-графику для корректного отображения в Mathematica?] (Http: //stackoverflow.com/q/5603281/616736) – abcd

ответ

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

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

+1

Нет, это то, что мне удалось сделать ... Я хочу текстурировать примитив Sphere *, созданный функцией Sphere []. – taktoa

+4

Применение текстуры к 'Sphere []' в настоящее время невозможно. –

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, что графический примитив.

Смежные вопросы