如何在Blender Python中将UV设置为Mesh?

时间:2010-07-14 12:35:06

标签: python blender bpython bpy uvw

使用Blender 2.49的Python API我正在创建一个网格物体。 我有一个顶点列表和一个面部索引列表。

e.g。

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

我可以看到终端中的值发生了变化,但是渲染时我没有看到任何变化。 如果我重新选择了这个物体,那么以前的面部uv就会消失。

任何人都可以解释如何使用Blender 2.49 Python API设置UV吗?

由于

1 个答案:

答案 0 :(得分:2)

尝试简单地替换此行:

o = ob.getData()

o = ob.getData(mesh=True)

由于Blender Python API的历史性发展,对blender_object.getData的普通调用为您提供了对象的网格数据的副本,虽然可以修改,但它不会在显示的对象上“生效”。 (实际上它甚至是一个“NMesh” - 一个与生活的“网格”类不同的类。)

通过传递给getData方法的可选参数“mesh = True”,您将获得对象的活动网格,并且其中的更改会产生效果(可以在Blender.Redraw()之后强制更新时看到)

然而,我从未尝试过紫外线,所以可能会有更多的东西,但我相信这是你的问题。