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

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

投稿ツリー



前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2007/1/8 9:42
yamyam  管理人 居住地: そうや、うちはおおさかやー  投稿数: 4403
って、今長文書いてから気づいたのですが、単なるOpenGL表示の問題ですか。
バグかどうかわかりませんが、おそらくZバッファによる前後判定は Face しかしてない所為じゃないかと思われます。


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

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

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

何か初歩的なこと見落としているんでしょうか?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2007/1/10 8:50
yamyam  管理人 居住地: そうや、うちはおおさかやー  投稿数: 4403
そのマテリアルは何のパラメータも持っていないため、ワイヤフレームでレンダリングしてくれない、もしくはすでに'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さんとこを適当に参照してみて下さい。
投票数:4 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2007/1/10 12:57
umihara  新米   投稿数: 8
返信ありがとうございます。
本当に質問ばかりですいません。

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

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

投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2007/1/12 9:01
yamyam  管理人 居住地: そうや、うちはおおさかやー  投稿数: 4403
ひとつ前の記事にも書きましたが、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
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2007/1/12 16:26
umihara  新米   投稿数: 8
yamyamさん返信ありがとうござました。

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

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

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


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

まあ、umiharaさんがこれでいいんならそれでいいですが。
投票数:2 平均点:0.00

  条件検索へ


ログイン

ユーザ名:

パスワード:



パスワード紛失

クイックリンク

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

●ニュース(英文)
BlenderNation

●Blenderコミュニティ
blenderartists.org

●Blender Q&A
- Blender Stack Exchange

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


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