Archive

Archive for 11月, 2009

OpenGL ES(1.1)への道のり・・番外編

11月 26th, 2009

2Dの画像の上に3Dオブジェクトを合成できたと言うことは、
カメラの映像とも合成できるのかな?と思い、やってみることにしました。

カメラの動画部分は自由に取れないので(非公開apiを使えば出来る?)、
撮影前は3Dモデルを上に載せ、撮影後に
didFinishPickingMediaWithInfoでイベントを拾い、画像合成を行うことにしました。
(なので実用アプリとしては少し矛盾も出てしまっています・・。
撮影後、Preview画面がどうしても出てしまい、その画面に移行したことが
SDKからは取れないので、そこでも3Dモデルが動かせてしまう・・とか)

OpenGLESのViewからUIImageへは、
■iPhone – saving OpenGL ES content to the Photo Album

http://www.bit-101.com/blog/?p=1861&paged=2

をそのまま使わせていただきました。
(※上記blogのコメントの通り、
27行目、CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;
の部分を
CGBitmapInfo bitmapInfo = kCGImageAlphaPremultipliedLast;
とすると背景が抜け、上手く背景と合成することが出来ました。)

動作画面
IMG_0004

撮影後の写真
IMG_0035

自分は上手くいかなかったのですが、
カメラのアクションをぶんどる方法

http://devlog.feedtailor.jp/items/detail/5/iPhone

等があるようなので、こういうのを入れていけば、もっと完成度は上げられるかもしれません・・。

kuni プログラム

OpenGL ES(1.1)への道のり・・5

11月 23rd, 2009

チュートリアル3でテクスチャ付き
Cubeの読み込みが出来ました。
03

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

http://pastel.slmame.com/e656887.html

も非常に参考にさせていただいたのですが、
これによると、単純にモデルを変換した「.sio2」ファイルを
自動的に読み込む訳ではなくて、
sio2側(xcode側)からどの部分を読み込むのか
指定が必要っぽい事が分かりました。

(※チュートリアル2と比べても、
sio2ResourceBindAllImages( sio2->_SIO2resource );
sio2ResourceBindAllMaterials( sio2->_SIO2resource );
と言った命令が「templateLoading」
部分に増えている。
しかし、特に変わっているのはそこだけのようなので、
以外に簡単にいろいろ読み込めるようになる?とも思いました。)

引き続きチュートリアル4へと行き、
もっとsio2を見ていきたいのですが・・
ひとまず先に、xcode上で2Dの画像と合成する
と言うのをやってしまおうと思います。
(Blender上でPlaneを作り、そこに画像を貼った方が
早そうなんですが、今回の場合、仕様的にxcode上で
操作したいんですよね・・。)


どういう風にやるのかどこかに載っていないかなあと思いきや、
■iPhone SDK OpenGLのビューの背景を透明にする方法

http://d.hatena.ne.jp/uosoft/20090807/1249570897

という風にまさにやりたいことが書いてあるサイトがあり、
この手順通りにし、合成を行うことが出来ました。

04 (ビデオチュートリアル2と合成)

おお、これで取りあえずの仕様は満たせたのかな?
しかしモデルやカメラを動かしたりしたいと言ったことは
必ず出てくると思うのと、
まだ自由にBlenderモデルを読み込めていないので、
引き続きsio2のビデオチュートリアルを見ていこうと思います。

kuni プログラム

OpenGL ES(1.1)への道のり・・4

11月 23rd, 2009

なんとなくOpenGLの命令群が分かってきたので、
時間もないのでいきなりSIO2のチュートリアルに
行くことに。

幸い、ビデオチュートリアルがかなり充実しているので、
それを見ていくことにし、
チュートリアル2まで見て、自作のモデル
(というかチュートリアルとほぼ同じ・・)を
表示させるところまではなんとか成功。
01
で、では窓の杜で作ったやつを読み込ませてみようと思ったのですが、
Blenderに読み込ませても、メニュー「Help」の右隣、
「SR:screen〜」と書いてある選択ボックスの所に、
「script」などの選択肢がありませんでした。

なので、
「/Applications/blender/blender.app/Contents/MacOS/.blender/scripts/」に直接、sio2のエクスポーター
(sio2_exporter.py)を入れ、メニューの「File」「Export」から直接出すことで、モデルの書き出しが行えました。

※このBlenderのパスなどに付いては、
■[iPhone]SIO2 SDK+Blenderのハマり所

http://d.hatena.ne.jp/makimoke/20091115/1258273515

を参考にさせていただきました。

(名前を付けたフォルダと「.sio2」ファイルが出来るのですが、
フォルダは特にこの場合、使わないですね。
また、Export前にモデルを「A」キーで全部選択しておかないと、0KBの「.sio2」ファイルが出来てしまうので注意。)

ですが、これを表示してみても白いモデルのまま・・。
Blenderではきちんとペンギンが表示出来ているのですが、
それを何らかの方法で、上手く持ってくるか、
Blender側で変更の必要がありそうです。
02
(※他の方が公開しているモデル
■Kator Legaz

http://www.katorlegaz.com/3d_models/index.php

などを入れてみても、そもそもモデルが表示されなかったりするので、やはりもう少しチュートリアルを見ていく必要がありそうです。)


ただ、OpenGLとESは、
glBegin〜endが無いなど違いはありますが、
同じ命令も結構あり、全くやっていることが分からない・・
と言う訳ではないと言った感じでした。
(OpenGLの説明ページ、かなり読み返しましたけどね・・。)

では、なんとかちゃんと表示できるよう、
次のチュートリアルを進めていこうと思います。

kuni プログラム

OpenGL ES(1.1)への道のり・・3

11月 19th, 2009

次に、やっとと言いますか、
OpenGL自体の勉強をと思い、
入門用のページを見ていきました。


■「GLUTによる「手抜き」OpenGL入門」

http://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html#2

見直しも含め、ページに書いてあるとおり
6時間程度で実験前部分まで完了。
macなため導入が簡単でした。
(既にOSに入っているので、
特に何かインストールする必要がない)

但し実験部分をやれる実力は・・
ちょっと付いていないですね・・。
(かなりの時間をかければ出来るのかもしれませんが、
今は時間無いので、実験前までで止めようと思います。)


中で重要と自分が思ったのは・・

・6.1 座標軸とビューポート
(開いたウィンドウの中で, 実際に描画が行われる領域のこと)

・8.3 透視投影する(gluPerspectiveを行い透視投影しないと、平面にしか見えない)

・9.1 図形を動かす
座標変換のプロセスは、

1. 図形の空間中での位置を決める「モデリング変換」
2. その空間を視点から見た空間に直す「ビューイング (視野、視界) 変換」
(1,2をまとめて「モデルビュー変換」と言うこともある。
なんでまとめられるかというと、どちらが動いても、
映し出される情報は変化するから・・と言うことらしい。)

3. その空間をコンピュータ内の空間にあるスクリーンに投影する「透視変換」(射影変換)

4. スクリーン上の図形をディスプレイ上の表示領域に切り出す「ビューポート変換」

という4つのステップで行われる。

全部を実行する必要がないとき、
1(物体が移動したり回転したり)と2(カメラの位置、方向)は
glMatrixMode(GL_MODELVIEW)
で実行、

3(カメラの画角などの変更)は
glMatrixMode(GL_PROJECTION)
で実行できる。


余談
・10.隠面消去処理

http://ameblo.jp/xcc/entry-10281908348.html

にZソート法とZバッファ法の違いが。
バーチャ2はZソート法らしいです。


・11.2 光源を設定する
座標変換のプロセスは “モデリング変換→ビューイング変換→透視変換→…” という順に行われると書きましたが,プログラムのコーディング上は,これらの設定が 逆順になる ことに注意してください.


という部分かな?と思いました。


全体的に、順を追ってソースを書いていくので、
すごくわかりやすかったです。


引き続き、

■OpenGL入門

http://wisdom.sakura.ne.jp/system/opengl/

を見ていきました。
「GLUTによる「手抜き」OpenGL入門」に書かれていないような
事も書いてあり(テクスチャ、フォグ、ディスプレイリストなど)、
続けて見ることで上手く補完できたような気がします。


ただやはりまだすごく表面的なことしか分かっていないような・・
そんな気がしてます。

kuni プログラム

OpenGL ES(1.1)への道のり・・2

11月 19th, 2009

次に行ったことは、
実際にどのように実装していくか?
ということでした。

最終的には、何らかのモデルデータをiPhoneOS上で受け取り、
それが表示できないといけなく、
その辺りは自前で行うのは恐らく無理と思ったので、
何か間に入れて行おうと思いました。


いろいろ検索してみると、

■SIO2(MITライセンス、オープンソース)

http://d.hatena.ne.jp/nakamura001/20081029/1225287233

対応読み込み形式
Blender形式のみ

■Unity($598~$2,998)

http://www.kagoota.com/2009/05/iphoneiphone-fb.html

対応読み込み形式
「.FBX, .dae, .3DS, .dxf .obj」

というのがありました。

http://www.kagoota.com/2009/01/iphoneopengl-4c.html

のページに、それぞれのポリゴン数などが載っているのですが、
Unityの方が優秀っぽいですね・・。

これはどちらにするか悩みどころですが、
ひとまず、オープンソースなSIO2の方を触っていこうと思います。


それにはBlenderのモデリングデータとはどういうものか?
が分かる必要があると思い、
そこまで本格的にやる訳ではないのですが、
ソフトを少し分かった方が良いと思い、

ゼロからはじめる3D CG道場

http://www.forest.impress.co.jp/article/dojo.html

を読んで実際にモデルデータを作っていきました。

実際に自分がモデリングをやる訳ではないので、
最後の方はかなり省きましたが、
大体これも4時間ほどで完了。
Blenderで、モデリング、アニメーションなど
全て1本で出来てしまうんですね。(当たり前か)

しかしモデルデータ作るのって、
かなり大変なんですね・・・。
全然ページのように出来ず、
かなりいびつなモデルになってしまいました。

kuni プログラム

OpenGL ES(1.1)への道のり・・1

11月 18th, 2009

ついにというか、簡単な3D仕事の打診が来てしまいました。
しかし仕様的にすごく簡単っぽい
(3Dオブジェクトと2Dの画像を合成するとだけと言ったような)
物だったので、何とかやってみることにしました。

まず第一に、本当にその合成は出来るのか?
と思い調べてみることに。

いろいろなサイトを見て回ったのですが、
初心者はまず、appleのサイト

http://developer.apple.com/jp/iphone/library/japanese.html

にある、「iPhone OpenGL ES プログラミングガイド」
を見た方が良いとの事だったので、4時間くらいかけて読む。

これを見ると、30Pの「結果の表示」の所に、

␣␣␣␣␣␣␣␣␣コンテンツをその他のレイヤとブレンドしなければならない場合は、CAEAGLLayerオブ ジェクトを不透過にするとパフォーマンスの低下を抑えることができます。ただし、パフォーマン スの低下をなくすことはできません。
CAEAGLLayerオブジェクトをその他のレイヤと合成しなければならない場合は、大幅にパフォーマ ンスが低下します。CAEAGLLayerをその他の␣␣␣␣␣レイヤの背後で再生することによって、このパ フォーマンス低下を抑えることができます。


と書いてあるので、取りあえず合成は出来そうだな・・
と言うことがわかりました。


その他には

・OpenGL1.1と2.0の具体的な違い、
(このPDFには載っていないのですが、
ハードウェア的には
iPhone3G/Touch=1.1、iPhone3GS=2.0なので、
現状では1.1を選択しておくのが良さそう)

・最適化するにはどうすればいいのか
(この辺りは取りあえず読み飛ばしましたけど)

・実際にどのような順路をたどり出力されてるのか

が何となく・・すごく何となくですが・・
わかりました。


自分の中での締め切りは、来週頭〜来週中くらいまでかと思っているのですが、果たしてそれまでで出来るのか?

また、進捗を書いていこうと思います。

kuni プログラム