Posted by at

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

2009年05月16日

Macで影付きビューアをコンパイル/ビルドしてみるテスト

● ずいぶん安定してきましたね〜 ^^

(2008年09月13日)Linux版影付きSLビューアコンパイル手順(1.21対応)
http://pastel.slmame.com/e364321.html

去年のLinux版に引き続き、MacOSX版で影付きビューアのコンパイルビルドを試してみました。
以前はまったく動かず記事にすらできませんでしたが、最近はなんとか影付きで動作するように
なってきたみたいです。




● とはいえ、他のOS版と比べたらまだまだ安定してませんが。。。。

私のMacでは、激しく視点を動かしたり、にぎやかな場所だと、時々ビューアがフリーズしちゃいます。
また、残念ながらビューアのSSでは影が映りませんでしたので、OSXのスクリーンショットです。。。






● コンパイル手順の解説ページ

英語ですけど、書いてある通りコマンドを実行するだけなので誰にでも出来ます。^^;
ちなみに日本語ページもありますが、けっこう古くて失敗します。
解説だけ一通り読めばいいでしょう。

Compiling the viewer (Mac OS X)
http://wiki.secondlife.com/wiki/Compiling_the_viewer_(Mac_OS_X)

完成品ビューアをダウンロードして動かすだけに物足りないと感じる方は、ぜひ一度。




● 必要なソフト(その1) CMakeの入手

OSX標準のmakeコマンドではなく、cmakeが必要です。
以下のサイトからダウンロードして、インストールします。
http://www.cmake.org/cmake/resources/software.html
cmake-2.6.4-Darwin-universal.dmg


インストール途中でコマンドのリンク先を尋ねてきます。
変更せずに「Install Command Line Links」を選択します。



● 必要なソフト(その2) MOD 3 Programmers API

Firelight Tech社のサウンド用開発API(バージョン3)を入手します。
http://www.fmod.org/index.php/download
fmodapi375mac.zip



● 必要なソフト(その3) Xcode 統合開発環境

Mac OSX Leopardに付属している、統合開発環境です。
iPhoneアプリまで作れて無料です。^^





● ビューアソースコードのダウンロードと準備

URLは、こちら。
Source downloads
http://wiki.secondlife.com/wiki/Source_downloads


RC1.23の最新版を入手しました。
ver RC-1.23.1
slviewer-artwork-viewer-1.23.1-r119104.zip
slviewer-darwin-libs-viewer-1.23.1-r119104.tar.gz
slviewer-src-viewer-1.23.1-r119104.tar.gz


作業用フォルダを作ってまとめておきます。



ここからは、ターミナル(コンソール)を開いて、コマンド入力になります。
ファイルを解凍すると、「linden」「fmodapi375mac」というディレクトリができます。
$  tar  xvzf  slviewer-darwin-libs-viewer-1.23.1-r119104.tar.gz
$  tar  xvzf  slviewer-src-viewer-1.23.1-r119104.tar.gz
$  unzip  slviewer-artwork-viewer-1.23.1-r119104.zip
$  unzip  fmodapi375mac.zip






● fmodapi375 のコピー

fmodapiのライブラリやインクルードファイルを、lindenディレクトリにコピーします。
ここは、解説サイトのとおり、ターミナルにコピペして実行すればOK。
(この部分はスクリプトにしておくと、今後便利です。)
$  mkdir  -p  linden/libraries/include/
$  mkdir  -p  linden/libraries/universal-darwin/lib_debug/
$  mkdir  -p  linden/libraries/universal-darwin/lib_release/

$  cd  fmodapi375mac/

$  cp  -p  api/inc/*.h  ../linden/libraries/include/
$  lipo  -create  api/lib/libfmod.a  api/lib/libfmodx86.a  -output  ../linden/libraries/universal-darwin/lib_debug/libfmod.a
$  touch  -r  api/lib/libfmodx86.a  ../linden/libraries/universal-darwin/lib_debug/libfmod.a

$  cd  ..
$  cp  -p  linden/libraries/universal-darwin/lib_debug/libfmod.a  linden/libraries/universal-darwin/lib_release/libfmod.a






● プレコンパイル準備(プロジェクトファイルの作成)

linden/indra/ 配下のdevelop.pyを実行して、Xcodeのプロジェクトファイルを作成します。


デバック情報は不要なので、リリースタイプを指定して実行しました。
$  cd  linden/indra/
$  ./develop.py  --help
$  ./develop.py  -t  Release  configure





● Xcodeでコンパイルビルド

indra/build-darwin-i386配下に、Xcodeのプロジェクトファイルができます。
ダブルクリックすると、Xcodeが起動します。



デバッグ情報は不要なので、リリースタイプでビルドします。
500近いファイル数を処理しますので、お茶でも一杯どーぞ。



build-darwin-i386/newview/Release/ 配下に、ビューア実行ファイルができあがります。


あとは、デバッグコンソールで、RenderUseFBOとRenderDeferredを有効にすればいいです。





● いろいろなソースコードをコンパイルしてみる。

リンデンのサイトからはいろいろなソースコード(ブランチ:開発コード?)が入手できる
ので、新しもの好きの方は試してみるのもいいかも。

たとえば、ブランチ:レンダーパイプライン。
これは以前、シャドウドラフト(Shadow Draft)と呼ばれていたソースです。


Snapshot of internal branch render-pipeline



これをビルドすると、ハードウェア設定に、シャドウの設定メニューがあります。



でも、わたしのMacでは、シャドウは表示されませんでした。。。残念 ><;
リンデンさん、がんばってくださいね〜。
  


Posted by ぱすてる at 20:45Comments(2)SLViewer

2009年05月02日

ブレンダーで鎖を作る(便利なスカルプ一括組立てスクリプト)

● やっと、試すことができました。

blenderでスカルプト一括組み立てスクリプト説明1
http://ayaoritomoe.slmame.com/e584100.html

綾織トモエさん作成の、Blender用一括組み立てスクリプトです。
RLに余裕ができたので、やっと使ってみることが出来ました。
結果は、これは便利〜、でした。^^




● まずは練習、という事で、鎖のチェーンでネックレスもどきを試してみました。






● 鎖のパーツ作り

NurbsCircleでリングを二つつくります。
一つは鎖パーツの形(外側の長円)、もう一つは鎖パーツの太さ(内側の円)になります。



【Curve and Surface】  「BevOb」で内側の円を指定します。
内側の円の直径を変えるだけで、鎖パーツの太さが簡単に変えられます。



あとは、左右45度回転させると、ねじれた鎖パーツができあがります。





● ネックレスもどき作り

SLアバターを利用します。
ベジエカーブまたはNurbsCircleで、首周りにネックレスのパスを描きます。



パスと鎖パーツを、「Follow Path」モードで親子関係にします。
その後、鎖パーツを「Clear Origin」。 (そのまえに鎖パーツはセンターを出しておきます)



【Curve and Surface】 パスを選択してフレーム数「PathLen」を指定。(ここではフレーム数40)
【Anime Settings】       鎖パーツを選択して「DupliFrames」フレームコピー(ここでもフレーム数40)



【Anime Settings】  「Track」を適切に設定して、鎖パーツの向きを変えます。
これで、パスに沿って鎖パーツが複製されました。(40は試行錯誤して決めた数字です。)
異常に太いネックレスですが、とりあえず修行中という事で。。。(^^ゞ





● スクリプト実行

あとは、鎖パーツを全て選択して、綾織さん作成のスクリプトを実行します。
パスのカーブに沿って、みごとにスカルプ鎖パーツがつながりました。
大きさもブレンダーでのサイズそのままです。 ^^
ちなみに、鎖パーツ一つの長さは、0.01BU(ブレンダーユニット)です。







● 調子に乗って、どこまで小さな鎖のネックレスができるか、試してみました。

大きさが違う鎖パーツそれぞれ長さは、0.005BU、0.0025BU、0.001BUの大きさです。



こんな感じになりました。むこうから手前に、長さ0.005 0.0025 0.001の鎖パーツで出来てます。


透かして近づければわかります。 マイクロスカルプネックレス。 ^^
しかし、こんな大要素数のアクセサリなんて、迷惑ですな。。。。



本当に便利なスクリプトですね~。 ありがとうございました。  _O_





● おまけ。 気になるイロイロ

(その1)
  なんですかこの動画は。。。もしかして、すごく便利かも。
  アーマチュアモディファイアって意外とスカルプ作りに使えるんですよ。

  Blender 2.49RC1 アーマチュアスケッチ
  http://wiki.blender.org/index.php/User:Theeth/etch-a-ton


(その2)
  コンポジットノード、マテリアルノードに続き、テクスチャノードが実装です。
  Blenderでテクスチャ作りが、ますます面白くなりそう。

  Blender 2.49RC1 テクスチャノードエディタ 
  http://wiki.blender.org/index.php/Dev:Source/Blender/2.49/Texture_Nodes


(その3)
  おなじみ、Dominoさんのスクリプトですが、SubSurfモードをサポートしてますね。
  活用方法を考えて見ましょうか。




blender ver 2.48a Blender Foundation
  


Posted by ぱすてる at 20:42Comments(7)ものづくり