5

I want to set texture for faces. I put together a quick example using the "Cube" and an existing BMP as the texture file on disk. I am in Object Mode. I set the Viewport Shading to Texture.

The code is:

import bpy
import bmesh

texturak = bpy.data.textures
o = bpy.data.objects["Cube"]
me = o.data
ol = me.materials

img = bpy.data.images.load('d:\\canwall1.bmp')
texturak.new('ColorTex', type = 'IMAGE')
texturak[-1].image = img

mat = bpy.data.materials.new('TexMat')
mtex = mat.texture_slots.add()
mtex.texture = texturak[-1]
mtex.texture_coords = 'UV'
mtex.use_map_color_diffuse = True 
mtex.use_map_color_emission = True 
mtex.emission_color_factor = 0.5
mtex.use_map_density = True 
mtex.mapping = 'FLAT' 

if (len(me.uv_textures) == 0):
    me.uv_textures.new()
while (ol):
    ol.pop(0,update_data = True)
ol.append(mat)

for texlay in me.uv_textures:
    for tf in texlay.data:
        tf.image = img

I get the cube, then the texture, I add it as a material. From there, I found no good examples on internet. The only working stuff was for Blender 2.5 and some guesses from the answer of my previous question here.

So for this time I tried to set all face-images to the image I load. But all I get is a purple cube. Now my guess is that "something happened" (woohoo), but as well as "something is missing" (no woohoo this time).

My question would be to those more experienced, that what is missed here actually, or is there a better way to set material / texture to a face / faces?

Edit: To extend my question: I want to have more textures per mesh; this is why I want to set the texture per face.

wchargin
  • 9,452
  • 5
  • 41
  • 66
Zéiksz
  • 1,959
  • 5
  • 23
  • 32

1 Answers1

4

The following sets the face texture of face 0 for the active object:

import bpy

obj = bpy.context.object
img = bpy.data.images.load("//example.png")
obj.data.uv_textures.active.data[0].image = img

# To make renderable:
mat = bpy.data.materials.new("Example")
mat.use_face_texture = True
obj.data.materials.append(mat)

For cycles see: Different image textures for one material (Cycles).

Aldrik
  • 9,720
  • 22
  • 56
  • Last line is "(mat)" and not "(material)", but works cool. First I checked the stuff was purple too (see question's problem), then I realised it may be the texture: I converted that to PNG from BMP, and it worked pretty cool. – Zéiksz Aug 13 '13 at 16:43
  • Corrected — glad you got is sorted. :) – Aldrik Aug 13 '13 at 16:46