2012/02/28

ProcessingでXファイルを解析(スタティックメッシュ篇その2)

昨日の続きです。ほんのちょっと進歩してマテリアルを反映できるようになりました。

こういうかっこいい戦車も……
Metasequoia にプリセットされている「Tank」
ちゃんと質感を保ったまま Processing に持ってくる事ができました。やったー!
Processing で表示した結果
※ というのは大ウソで、法線無視、フラットシェーディング一択という男らしい割り切り方をしています。P3D モードにおけるレンダリングのクオリティならばこのくらいばっさり行っても許容範囲な気がします(おい



ちなみにここだけの話、X ファイル内のジオメトリの頂点数とテクスチャのUV頂点数が一致していないと表示できないという問題点があるのですが、Metasequoia が吐く X ファイルでは特に目立った問題は起きていないため、思い切って無視しています。

それでも泥縄式に拡張しただけあって、いい感じにソースが汚くなって参りました。

【Xファイル解析関連のコード】

【使い方】
  1. Mesh mesh;  
  2.   
  3. void setup() {  
  4.   size(640480, P3D);  
  5.     
  6.   // ファイル名を指定してXをロード    
  7.   mesh = new Loader().loadX("3 テクスチャ付き.x");  
  8.     
  9. }  
  10.   
  11. void draw() {  
  12.   background(0);  
  13.   camera();  
  14.   lights();  
  15.   noStroke();  
  16.   
  17.   camera(-5000, -5000000, -10);  
  18.   scale(200);  
  19.     
  20.   // メッシュの描画  
  21.   mesh.render();  
  22. }  

ちなみにエラー処理とかはあまりしていないので、X ファイルが規格外だったりテクスチャファイルが見つからなかったりすると平気で RuntimeException をぶん投げると思いますがそこはご愛嬌という事で。



【MESH GURUのサンプルに挑戦】

鎌田茂雄 著 『MESH GURU』 の第 8 章で使用されているサンプルのうち、アニメーションを含まない X ファイルをパースしてみる事にします。以下では、Processing における実行結果と、使用した X ファイルをそのまま掲載しています。

『MESH GURU』 のサンプルは Metasequoia が吐く X ファイルとはじゃっかん構造が違い、冒頭で名前つきの Material を定義して、以降は識別子で Material を参照する形になっています。なんとも意地の悪い書き方ではありますが、可能な限り対応する事にしました。



【世界最小Xファイル】

  1. xof 0303txt 0032  
  2.   
  3. ///////////////////メッシュ//////////////////////////  
  4. Mesh Mesh_Triangle  
  5. {  
  6.   //////頂点データ部////////////  
  7.    3;  
  8.   -1.0;-1.0;0.0;,  
  9.   -1.0;1.0;0.0;,  
  10.   1.0;-1.0;0.0;;  
  11.   //////ポリゴンデータ部///////  
  12.   1;  
  13.   3;0,1,2;;   
  14. }  



【マテリアル付き】

  1. xof 0303txt 0032  
  2. //////////////////////////マテリアル/////////////////////  
  3. Material Triangle_Blue  
  4. {  
  5.   0.0;0.0;1.0;1.0;;  
  6.   51.2;  
  7.   0.0;0.0;0.0;;  
  8.   0.0;0.0;0.0;;  
  9. }  
  10. ///////////////////メッシュ//////////////////////////  
  11. Mesh Mesh_Triangle  
  12. {  
  13.    3;  
  14.   -1.0;-1.0;0.0;,  
  15.   -1.0;1.0;0.0;,  
  16.   1.0;-1.0;0.0;;  
  17.   1;  
  18.   3;0,1,2;;  
  19.   ///////////////////マテリアルリスト////////////  
  20.   MeshMaterialList   
  21.   {  
  22.     1;  
  23.     1;  
  24.     0;  
  25.     { Triangle_Blue }  
  26.   }  
  27. }  



【テクスチャ付き】

  1. xof 0303txt 0032  
  2. //////////////////////////マテリアル/////////////////////  
  3. Material Triangle_Tex  
  4. {  
  5.   1.0;1.0;1.0;1.0;;  
  6.   51.2;  
  7.   0.0;0.0;0.0;;  
  8.   0.0;0.0;0.0;;  
  9.   TextureFilename  
  10.   {  
  11.     "コンクリート.bmp";  
  12.   }  
  13. }  
  14. ///////////////////メッシュ//////////////////////////  
  15. Mesh Mesh_Triangle  
  16. {  
  17.    3;  
  18.   -1.0;-1.0;0.0;,  
  19.   -1.0;1.0;0.0;,  
  20.   1.0;-1.0;0.0;;  
  21.   1;  
  22.   3;0,1,2;;  
  23.   ///////////////////テクスチャ座標///////////////  
  24.   MeshTextureCoords  
  25.   {  
  26.     3;  
  27.     0.0;1.0;,  
  28.     0.0;0.0;,  
  29.     1.0;1.0;;  
  30.   }  
  31.   ///////////////////マテリアルリスト////////////  
  32.   MeshMaterialList   
  33.   {  
  34.     1;  
  35.     1;  
  36.     0;  
  37.     { Triangle_Tex }  
  38.   }  
  39. }  

※ 文字コードが UTF-8 以外の場合、日本語のテクスチャを読み込もうとした瞬間に死にます。



【おまけ:魔道少女】




【おまけその2:どせいさん】

こちらのサイトから拝借した「どせいさん」を表示してみました。なお、左右が反転しているのは、座標軸の取り方によるものです。

0 件のコメント:

コメントを投稿

ひとことどうぞφ(・ω・,,)