Как я могу установить 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()).

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

Другие вопросы по тегам