2009年03月13日

テクスチャプラグインのサンプルをコンパイルしてみる

「vectexを改良しよう!」と目標は定めてみたものの、予備知識がないことにはどうにもならないので、まずは基本から始めてみたいと思います。
とりあえず簡単なテクスチャプラグインを自作するところから始めてみます。プラグインファイルを作る際に参考になりそうなページがBlender.orgのWikiにあります。

こちらを読んでみるとBlenderのインストールディレクトリの「plugins」フォルダにプラグイン開発に必要なファイルが全部そろっていて、サンプルもいくつかあるということです。このフォルダは3Dマウス「SpaceNavigator」を使う際にプラグインファイルを置く場所だったので知っていましたが、テクスチャプラグインの開発用のファイルが置いてある場所でもあったんですね。
pic090313_01.jpg

この「plugins」-「texture」フォルダを見てみると「clouds2.c」「tiles.c」という2つのサンプルファイルがありました。「plugins」-「include」フォルダの方にはプラグインの〜.cファイルを書く際に使われるC言語のヘッダファイルがあります。
pic090313_02.jpg pic090313_03.jpg

プラグインを実際にコンパイルするには「plugins」フォルダにあるMakefileを使えばいいようです。テクスチャプラグインの開発に必要なファイルは「plugins」フォルダの中にあるものだけで、Blenderのインストールディレクトリにあるその他のファイルは関係ないようです。実際にプラグインをコンパイルする場合、「plugins」フォルダごと別の場所にコピーしておいて、そちらで開発するという感じでもいいようです。

Linuxの環境でサンプルファイルをコンパイルしてみます。
コンソールウィンドウで「plugins」フォルダに移動して、

$ make

とするだけです。
コンソールにとくにエラーらしきものが表示されなければ、「texture」フォルダの中に「cloud2.so」「tiles.so」というファイルができているはずです。(エラーが表示されてもファイルができてしまうこともあるのですが、そういう場合はBlenderでプラグインをロードするときに失敗したりします)
pic090313_04.jpg pic090313_05.jpg

ちなみに「plugins」フォルダのMakefileはこんな感じになっています。

all: textures sequences

textures:
$(MAKE) -C texture

sequences:
$(MAKE) -C sequence

clean:
$(MAKE) -C texture clean
$(MAKE) -C sequence clean

「texture」フォルダと「sequence」フォルダに入っているMakefileを実行するように記述されています。
そして、「texture」フォルダのMakefileは、こんな感じです。

all: plugins

plugins:
@/bin/sh -c 'for i in *.c; do ../bmake $$i; done;'

clean:
rm -rf *.o *.so

「〜.c」という名前のファイルがあったら全部コンパイルする、ということですね。
自分で新しく「test.c」というようなプラグインを書いたとしても、Makefile自体を修正する必要はなくて、makeコマンドを実行するだけでコンパイルしてくれるというのは助かります。

さて、できあがったプラグインはどんなものなのでしょうか?
どちらもソースコードの行数は178行で、書かれているコードはそれほど多くはありませんが、かといって最低限の簡単さというわけでもなく、普通に実用的なプラグインとして使えそうな感じです。
pic090313_06.jpg pic090313_07.jpg

長くなってしまったので、今回はここまでにします。次回以降でオリジナルのプラグインを作ってみたいと思います。
(ちなみに、Windowsでも試してみようと思ったのですが今のところまだうまくコンパイルできていません。もう少し調べてみたいと思いますが、Windowsの開発環境(VisualStudio、MinGW、Cygwin、LCCなどで試してみています)自体についてかなり勉強しないと難しそうな感じです。ちょっと無理っぽいような...。)
posted by mato at 01:32| Comment(0) | Blender | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。