Как я могу установить UV для Mesh в Blender Python? - PullRequest
1 голос
/ 14 июля 2010

Используя Python API Blender 2.49, я создаю меш. У меня есть список вершин и список индексов лица.

, например

mesh = bpy.data.meshes.new('mesh')
mesh.verts.extend(mVerts)
mesh.faces.extend(mFaces)

Я заметил свойство MVert uvco и MFace uv свойство, и добавил несколько случайных значений, но я не вижу ни одного изменить при рендеринге.

Что касается uvco, в документации упоминается:

Примечание. Они не видны в редакторе UV и не являются частью UV UVLayer.

Я пробовал это с новой выбранной сеткой:

import Blender
from Blender import *
import random

scn = Scene.GetCurrent()
ob = scn.objects.active
o = ob.getData()

for v in o.verts:
    v.uvco = (random.random(),random.random(),random.random())
    print v.uvco

for f in o.faces:
    r = (random.random(),random.random())
    for i in range(0,4):
        f.uv.append(r)
        print f.uv

Я вижу изменения значений в Терминале, но не вижу изменений при рендеринге. Если я повторно выберу объект, предыдущие лица исчезнут.

Может кто-нибудь объяснить, как настроить UVs с помощью API-интерфейса Blender 2.49 Python?

Спасибо

1 Ответ

2 голосов
/ 14 июля 2010

Попробуйте просто заменить эту строку:

o = ob.getData()

с

o = ob.getData(mesh=True)

В связи с исторической разработкой API-интерфейса Blender Python обычный вызов blender_object.getData дает вам копию данных меша объекта, которые, хотя и могут быть изменены, не являются «живыми» для отображаемого объекта. (На самом деле это даже «NMesh» - класс, который отличается от класса «Mesh»).

С необязательным параметром "mesh = True", переданным методу getData, вы возвращаете живую сетку объекта, и изменения в ней имеют эффект (это можно увидеть после обновления, вызванного после Blender.Redraw ()) .

Однако я никогда не пробовал использовать ультрафиолетовые лучи, так что в этом может быть что-то еще, но я считаю, что это ваша проблема.

...