# How can I use multiple Textures in Graphics3D

I am creating a Graphics3D object for a box using 6 Polygons (1 per side). I can use one single Texture on one or more sides but I can not find a way to use different Textures for different sides of the box. Is there any way to achieve this?

• You can set Texture before each polygon: {Texture[t1], Polygon[pts1,VertexTextureCoordinates -> vtc1], Texture[t2], Polygon[pts2,VertexTextureCoordinates -> vtc2], ...} – ybeltukov Oct 20 '14 at 15:41
• Thanks @ybeltukov. This is exactly what I needed. – kafsinkaf Oct 20 '14 at 15:48
• @ybeltukov answer? – Yves Klett Oct 20 '14 at 15:48
• @YvesKlett, I decided to expand this simple example :) – ybeltukov Oct 20 '14 at 18:00

## 1 Answer

You can set Texture before each polygon

t = ImageResize[ExampleData@#, {100, 100}] & /@
ExampleData["ColorTexture"][[;; 6]];

vtc = {{0, 0}, {1, 0}, {1, 1}, {0, 1}};
coords = {{{0, 0, 0}, {0, 1, 0}, {1, 1, 0}, {1, 0, 0}}, {{0, 0,
0}, {1, 0, 0}, {1, 0, 1}, {0, 0, 1}}, {{1, 0, 0}, {1, 1, 0}, {1,
1, 1}, {1, 0, 1}}, {{1, 1, 0}, {0, 1, 0}, {0, 1, 1}, {1, 1,
1}}, {{0, 1, 0}, {0, 0, 0}, {0, 0, 1}, {0, 1, 1}}, {{1, 0,
1}, {1, 1, 1}, {0, 1, 1}, {0, 0, 1}}};

Graphics3D[{Table[{Texture@t[[i]],
Polygon[coords[[i]], VertexTextureCoordinates -> vtc]}, {i, 6}]}]


Or you can use one texture with proper texture coordinates like in cube maps

cubemap = ImageResize[#, Scaled[0.5]] &@ Import@"http://i.stack.imgur.com/hSCfz.jpg";

vtccm = {{##}, {# + 1, #2}, {# + 1, #2 + 1}, {#, #2 + 1}} & @@@ {{1,
1}, {0, 2}, {1, 2}, {2, 2}, {3, 2}, {1, 3}}/4;

α = 0.;
Graphics3D[{EdgeForm[], Texture[cubemap],
Polygon[coords, VertexTextureCoordinates -> vtccm]},
Lighting -> {{"Ambient", White}}, Boxed -> False, ViewAngle -> 1,
ViewCenter -> {1, 1, 1}/2,
ViewVector -> {1, 1, 1}/2 + {Cos[α], Sin[α], 0}/8,
RotationAction -> "Clip", ImageSize -> 500,
ViewVertical -> {0, 0, 1}]


There is no visible joints!

• Lovely! Is there a way to efficiently re-use textures within an expression to avoid bloating by repetition? – Yves Klett Oct 20 '14 at 20:19
• @ybeltukov what is vtccm doing in your code. I cant quite understand it. – Gordon Coale Oct 21 '14 at 9:12
• @GordonCoale it is "Vertex Texture Coordinates of Cube Map". It is a short form of {{{1/4, 1/4}, {1/2, 1/4}, {1/2, 1/2}, {1/4, 1/2}}, {{0, 1/2}, {1/4, 1/2}, {1/4, 3/4}, {0, 3/4}}, {{1/4, 1/2}, {1/2, 1/2}, {1/2, 3/4}, {1/4, 3/4}}, {{1/2, 1/2}, {3/4, 1/2}, {3/4, 3/4}, {1/2, 3/4}}, {{3/4, 1/2}, {1, 1/2}, {1, 3/4}, {3/4, 3/4}}, {{1/4, 3/4}, {1/2, 3/4}, {1/2, 1}, {1/4, 1}}}. – ybeltukov Oct 21 '14 at 11:14
• Nice shortcut! I can use that in a similar way for a problem of mine. Thank you! – Gordon Coale Oct 21 '14 at 15:21