(define -ayalog '())

括弧に魅せられて道を外した名前のないプログラマ

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で読み込めるよ!!ということでした。