強火で進め

このブログではプログラム関連の記事を中心に書いてます。

iPhoneで「3Dはちゅね」動かすまで勉強方法の流れ(概要)

今回、「3Dはちゅね」を動かすまでにどのようなサイトや本を参考に学習を進めたを紹介します。良ければ参考にして下さい。

とりあえず実際に進めた順番で書きますがもっと効率的な順番やその人に有った順番なども有ると思うので実際に試すときは適宜自分にあった順番でやってみて下さい。

1. OpenGLの入門レベルのプログラムをMacで作ってみる。

とりあえずESどころかOpenGL自体のプログラムをしたことが無かったのでOpenGL入門から始めました。参考にしたのは以下のサイトや本です。順番に解説して行きます。

khronos(クロノス)のサイト
http://www.khronos.org/

とあるセミナーの懇親会でOpenGLの話が盛り上がったときに「OpenGLってあれでしょ、SGIが作った3Dライブラリの?」って話したときに今はkhronos(クロノス)ってところが管理してるって聞いてショックを受けたことがありました。

現在はkhronosが管理しているので第一情報を見たい場合はこちらのサイトを見ることになります(SGIのサイトにも多少、昔のバージョンの情報が残っているみたいです)。

こちらで紹介した様にリファレンスが確認できるのでよく使いました(今は赤本の翻訳本にたよりきりです(笑))。

他にもこちらのサンプルコードやチュートリアルのリンク集のページなどが有用です。

OpenGL API Beginning OpenGL Sample Code & Tutorials
http://www.opengl.org/code/category/C22

OpenGL® Programming on Mac OS® X: Architecture, Performance, and Integration

OpenGL® Programming on Mac OS® X: Architecture, Performance, and Integration

こちらは、とりあえずネット上にあるサンプルをコンパイルしようとしたときMacの場合にちょっと勝手が違うようでコンパイルできなかったために購入しました。Mac特有のOpenGLを使うときに必要な作業が解説してあります。ここで解説した様な手順で行えばMacでコンパイルできると理解できたのでよかったのですがそれを理解するだけにこれを購入したのはちょっと大げさだったかなと思います。

MacでどっぷりOpenGLをやる予定があるのであれば購入するのも良いですがiPhone中心で進める予定の人には必要ないかな?という印象です。

赤本(red book)のオンライン版
http://www.glprogramming.com/red/

※今、アクセスしてみたところなぜか繋がりませんでした。

ちょっと古いらしいですが入門レベルの勉強には問題ないかなと思い、とりあえず主なプログラムをコンパイルしてみました。

NeHe Productions
http://nehe.gamedev.net/

海外だとOpenGLのチュートリアルはここでしょ。みたいな存在の様です。左側のメニューの「OpenGL Tutorials」からチュートリアルのページに移動できます。入門レベルからの丁寧な解説がして有りとても良いサイトだと思います。

各ページの最後には様々な方が様々なプログラミング言語で同様に実装したサンプルへのリンクも有りこちらも有用です(チュートリアルが進むほどに数が減ってるのが残念ですが)。

Intel Macの場合は「Mac OS X/Cocoa」をダウンロードするのが良いでしょう。バージョンが古い様なのでそのままでは開けませんでした。拡張子が .pbproj のファイルを .xcodeproj に変更して開くと「アップロードしますか?」と表示が出るのでアプロードすると開くことができます。アップロードしたファイルは同じ名前だと保存できないので別の名前を付けて下さい。
取り合えずこれで開けましたけどもっとまっとうなアップロードの仕方が有るかもしれません(ご存知の方教えてくださーい)。

Nate Robins - OpenGL - Tutors
http://www.xmission.com/~nate/tutors.html

テクスチャやライトなどのパラメータをリアルタイムに変更して、どのように変化が発生するかを確認できるサンプルが公開されています。

オープンソースですがGUI部分が丁寧に作られているのでメインの描画部分以外の描画処理も多数記述されているので初心者がいきなりこのソースを参考に勉強を進めるのはちょっと難易度が高い様に思えます。

最初はそれぞれのプログラムを実行させてパラメータを変更したときの変化を確認する教材として使ったり、コマンド名で検索をかけてピンポイントで参照するなどの使い方が良いと思います。

この様に英語のサイトを中心に勉強を進めたのですが英語を翻訳しながらだったので効率が悪くて日本語のサイトで良いのは無いかなぁと探したときにこちらのサイトが見つかりました。

GLUTによる「手抜き」OpenGL入門
http://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html

和歌山大学の床井浩平という准教授の方が書かれているサイトです。凄く丁寧な解説で分かりやすかったです。

2. iPhoneで動作させる。

さて、入門レベルはクリアしたのでそろそろiPhoneで動作させるかなぁ?などと思い、Mac上で正常に動作しているプログラムをiPhoneにコピーしてみました。

実際にはAppleのGLGravityというティーポットが表示されるサンプルの一部を差し替えテストしてみました。

ところがエラーが発生し、コンパイルが通りませんでした。エラーは描画を開始のブロックを表すbegin()のコマンドで発生していました。調べたところOpenGL ESではbegin()〜end()形式の描画が使えない様でした。

コメントアウトした元のプログラムを確認すると glDrawElements() というコマンドを使っていました。しかし、こちらは描画をしているっぽいところを順番にコメントアウトして見つけただけで実際にはどういうことをしているのかはさっぱり分かっていませんでした。

glDrawElements(GL_TRIANGLE_STRIP, new_teapot_indicies[i], GL_UNSIGNED_SHORT, &new_teapot_indicies[i+1]);

3. しょうがないので中級レベルのお勉強を進める

サンプルコードをコピペじゃ動作しないことが判明したのでしょうがなく中級レベル(なのかな?)の勉強を進めることにしました。

しかし、中級レベルの情報はとにかく少ないです。それっぽいの見つけても実際はbegin()〜end()形式でやっているもの。もしくは逆にかなり高度すぎてチンプンカンプンなものばかりでした。

そうなるとこういう場合は書籍が良いのかなぁ?と思い調べたところとりあえずOpenGL ESについて検索をかけると以下の本が見つかりました。

Mobile 3D Graphics: with OpenGL ES and M3G (The Morgan Kaufmann Series in Computer Graphics)

Mobile 3D Graphics: with OpenGL ES and M3G (The Morgan Kaufmann Series in Computer Graphics)

良さそうな本ではあったのですがAmazon.comには在庫あるのにAmazon.co.jpでは何故か在庫切れでした。東京駅近くの八重洲ブックセンターには置いてあったのですが原価よりかなり高額であったためあきらめました。

代わりに購入したのがこちらです。

OpenGL® SuperBible: Comprehensive Tutorial and Reference

OpenGL® SuperBible: Comprehensive Tutorial and Reference

OpenGL ESの解説もあるようだし、この本1冊で赤本、青本を兼ねるような本だと知り、高いけどそれならお得かなと思い購入しました。感想としては確かに良い本っぽいけど英語なので翻訳しつつ読むので効率が悪かったです。そしてソースコードのボリューム多いです。という印象でした(ちなみにOpenGL ESについてはそんなにはページ数は多くないです)。

理解は進むけどちょっと効率悪いかな?さてどうしようと再度、検討をすることにしました。

そこで原点に立ち戻りOpenGLプログラムを始める前から名前だけは知っていた赤本の登場です。

OpenGLプログラミングガイド 原著第5版

OpenGLプログラミングガイド 原著第5版

OpenGL(R) Programming Guide: The Official Guide to Learning OpenGL(R), Version 2.1 (6th Edition)

OpenGL(R) Programming Guide: The Official Guide to Learning OpenGL(R), Version 2.1 (6th Edition)

それまではWeb上にチュートリアルあるし、リファレンスも有るし、なんといっても値段高いので躊躇してました(特に翻訳本なんか13,650円もしますし)。

でもそろそろ自分の実力では打つ手が無くなったので本屋さんにて立ち読みしたところこれは使えそうだということが確認できたので購入することに決めました。

それからは毎日、赤本とのにらめっこな日々です。翻訳本なので解説の文章についてはサクサク読む事ができかなり効率的に進めれました。そして、P.65からの頂点配列やP.81からのバッファオブジェクトの部分の勉強を完了させた辺りで何とか「はちゅね」を表示することができました。

とまぁ、以上の様にiPhoneで使われているOpenGLはOpenGL ESですが「はちゅね」まではOpenGLの勉強だけで問題なかったです。もっと凝ったことをするときや最適化を進める場合には必要になるのではないかと思っています。

あと、赤本を買ってからはそちらを見れば大丈夫になったのですがそれまではこちらのOpenGL ESのリファレンスを日本語翻訳されている方のサイトが大変参考になりました。

G.P.K
http://g-p-k.no-ip.org/brew/index.php?im_id=GL

まとめ

以上をまとめると「やっぱり赤本最強!かなり高いけどOpenGLやるなら買っとけ」ってことになるかと思います。

OpenGLのリファレンスはWeb上にもありますが素早くは検索しづらいですし、実際に使うには使用例として使えるサンプルの検索などが必要となる場合もあるため効率的に進めることができません。

以上が僕の場合の勉強の進め方です。
英語の得意な人などであればまた違った順番は方法で進め方もあるかと思いますがみなさんのiPhoneでのOpenGL ESの勉強の助けになれば幸いです。

※そのうち情報が整理できたらiPhoneでのOpenGL ESの使い方講座みたいなエントリーがかければと思っています。
※あと、みなさんも何か良いOpenGL/OpenGL ESのサイトなど見つけられましたらコメント欄にて教えて下さい、お願いします<(_ _)>