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 および 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 を設定する方法を説明できる人はいますか?

ありがとう

4

1 に答える 1

2

この行を単純に置き換えてみてください。

o = ob.getData()

o = ob.getData(mesh=True)

Blender Python APIの歴史的な開発により、blender_object.getDataを通常呼び出すと、オブジェクトのメッシュデータのコピーが提供されますが、変更は可能ですが、表示されたオブジェクトでは「ライブ」ではありません。(実際には、それは「NMesh」でさえあります-生きている「Mesh」クラスとは異なるクラスです)。

getDataメソッドに渡されたオプションのパラメーター"mesh= True"を使用すると、オブジェクトの生きているメッシュを取り戻し、そこでの変更が有効になります(Blender.Redraw()の後に強制的に更新されたときに確認できます)。

私はUVのことを試したことがないので、もっと多くのことがあるかもしれませんが、これはあなたの問題だと思います。

于 2010-07-14T13:04:59.407 に答える