【问题标题】:How can I set UVs to a Mesh in Blender Python?如何在 Blender Python 中将 UV 设置为网格?
【发布时间】:2011-03-15 20:05:18
【问题描述】:

我正在使用 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?

谢谢

【问题讨论】:

    标签: python blender bpython bpy uvw


    【解决方案1】:

    尝试简单地替换这一行:

    o = ob.getData()
    

    o = ob.getData(mesh=True)
    

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

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

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

    【讨论】:

    • 我不知道 (mesh=True)。可能是正确的轨道。现在我得到这个错误:'ValueError: face has no texture values' 我手动应用了一个纹理并再次尝试,但我得到了同样的错误。有什么提示吗?
    • 完成!修改 uv 时不得处于编辑模式。谢谢@jsbueno
    猜你喜欢
    • 2011-03-07
    • 2011-03-18
    • 2020-12-09
    • 2018-01-17
    • 2011-10-30
    • 2018-07-19
    • 2011-11-28
    • 2015-02-04
    • 2018-08-04
    相关资源
    最近更新 更多