pythonスクリプトを使ったBlenderのlink方法

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています

投稿ツリー



前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2006/11/16 19:15
umihara  新米   投稿数: 8
はじめまして、umiharaと申します。

ずっと悩んでいたのですが、調べてもそのサイトのリンクが出るだけでほとんどわからないので、質問をさせて頂きます。

私がやろうとしている事は、x,y,z座標を読み込んで物体を表示する事なのです。
しかし、その座標を作り出すソフトの仕様で、BOX状の物体を表示するのに、3つの物体を組み合わせて作らなければならない妙なデータになっています。サイコロで言うと、6と3の目、4と1の目、2と5の目の面を合わせて、BOX状にするようなものです。
表示自体はできたのですが、何分3つの物体から成っているので、回転などの動作は逐一全部を指定してからでないと、バラバラになってしまいます。
スクリプトの段階で、その3つの物体が1つの物体のように振舞うような方法はありますか?

python初心者なんでショボイですが、様々なサイトにあるスクリプトを真似て作ったプログラムもアップしておきます。
ここがおかしい、もっと良くなるんじゃないの?という点がありましたら、そちらのご指摘も願います。

どうかよろしくお願いします。

blenderは2.42a
pythonは2.43です。
:download:main_pro03.zip

投票数:9 平均点:4.44
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2006/11/17 9:49
yamyam  管理人 居住地: そうや、うちはおおさかやー  投稿数: 4405
はじめましてumiharaさん。
スクリプト拝見しました。
先に結論をいいますと、残念ながら Blender はスクリプトから Join Mesh(別々の Mesh Object の統合)や、Remove Doubles(重複している頂点の統合)機能を使用できません。よって、変換時に少し工夫してあげる必要があります。

以下は元データがないため想像です。実際とは違う部分があるかもしれません。

元データは、それぞれの面を分解した、6面×4個の[x,y,z]の頂点リストと思われます。でも48個もパラメータがあるのは、恐らく両面を定義しているからだと思います。Blender では片面しか定義はないため、umiharaさんのソースでは、coords4〜6はいらないと思われます。
よって、
#Make lists of parameters
    coords = [ x0,x1,x2,x3,x4,x5,x6,x7,
               x8,x9,x10,x11,x12,x13,x14,x15,
               x16,x17,x18,x19,x20,x21,x22,x23 ]
    faces  = [ [ 4, 5, 7,6],[4,5,3,2],
               [ 8, 9,11,10],[12,13,15,14],
               [17,16,18,19],[18,20,21,19] ]

#Make a mesh!
    me = Mesh.New('myMesh')

    me.verts.extend(coords)
    me.faces.extend(faces)
で、とりあえず3つの部分に分かれた1つの Mesh Object になると思います。ただし、この段階でもやはり出力後にEditMode に入って全選択([A])→Rem Doubles([W]キーメニュー)しなければなりません。

最初に重なっている頂点がひとつにまとまっているようにするには、元データで、上記の24個の引数の中で、重複している部分を faces の中で一方だけの指定にしてあげればいいのです。

例えばx2とx8が同じ値であれば、8としているしている部分をすべて2におきかえます([8,9,11,10]→[2,9,11,10]のように)。少なくとも上記のコードでは、すでにx0、x1、x22、x23は使用されていません。

こうして8個のインデックスのみにしてしまえば完了です。ただし、面の方向まで考えるともうひと工夫しなければなりません。具体的には、各面の頂点のインデックスを逆時計回りに配置しなければなりません。

ちなみに、元データは直方体だけなのでしょうか? 任意の形状を示すには、Vertex(頂点)の座標だけでなく、それを構成する Face(面)のためのインデックスもデータとして必要になります。
投票数:25 平均点:1.60
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2006/11/17 23:58
umihara  新米   投稿数: 8
指定箇所を修正したところ、見事に物体がバラバラにならずに済みました。添付画像ではそれはわかりませんね。
座標を3つ重ねるのではなくて、1つで考えると言うのは盲点でした。

元データは直方体だけなのでしょうかという点ですが、まずは直方体だけの物体です。そこに、粒子の軌跡を表示させれば良いのです。

BOX状の物体(今回の質問)と粒子の軌跡を、それぞれ別々のスクリプトにして、同時に呼び出すスクリプトを組む方法と、シリンダー状の物体をスクリプトで組んで表示する方法を考えなければなりません。

また詰まったら質問をさせて下さい。
今回はありがとうございました。




投票数:5 平均点:4.00

  条件検索へ


ログイン

ユーザ名:

パスワード:



パスワード紛失

クイックリンク

2021/07/01版
●Blender.org
BlenderFoundation
- Blenderのダウンロード
- 公式チュート等
- 公式マニュアル(和訳)

●ニュース(英文)
BlenderNation

●Blenderコミュニティ
blenderartists.org

●Blender Q&A
- Blender Stack Exchange

●テストビルド
Buildbot(自動生成)


●開発関連
公式開発サイト
Blender開発blog
Blender Wiki