Posted by at

2009年07月19日

SIO2とシティエンジンでiPhoneの中に街を作るテスト中

● もう完全に、セカンドライフはそっちのけで。。。><;

先日、AppleのApp Storeに登録完了しました。
これで仕事とは別に、個人でもiPhoneアプリを配信できます。^^
まずは9月頃にアプリを1本登録する予定です。
(まだまだお金を頂けるようなレベルではないので、無料アプリですけど。。。。)
ドコモからはグーグル携帯(アンドロイド)も発売された事ですし、プログラムが作れる人にとっては、
おもしろい世の中になりそうですネ。^^v



● SIO2のチュートリアル04

http://www.sio2interactive.com/TECHNOLOGY.html

iPhoneアプリ作りでもブレンダーが活用できるのは、イイですね。
チュートリアル04を理解すると、視点移動のウォークスルーのステージをiPhoneの中に
構築する事ができます。
このチュートリアルはプログラム(Objective-C言語、iPhone API)の知識は無くても、
ブレンダーの知識があれば大丈夫です。



動画が用意できなかったのですが、指一本でとても滑らかにシーンが動きます。
ドライブゲームやフライトシミュレーションみたいな、けっこう動きのあるゲームも作れそうです。



まずはやっぱり、iPhoneの中に街を作ってみたくなります。
でも一から作るのは大変なので、こんな時に便利なのがシティエンジンのスクリプトです。




● シティエンジンその1 「Open City Engine」

Open City Engine
http://jerome.le.chat.free.fr/index.php/en/blender/scripts/city-engine.html


以前は、Suicidator City Engineという名前でしたが、最近はOpen City Engineという名称で
配布されています。
バージョンアップも頻繁ですし、設定メニューも判りやすいです。



住宅地から、摩天楼、高層都市まで、いろいろなプリセットが用意されてますので、すぐに使えるのが
イイです。





● シティエンジンその2 「Suicidator City Engine」

Open City Engineとは別に、本家?のSuicidator City Engineもバージョンアップが続いてます。



設定メニューの機能は少ないですけど、ディテール度は抜群です。
銀河共和国の首都/ジェダイ神殿がある惑星コルサントみたいな都市が創れそうですョ。^^





● SIO2でブレンダーからiPhoneに持ってくるテスト中

手順は簡単です。
ブレンダーで作ったシーン上のオブジェクトを全て選択して、SIO2ファイルを作成。
あとは、チュートリアル04のプロジェクトを開発環境XCodeでコンパイルするだけで、iPhoneアプリが
完成します。

でも、さすがに建物一つ一つテクスチャを作る気力は全く無いので、UV展開したマップに
色付きマテリアルをFull Render Bakeしただけの、べた塗り状態です。^^;
天空球は、Icosphereの内側に、空の写真をマッピングしてあります。





● iPhoneの中は、意外と暗い?

Blenderの3DViewと並べてみると、意外と暗いです。
そういえば、iPhone画面のガンマ値とか理解してませんでした。
その辺りを考えて、テクスチャを作る必要がありそうです。





● やっぱり、テクスチャ次第ですね。



殺風景な町並みですけど。。。^^; ぬるぬる動いておもしろい。
丁寧にテクスチャを作れば、リアルな街が作れそうです。
逆に、スターウォーズのデススターみたいに、白一色と陰影だけのシーンも、おもしろそうです。



blender ver 2.49a Blender Foundation  


Posted by ぱすてる at 01:48Comments(11)iPhone

2009年06月27日

ブレンダーからiPhoneへ(SIO2エクスポータの実験)

● すこしずつ、判ってきました。

blender.jpに去年紹介されてた、ゲームエンジン SIO2(エスアイオーツー)です。
Xcodeや、iPhoneアプリの作り方も少しずつ判ってきたので、ソースコードが読めるように
なってきました。^^

(2008年10月10日)blender.jp:iPhone と iPod用ゲームエンジン SIO2 に Blender が使用される
http://blender.jp/modules/news/article.php?storyid=2182

SIO2のチュートリアル動画はこちら
BlenderファイルとXCodeプロジェクトがダウンロードできます。
http://www.sio2interactive.com/TECHNOLOGY.html




● チュートリアルをひとつずつ、マスターしていきます。

チュートリアル03を理解すると、UVマップ/テクスチャを割り当てた、Blenderデータを
iPhoneに取り込めるようになります。

Blenderのシーンを全て(ライトもカメラも含めて)選択したら、スクリプト SIO2 Exporterを実行するだけで、SIO2ファイル(拡張子sio2)ができます。



iPhoneにインポートすると、こんな感じ。
このSSはMac上のiPhoneシミュレータですけど、iPhone実機でもほとんど同じです。





● 複数のUVマップもOK

当然、複数のUVマップに割り当てたテクスチャも持ち込めます。
アンビエントオクルージョンのテクスチャと、スカルプ確認用のグリッドテクスチャを
組み合わせてみました。




インポートすると、こんな感じ。
想像してた以上に、表現力も高そうです。
今まで作ったスカルプとか、片っ端から試してみたくなります。^^





● SIO2ファイルの中身

拡張子は sio2 ですけど、実はZIPファイルです。
中にはブレンダーのオブジェクト(メッシュ、ライト、カメラなど)が入ってます。
ブレンダーのアウトラインと似たような感じです。



ソースコードでは、SIO2内のブレンダーの各部品を相対パスで呼び出すようになってます。





● やっぱり回転させてみたいので。

iPhoneの液晶パネルを指でドラッグすると、templateScreenTouchMoveアクションが
連続で呼ばれますけど、チュートリアル03は中身が空っぽです。



ソースを改造します。
templateScreenTouchMoveアクションの中で、
 1 Touchされたら。
 2 指の移動量を得る。
 3 キューブを指定する。
 4 移動量を元に、3軸回転させる。



これで、指で回転できるようになりました。^^
ブレンダーで家具や室内パースを作ってiPhoneで動かしてみたいです。





● おしまい

まさか、iPhoneアプリ作りでも、Blenderが活用できるとは思ってませんでした。
ちゃんと勉強しておいてよかった。
今後、Android携帯のアプリ作りでも使えるといいですね。
  


Posted by ぱすてる at 00:36Comments(8)iPhone

2009年05月30日

iPhoneSDKでソラマメRSSをHackしてみる修行中

● もっと早くから始めていたらよかった。。。

今年の春から、仕事でiPhoneのアプリを作るようになりました。
まだまだ修行中見習い中ですが、これはおもしろい! ^^/
どんどん、深みにハマりつつあります。

私のiPhoneは、会社支給の開発用機なんですけど、iPhone OS 3.0 を実装した
新機種が出たら、速攻買いの予定です。
新機種は、自分でバッテリー交換できるようになってたら嬉しいのになぁ。

それまでに、プログラムもデザインも勉強して、出遅れた分がんばります。




● 私のブログ専用のRSSリーダーです。 (あまり意味が無いですけど。。。)

ソラマメのfeedを読み込んで、RSSリーダを練習で作ってみました。

「http://pastel.slmame.com/index.xml」から、XMLノードツリーを読み込んで
UIView上に埋め込んで、スクロールできるようにしただけの、超原始的なRSSリーダーです。

標準的なパーツを使っているだけなので、とりあえずデザイン見栄えは2の次ですが。。。^^;




リストをタップすると、そのページが横から出てきます。
やっぱり文字が小さくて、読みづらいです。




iPhoneを水平にしたときの、ランドスケープモードに対応してあります。
これくらいなら、文字が少し読み易くなります。



やっぱりブログ側で、iPhone用のスタイルシートを仕込んでおくのがいいのでしょうね。




● iPhone SDK

Appleデベロッパサイトから無償で配布されている、iPhone SDKです。
iPhoneアプリをMacOSXで動かすiPhoneシミュレータが含まれていますので、iPhoneを持っていない
Macユーザもプログラミングの勉強ができますよ。  ^^V






● ソラマメのRSSフィードを、Objective-C言語でパースするところ。

写真だけではつまらないので、Objective-Cで、XMLをパースする部分をご紹介します。
といっても、殆どの方は興味ないと思いますけど。。。 ^^;

JavaやRubyなどのオブジェクト指向言語でXMLを扱った経験のある方なら、少し勉強するだけで、
すぐにコーディングできると思います。(C++と言わないところがアレで。:p)


ソラマメのRSSは、こんな風にごく基本的な形式です。
ブログ全体のタイトルやURLに続いて、各記事(item)の繰り返しです。

【http://pastel.slmame.com/index.xml】
<rss>
    <channel>
        <title>なにかつくってひまつぶし</title>
        <link>http://pastel.slmame.com</link>
        <description>お友達を増やしたくて始めたSLなのに・・・・・</description>
        <item>
            <title>Macで影付きビューアをコンパイル/ビルドしてみるテスト</title>
            <link>http://pastel.slmame.com/e618772.html</link>
            <description>本文</description>
            <pubDate>Sat, 16 May 2009 20:45:24 +0900</pubDate>
        </item>
        <item>
            <title>ブレンダーで鎖を作る(便利なスカルプ一括組立てスクリプト)</title>
            以下、記事(itemタグ)の繰り返し
        </item>
    </channel>
</rss>


Objective-Cで、XMLを処理する手順です。 Javaとか他の言語でも、大体こんな手順ですね。
コメントをしっかりつけると、自分の理解にもなります。
NSString*  str  =  @"http://pastel.slmame.com/index.xml";
//  URLの文字列を、NSStringクラスのインスタンスに設定します。
//  @"Hello World" みたいに、@をつけた文字列は、NSStringインスタンスに直接代入できます。


NSURL*  urlstr  =  [NSURL  URLWithString: str];
//  NSURLクラスのインスタンスに、URLWithString:メソッドで、URL文字列を設定します。
//  [ ] で囲まれた部分が、インスタンスを作ったりメソッド呼び出しなど、オブジェクト指向な部分です。
//  タイピング量が増えますけど、見慣れてくるとC言語の部分と区別ができて、分かり易いと思えてきます。


NSXMLDocument*  document;
document  =  [ [NSXMLDocument  alloc]  initWithContentsOfURL:urlstr  options:0  error:nil];
//  NSXMLDocumentインスタンスを作って、initWithContentsOfURL:メソッドを呼びます。
//  この1行で、指定したURLからXMLを取得できます。
//  取得したXMLを、documentから取り出せる準備ができました。



NSArray*  arr;
arr  =  [document  nodesForXPath:  @"/rss/channel/title"  error:nil];
//  NSArrayクラスの配列インスタンスを用意します。
//  ブログタイトルのパス「/rss/channel/title」を指定してnodesForXPath:メソッドでノードを取得します
//  同じノードが複数ある場合があるので、配列型で返ってきます。


str  =  [ [arr  objectAtIndex:0]  stringValue];
NSLog(@"(ブログタイトル)%@",  str);
//  配列の先頭(0番目)に入っている、ブログのタイトルを、文字列型で取り出します。
//  ブログのタイトルをデバッグ用コンソールに表示します。 「%@」は文字列インスタンスをあらわす書式


arr  =  [document  nodesForXPath:@"/rss/channel/link"  error:nil];
str  =  [ [arr  objectAtIndex:0]  stringValue];
NSLog(@"(ブログURL)%@",  str);
//  同じように、URLのパス「/rss/channel/link」を指定して、URLを取り出します。

arr  =  [document  nodesForXPath:@"/rss/channel/description"  error:nil];
str  = [ [arr  objectAtIndex:0]  stringValue];
NSLog(@"(ブログ説明)%@",  str);
// ブログ説明文のパス「/rss/channel/description」を指定して、説明文を取り出します。


arr  =  [document  nodesForXPath:@"/rss/channel/item"  error:nil];
//  ブログの記事「/rss/channel/item」を取り出します。
//  記事の数だけ、配列arrに返ってきます。


NSXMLNode*  node;
//  ノード格納用のインスタンスを用意します。

for  (int  i=0;  i<[arr  count];  i++) {
//  記事の数[arr  count] だけ、ループさせます。

    node  =  [ [ [arr objectAtIndex:i]  nodesForXPath:@"title"  error:nil]  objectAtIndex:0];
    NSLog(@"(タイトル)%@",  [node  stringValue]);
    //  i 番目の記事の、タイトル(title)を取り出します。

    node  =  [ [ [arr  objectAtIndex:i]  nodesForXPath:@"link"  error:nil]  objectAtIndex:0];
    NSLog(@"(URL)%@",  [node  stringValue]);
    //  i 番目の記事の、URL(link)を取り出します。

    node  =  [ [ [arr  objectAtIndex:i]  nodesForXPath:@"pubDate"  error:nil]  objectAtIndex:0];
    NSLog(@"(Date)%@",  [node  stringValue]);
    //  i 番目の記事の、投稿日付(pubDate)を取り出します。
}



NSLogの出力結果は、デバックコンソールに表示されます。
これで、XMLから必要なノードが自由に取り出せるようになりました。





● 夢だけは、好き勝手に大きく。。。 (^^ゞ

1本100円くらいの収入でもいいですから、大勢の人がダウンロードしてくれるようなiPhoneアプリが
作れたらいいですね~。

iPhoneで動くSLビューアも試してみましたが、あっという間にバッテリが切れます。
ただ単に移植すればいい、という単純発想だけでは駄目なのでしょうね。

iPhoneはWebサーバにもなりますし、SQLiteデータベースも動きます。
アイデア次第では、インワールドと連携するおもしろいアプリが作れそうです。
(だけど、無料でもダウンロードしてくれるかどうか。。。:D)

  


Posted by ぱすてる at 22:23Comments(5)iPhone