座標データから粒子の軌跡を表示する方法

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

投稿ツリー



depth:
8
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2007/1/9 22:58
umihara  新米   投稿数: 8
yamyamさん。返信ありがとうございます。

今朝方修正してみたところ確かにできたはずなのですが、今朝のデータが保存失敗していて、今やってみたところなぜかできませんでした・・・。

修正箇所2行のスクリプトの前に
ma = Material.New('ryusi')
と単純にマテリアルを作成しただけなのですが・・・。

何か初歩的なこと見落としているんでしょうか?
投票数:0 平均点:0.00
depth:
9
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2007/1/10 8:50
yamyam  管理人 居住地: そうや、うちはおおさかやー  投稿数: 4404
そのマテリアルは何のパラメータも持っていないため、ワイヤフレームでレンダリングしてくれない、もしくはすでに'ryusi'がある場合は生成に失敗しているのかと思います。(「できませんでした」が具体的にどういう状態を指すのかわからないのでこう書いています)

ただ、前の投稿では、わざわざBlender で予め Material を作成する方法を書いてしまいましたが、手続きとして Text にスクリプトとして書くほうが便利ですよね。
というわけで、もっと単純に、

# Ryusi's material Setting
            mat = Material.New('ryusi')
            mat.mode |= Material.Modes.WIRE		# Set Wire ON

# Create Object and assign the material to it
            obj = Object.New('Mesh', 'obj%d' % num)
            me.materials += [mat]
            obj.link(me)
と書くべきでした。まぎわらしくてすみません。

色などの他のパラメータは、moritaさんとこを適当に参照してみて下さい。
投票数:5 平均点:0.00
depth:
10
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2007/1/10 12:57
umihara  新米   投稿数: 8
返信ありがとうございます。
本当に質問ばかりですいません。

できませんでした、というのは前の画像のように粒子が物体を貫通してる様子が表示されないということです。

以前一回できたと思ったのですが、やっぱり上手くいきません。
スクリプトに、上記のものを追加してみたのですが・・・。
それとも、スクリプト以外に何かおかしいのでしょうか。
:download:ryusi.zip

投票数:0 平均点:0.00
depth:
11
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2007/1/12 9:01
yamyam  管理人 居住地: そうや、うちはおおさかやー  投稿数: 4404
ひとつ前の記事にも書きましたが、3DWindow内のOpenGL表示では正しく表示されない仕様になっています。よって、必要ならカメラや光源を設定してレンダリングして下さい。カメラや光源は最初っからシーンにありますが、自動設定などをしたい場合は、先日リンクしましたmoritaさんとこのAPIのページを見て、適宜追加して下さい。
以下の画像は、カメラを移動させ、Lamp を Sun に設定しなおしたものです。



あと、Material がいっぱいできてしまって不便かつ無駄だったので、ループの外に出してみました。粒子部分以降だけを掲載します。これで、その Material をいじるだけで、すべての粒子の質感などを変更できます。また、応用すれば、壁(?)の Object にも自動的に同じ Material を生成、適用できます。
f = file('trace2.txt')
num, verts = 0, []

# Ryusi's material Setting
mat = Material.New('ryusi')
mat.mode |= Material.Modes.WIRE		# Set Wire ON

# Loop
for line in f:
    try:
        co = eval(line)
        verts.append(co[:3])
    except SyntaxError:
        if len(verts):
            me = Mesh.New('me%d' % num)
            me.verts.extend(verts)
            me.edges.extend(map(lambda x: (me.verts[x], me.verts[x+1]), range(len(verts)-1)))

            # Create Object and assign the material to it
            ob = Object.New('Mesh', 'obj%d' % num)
            me.materials += [mat]
            ob.link(me)
            Scene.GetCurrent().link(ob)
            num, verts = num + 1, []


投票数:0 平均点:0.00
depth:
12
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2007/1/12 16:26
umihara  新米   投稿数: 8
yamyamさん返信ありがとうござました。

解決かどうかわかりませんが、解決しました。

スクリプト実行の際、粒子の方を先に持って来て物体の方を後にすれば正しく表示されるようです。
初めてのとき、おそらくこのようにやったために正しく表示され、以降できなかったようです。

長々とお付き合いして頂き、ありがとうございました。


投票数:0 平均点:0.00
depth:
13
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2007/1/13 7:59
yamyam  管理人 居住地: そうや、うちはおおさかやー  投稿数: 4404
え…、これ正しい表示じゃないと思うんですが…。選択されている壁の突き抜け方がおかしいような気が。

まあ、umiharaさんがこれでいいんならそれでいいですが。
投票数:2 平均点:0.00
depth:
6
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2007/1/8 9:30
yamyam  管理人 居住地: そうや、うちはおおさかやー  投稿数: 4404
kykさん:
me.edges.extend( [[x, x+1] for x in range(len(verts)-1))])
何この変態構文?って一瞬思いましたが(笑)、要は[[a,b] c]の形なんですね。勉強になりました。


umiharaさん:
Blender では、Edge(辺)は MaterialButtons([F5])内の RenderPipeline パネル内にある、[ Wire ]を押さないとレンダリングされません。ただし、これを押すと普通の立方体もワイヤフレームでレンダリングされてしまいます。

そのため、以前作成された立方体とは別の Material を割り当てる必要があります。

その方法ですが、まず、自動的に Material 割り当てしていく方法。
            obj = Object.New('Mesh', 'obj%d' % num)
            obj.link(me)
の二行の間に、
            mat = Material.Get('ryusi')
            me.materials += [mat]
を入れてみて下さい。"ryusi" は実際にBlender で予め作成しておいたMaterial の名前です。ダミーで作成した Mesh Object にでも作成しておいて、その後スクリプトを実行して下さい。もちろん別の名前でも構いませんが、上記のシングルクオート内も変更してやって下さい。

以前の立方体の方も同様にすれば、一つの Material が立方体共有の Material として利用できるようになります。

また、もう多数の粒子の Object がある blend ファイルを作成しており、この粒子 Object に対して、同じ Material を割り振る場合。
この場合は、一つの粒子 Object に Material を設定し、他の粒子 Object へコピーしてやることになります。
一つ一つやっていると面倒なので、Blender に同梱されているスクリプト、"Data Copier" で行います。

使用は簡単です。
1) ObjectMode で、すべての粒子 Object を選択し、最後に Material を割り当てた粒子 Object(コピー元)を選択してアクティブにする(明るいピンクになります)。
2) ヘッダの Object メニューから、Scripts→Data Copier を選択します。
3) UI がでてくるので、"Materials" のボタンを押し、"Copy" を押します。最後に選択した Object の Material(へのリンク)が他の選択された Object すべてにコピーされます。

投票数:1 平均点:10.00

  条件検索へ


ログイン

ユーザ名:

パスワード:



パスワード紛失

クイックリンク

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

●ニュース(英文)
BlenderNation

●Blenderコミュニティ
blenderartists.org

●Blender Q&A
- Blender Stack Exchange

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


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