Установить цвет скопированных примитивных УФ-сфер - PullRequest
0 голосов
/ 12 декабря 2018

Я создаю несколько копий сферы, но я хочу изменить цвет каждой отдельной сферы.Вот код, который я использую, чтобы создать начальную сферу, а затем сделать ее копию.

bpy.ops.object.select_all(action='DESELECT')
bpy.ops.mesh.primitive_uv_sphere_add(size=radius)
sphere = bpy.context.object

def makeSphere(x,y,z,r,g,b):
    ob = sphere.copy()
    ob.location.x = x
    ob.location.y = y
    ob.location.z = z

    # Attempt to change sphere's color
    activeObject = bpy.context.active_object 
    mat = bpy.data.materials.new(name="MaterialName")
    activeObject.data.materials.append(mat) 
    bpy.context.object.active_material.diffuse_color = (r/255,g/255,b/255) 

    bpy.context.scene.objects.link(ob)

Скрипт компилируется и работает нормально, но цвета сфер не меняются.

1 Ответ

0 голосов
/ 28 декабря 2018

Пара вещей, bpy.context.object и bpy.context.active_object - это один и тот же объект.Вы дублируете объект, но не данные объекта, которые имеют материалы, это означает, что вы добавляете каждый новый материал к тем же данным объекта, но используется только первый материал.

bpy.ops.object.select_all(action='DESELECT')
bpy.ops.mesh.primitive_uv_sphere_add(size=.3)
sphere = bpy.context.object

def makeSphere(x,y,z,r,g,b):
    ob = sphere.copy()
    ob.data = sphere.data.copy()
    ob.location.x = x
    ob.location.y = y
    ob.location.z = z

    # Attempt to change sphere's color
    mat = bpy.data.materials.new(name="MaterialName")
    mat.diffuse_color = (r/255,g/255,b/255)
    ob.active_material = mat

    bpy.context.scene.objects.link(ob)
...