saitoobjloaderを使って3Dモデルを描画してみた。Processing×Blender
Processingを使った3DCGというのは幾つかやり方があるけども、まぁ実際に外部のツールを利用して3Dモデルをつくってそれを取り込むというのを今回はやってみた。
で、使ったのはP5界ではお馴染み(?)の斎藤OBJLoader!!
.OBJ loader for Processing
OBJLoader
リファレンスと少ない情報を読みながら頑張りましたよん。
簡単にまとめると以下の通り。
1.3Dモデリングデータを準備する(.obj形式)
→ここはBlenderを使いました。
2.OBJLoder.jarを持ってくる。
→上記リンク参照のこと。
3.Let's coding!!
ということで、詳しく書いていきますと。
1.3Dモデリングデータを準備する。
僕の環境はUbuntu12.04ですが、とりあえずBlenderのインストールをしました。
というか、ココはもう読み飛ばしてもらっていいのですが、要は*.obj形式のファイルを用意しないといけないのですね。
で、*.objデータを手に入れたらProcessingのスケッチを作成して、その配下に「data」ディレクトリを作成し、用意した*.objを格納します。
例)Processingのスケッチが「ObjSketche」で*.objデータを「cube.obj」だとすると、こんな感じの階層図にしたい。
./ObjSketche/data
cube.mtl cube.obj
「cube.mtl」ってなんだよって思った人、目ざといです。とりあえず必要なんで*.objをBlenderで作れば*.objと同じとこにあったと思うので一緒に入れておいてください。詳しくはぐぐってね?
2.OBJLoder.jarを持ってくる。
ということで次。これは上記リンクより、zipをDLして解凍すれば簡単に手に入るので説明は不要かと。
解凍までできたところで「code」ディレクトリを作成し、OBJLoader.jarを入れます。
例)こんな感じ
./ObjSketche/code:
OBJLoader.jar
3.Let's coding!!
ということで2番まで準備できたら後はコーディングするだけだよ!
実際にできたのはこちら→Objloader_test
簡単にコード上で説明します。
//ObjLoaderをimport import saito.objloader.*; //OBJModelのインスタンス生成 OBJModel model; float rotX, rotY; void setup() { //3D空間だと明記 size(400,400,P3D); smooth(); //インスタンスへPAppletのインスタンスを渡す model = new OBJModel(this); //相対パスでcube.objを指定 model.load("data/cube.obj"); //そのままだと小さいのでscaleメソッドでサイズ変更 model.scale(40); //座標軸の捉え方が変わるので、この方がわかりやすい model.translateToCenter(); //DrawModeの設定 model.setDrawMode(POLYGON); } void draw() { background(255); translate(width/2, height/2); rotateX(rotX); rotateY(rotY); model.draw(); } void mouseDragged() { rotY += (mouseX - pmouseX) * 0.01; rotX -= (mouseY - pmouseY) * 0.01; }
とまぁこんな感じで3Dデータさえあれば簡単にProcessingで読み込めるよ!!ということでした。