Pergunta

Usando a API Python do Blender 2.49, estou criando uma malha.Eu tenho uma lista de vértices e uma lista de índices de faces.

por exemplo.

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

Eu notei o MVert uvco propriedade e MFaces UV Propriedade, e adicionei alguns valores aleatórios, mas não consigo ver nenhuma alteração quando renderizo.

Em relação ao uvco, a documentação menciona:

Observação:Eles não são vistos no editor UV e não fazem parte de UV e UVLayer.

Eu tentei isso com a nova malha selecionada:

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

Posso ver a mudança dos valores no Terminal, mas não vejo nenhuma mudança quando renderizo.Se eu selecionar novamente o objeto, os UVs da face anterior desaparecerão.

Alguém pode explicar como os UVs são definidos usando a API Python do Blender 2.49?

Obrigado

Foi útil?

Solução

Tente simplesmente substituir esta linha:

o = ob.getData()

com

o = ob.getData(mesh=True)

Devido ao desenvolvimento histórico da API Blender Python, uma chamada comum para blender_object.getData fornece uma cópia dos dados de malha de um objeto, que embora possam ser modificados, não estão "ativos" no objeto exibido.(Na verdade é até uma "NMesh" - uma classe que difere da classe "Mesh" viva).

Com o parâmetro opcional "mesh=True" passado para o método getData você obtém de volta a malha viva do objeto, e as alterações nela contidas têm efeito (que pode ser visto em uma atualização forçada após um Blender.Redraw()).

No entanto, nunca experimentei coisas UV, então pode haver mais coisas, mas acredito que esse seja o seu problema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top