2012-01-01 33 views
10

Estoy usando Mathematica 8 y estoy luchando con texturizar. Aunque la textura de los objetos poliédricos ha demostrado ser relativamente simple, me tocó un problema al tratar de texturizar una esfera. En la documentación, la única forma de texturizar una esfera que se muestra es usando SphericalPlot3D, que, en mi humilde opinión, es una solución de kludgey, especialmente porque estoy tratando de realizar operaciones (por ejemplo, traducción) en la esfera. En el toto, mi pregunta es: ¿hay alguna forma de texturizar una esfera primitiva?Texturizar una esfera primitiva

+0

Relacionados: [RegionPlot en la superficie de la unidad de esfera?] (Http://stackoverflow.com/q/5788842/616736) y [¿Cómo se obtienen gráficos 3D personalizados para mostrar correctamente en Mathematica?] (Http: //stackoverflow.com/q/5603281/616736) – abcd

Respuesta

11

No se puede texturizar un Sphere directamente, pero podría crear una esfera con textura utilizando, p. Ej. SphericalPlot3D y extrae la primera parte para obtener una primitiva que puedes manipular con Translate. Por ejemplo

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

Algo como esto será útil:

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] 

Ahora, podemos animar una esfera con textura giratorio (alrededor del vector {2, 1, 6} anclado en el punto {0,0,0}):

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

enter image description here

+1

No, eso es lo que logré hacer ... Quiero texturizar una primitiva Esfera *, como la producida por la función Esfera []. – taktoa

+4

Aplicar una textura a 'Esfera []' no es posible actualmente. –

3

simplemente para la corrección, también puede generar esferas con texturas usando 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

Si he entendido bien, la respuesta de Heike muestra que la primera parte del resultado es un GraphicsComplex, que es un gráfico primitivo.

Cuestiones relacionadas