python - 如何在 Blender Python 中将 UV 设置为网格?

标签 python blender bpython bpy uvw

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

例如

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

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

关于uvco,文档提到:

Note: These are not seen in the UV editor and they are not a part of 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

我可以看到终端中的值发生变化,但渲染时没有看到任何变化。 如果我重新选择该对象,之前的面部 uv 就会消失。

谁能解释一下如何使用 Blender 2.49 Python API 设置 UV?

谢谢

最佳答案

尝试简单地替换这一行:

o = ob.getData()

o = ob.getData(mesh=True)

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

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

但是,我从未尝试过 UV 的东西,所以可能还有更多的东西,但我相信这是你的问题。

关于python - 如何在 Blender Python 中将 UV 设置为网格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3246100/

相关文章:

linux - 如何在 Gentoo Linux 上为旧版 nvidia 卡安装 Cuda 工具包

python - ipython 和 bpython 有什么区别?

python - Ruby 有类似 bpython 的东西吗?

python - 如何在Python中查找特定文件

python - 仅更新 Django 表单中的 ForeignKey 字段

python - 如何在 python 中快速细化网格

python - 有没有办法可以用 python 将屏幕截图的输出保存在列表中

python - 如何在 BGE 的 python 脚本中获取对象 Action /动画的名称?

c++ - 为什么 blender .obj 文件中 vt 和 v 元素的数量不同?

python - 如何使用 Python 在 Blender 2.49 中设置世界背景纹理?