2012-01-01 18 views
10

Sto usando Mathematica 8 e sto lottando con texturing. Sebbene la texturizzazione di oggetti poliedrici si sia dimostrata relativamente semplice, ho riscontrato un problema nel tentativo di tessere una sfera. Nella documentazione, l'unico modo per strutturare una sfera mostrata è usare SphericalPlot3D, che, IMHO, è una soluzione kludgey, soprattutto perché sto cercando di eseguire operazioni (ad esempio traduzione) sulla sfera. In toto, la mia domanda è: c'è un modo per tessere una sfera primitiva?Texturing a sphere primitive

+0

Correlati: [RegionPlot sulla superficie della sfera unitaria?] (Http://stackoverflow.com/q/5788842/616736) e [Come si ottiene la visualizzazione grafica 3D personalizzata correttamente in Mathematica?] (Http: //stackoverflow.com/q/5603281/616736) – abcd

risposta

11

Non è possibile strutturare direttamente un Sphere, ma è possibile creare una sfera strutturata utilizzando, ad es. SphericalPlot3D ed estrai la prima parte per ottenere una primitiva che puoi manipolare con Translate. Per esempio

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

Qualcosa di simile a questo sarà utile:

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] 

Ora, siamo in grado di animare una sfera strutturato rotante (intorno al vettore {2, 1, 6} ancorata al punto {0,0,0}):

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

enter image description here

+1

No, è quello che sono riuscito a fare ... Voglio texture una Sfera * primitiva *, come prodotta dalla funzione Sphere []. – taktoa

+4

L'applicazione di una trama a 'Sfera []' non è attualmente possibile. –

3

Solo per completezza, si può anche generare sfere con texture utilizzando 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

Se ho capito bene, la risposta di Heike mostra che la prima parte del risultato è un GraphicsComplex, che è una grafica primitiva.

Problemi correlati