1

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

例如

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

我注意到了 MVert 的uvco属性和 MFace 的uv 属性,并添加了一些随机值,但是我在渲染时看不到任何变化。

关于uvco,文档提到:

注意:这些在 UV 编辑器中看不到,它们不是 UV a 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 设置 UV?

谢谢

4

1 回答 1

2

尝试简单地替换这一行:

o = ob.getData()

o = ob.getData(mesh=True)

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

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

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

于 2010-07-14T13:04:59.407 回答