Как я могу установить UV для Mesh в Blender Python?
Используя 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, используя Blender 2.49 Python API?
Спасибо
1 ответ
Попробуйте просто заменить эту строку:
o = ob.getData()
с
o = ob.getData(mesh=True)
В связи с исторической разработкой API-интерфейса Blender Python обычный вызов blender_object.getData дает вам копию данных меша объекта, которые, хотя и могут быть изменены, не являются "живыми" для отображаемого объекта. (На самом деле это даже "NMesh" - класс, который отличается от живого класса "Mesh").
С необязательным параметром "mesh=True", переданным методу getData, вы возвращаете живую сетку объекта, и изменения в ней оказывают влияние (это можно увидеть после обновления, вызванного после Blender.Redraw()).
Однако я никогда не пробовал использовать ультрафиолетовые лучи, так что в этом может быть что-то еще, но я считаю, что это ваша проблема.