- トップページ
- OpenGLで作るiPhone SDKゲームプログラミング
OpenGLで作るiPhone SDKゲームプログラミング

3,080円(本体 2,800円+税10%)
- 品種名
- 書籍
- 発売日
- 2009/12/18
- ページ数
- 352P
- サイズ
- B5変型判
- 著者
- 横江宗太(株式会社パンカク) 著
- ISBN
- 9784844328087
OpenGLを使ったiPhone用2D/3Dゲームプログラミングがじっくり学べる!
★筆者による本書のサポートブログ
http://iphone.pankaku.com/book/
本書を補足する内容や、最新のOS/SDKに対する対応情報などを適宜更新しています。
「読者アンケートに答える」「読者プレゼントに応募」の場合もこちらをご利用ください。
書籍の内容に関するお問い合わせはこちら。お答えできるのは本書に記載の内容に関することに限ります。
学校・法人一括購入に関するお問い合わせはこちらへ。
目次
iPhoneゲームプログラミングの面白さ/CoreGraphicsとOpenGL/iPhoneにおけるOpenGLプログラミング/本書の使い方/本書を読む上で必要となる知識/本書で扱う内容/本書で扱わない内容/その他の注意事項
第1章 OpenGL(2D)
iPhoneにおけるOpenGL/OpenGL ES Applicationの全体像/render関数の流れ/レンダラーの設定/ビルドして実行/座標系/座標系の変更/ビルドして実行/ポリゴンの描画/ポリゴンの描画の流れ/ライブラリの作成/下準備:Objective-C++の有効化/モジュール、ヘッダファイルの追加/正方形のポリゴン描画関数の作成/OpenGLの設定部分と描画部分の分離/色付きの正方形の描画関数の作成 etc.
第2章 ハエたたき
プロジェクトの設計/プロジェクトの作成/新しいOpenGL ES Applicationの作成/座標系の設定/グラフィック用ライブラリの追加/背景画像の表示/テクスチャの読み込み/テクスチャの描画/標的の表示/テクスチャの読み込み、描画/標的の回転/標的の移動/標的の拡大縮小/標的を動かしてみる/直線移動/ワープ処理/旋回処理/方向転換処理/当たり判定/レンダラーとビュー etc.
第3章 パーティクルシステム
パーティクルシステムとは/パーティクルシステムのメリットとデメリット/パーティクルシステムの原理/パーティクルシステムの実装/新しいOpenGL ES Applicationの作成/パーティクルの大量表示/パーティクルのライフサイクル/パーティクルの動的追加/リファクタリング/パーティクルを動かす/パーティクルの破棄/時間に応じた変化/パーティクルシステムの高速化 etc.
第4章 レースゲーム(2D)
プロジェクトの設計/プロジェクトの作成/OpenGL ES Applicationの作成/ランドスケープモード/ゲームクラスの導入/ゲームクラスを導入する理由/MyGameクラスの作成/MyGameクラスとビュー、レンダラーの連携/レンダラーとゲーム情報の分離/インターフェースの作成/ボタンの作成/アクセルのオンとオフ/ゲームの進行部分の作成/ゲーム進行用メソッド/車の移動/車の左右旋回 etc.
第5章 衝突判定と衝突応答
衝突判定と衝突応答とは/衝突判定と衝突応答の実装/新しいOpenGL ES Applicationの作成/ゲームクラスの作成/ボールの描画と移動/慣性力のコントロール/ベクトルの導入/ベクトルとは/ベクトルの実装/graphicUtilのVector2D対応/Vector2Dへの置き換え/ベクトルの計算/ベクトルの加算/ベクトルの減算/ベクトルの乗除/ベクトルの長さの計算/単位ベクトル/内積を求める関数 etc.
第6章 レースゲーム(3D)
3Dの基礎/座標系/OpenGLにおける2Dと3D/射影/深度テストと深度バッファ/見た目の3D化/視野の設定/3D部分と2D部分/3Dのポリゴン/3D座標の表現/コースの壁/タイヤバリアの描画/高速化/頂点バッファオブジェクト(VBO)/頂点バッファオブジェクトの使い方/頂点バッファオブジェクトの使用/車の描画/タイヤの描画/ボディの描画/仕上げ
関連書籍
ダウンロード
-
本書で解説しているゲームの完成版ソースコードと、それぞれのゲームで利用する画像ファイルやサウンドファイルは、下記のリンクをクリックしてダウンロードしてください。
なお、ダウンロードしたファイルはzip形式で圧縮されています。展開してからご利用ください。
http://www.impressjapan.jp/support/aftercare/download/2808.zip
お詫びと訂正
誤記のためにご迷惑をおかけし、誠に申し訳ございません。
- 49ページ 本文5行目
- [誤]
角度 = (360÷n) × ix = cos(角度) × 半径, y = sin(角度) × 半径 - [正]
角度 = (360÷n) × i, x = cos(角度) × 半径, y = sin(角度) × 半径 -
備考:
iとxの間にカンマが抜けていました。
- [誤]
- 153ページ 本文1行目
- [誤]
setViewメソッドの中身を実装します。 - [正]
この文は不要です。 - 【 第2刷にて修正 】
- [誤]
- 153ページ ES1Renderer.mmの3行目
- [誤]
...略...
@implementation ES1Renderer
@synthesize
...略...
}
@end - [正]
...略...
@implementation ES1Renderer
@synthesize glView;
...略...
}
@end -
備考:
ソースコードの一部が誤っていました。
- 【 第2刷にて修正 】
- [誤]
- 153ページ 本文2行目
- [誤]
最後に、EAGLViewの~setViewメソッドを呼び出し、 - [正]
最後に、EAGLViewのinitWithCoder内のES1Rendererを生成している個所でglViewに自身をセットし、 - 【 第2刷にて修正 】
- [誤]
- 161ページ 本文10行目
- [誤]
標準を叩いたときに鳴らす〜をEAGLViewに追加します。 - [正]
標準を叩いたときに鳴らす〜をES1Rendererに追加します。 -
備考:
本文に誤りがありました。
- [誤]
- 162ページ 掲載コードの15行目
- [誤]
hitSoundFileUrlerror:nil]; - [正]
hitSoundFileUrl error:nil]; -
備考:
hitSountFileUrlの後の半角スペースが抜けていました。
- [誤]
- 164ページ 掲載コードの青字部分の4行目~6行目
- [誤]
...略...
bgm = [[AVAudioPlayer alloc] initWithContentsOfURL:bgmFileUrl
error:nil];
bgm[setNumberOfLoops:-1];
bgm[play];
...略...
- [正]
...略...
bgmSound = [[AVAudioPlayer alloc] initWithContentsOfURL:bgmFileUrl
error:nil];
[bgmSound setNumberOfLoops:-1];
[bgmSound play];
...略...
-
備考:
ソースコード上の表記が一部間違っていました。
- 【 第3刷にて修正 】
- [誤]
- 186ページ フェードインの掲載コードの11行目
- [誤]
...略...
//フェードアウトします
alpha = 255 - (int)round(lifePercentage * 2.0f * 255.0f);
...略... - [正]
...略...
//フェードアウトします
alpha = 255 - (int)round((lifePercentage - 0.5f) * 2.0f * 255.0f);
...略... -
備考:
ソースコード上の表記が一部間違っていました。
- 【 第2刷にて修正 】
- [誤]
- 188ページ 掲載コードの11行目
- [誤]
//1つのパーティクルあたり6頂点×2要素(x,y)×最大のパーティクル数 - [正]
//1つのパーティクルあたり6頂点×2要素(u,v)×最大のパーティクル数 -
備考:
ソースコード上の表記が一部間違っていました。
- [誤]
- 202ページ ランドスケープモード設定に関する掲載コード(12行目)
- [誤]
...略...
glView.transform = CGAffineTransformConcat(glView.transform, CGAffineTransformMakeRotation(M_PI * 90.0f / 180.0f);
...略... - [正]
...略...
glView.transform = CGAffineTransformConcat(glView.transform, CGAffineTransformMakeRotation(M_PI * 90.0f / 180.0f));
...略... -
備考:
最後のとじ括弧「)」が抜けていました。
- [誤]
- 247ページ ES1Renderer.mmの8行目
- [誤]
int currentLapTimeMilliSeconds =
(int)floor((currentGame.currentLapTime * 1000.0f) % 1000; - [正]
int currentLapTimeMilliSeconds =
(int)floor(currentGame.currentLapTime * 1000.0f) % 1000; -
備考:
不要な括弧が含まれていました。
- 【 第3刷にて修正 】
- [誤]
- 249ページ ES1Renderer.mmの7行目
- [誤]
int currentLapTimeMilliSeconds =
(int)floor((currentGame.fastestLapTime * 1000.0f) % 1000; - [正]
int currentLapTimeMilliSeconds =
(int)floor(currentGame.fastestLapTime * 1000.0f) % 1000; -
備考:
不要な括弧が含まれていました。
- 【 第3刷にて修正 】
- [誤]
- 265ページ graphicUtil.hの2行目
- [誤]
#import "ector2D.h" - [正]
#import "Vector2D.h" -
備考:
ソースコード上の表記が一部間違っていました。
- 【 第3刷にて修正 】
- [誤]
- 290ページ 5-7-2 外枠との衝突のソースコードの3行目
- [誤]
- (void)update{
// ラップタイムを計測します
currentLapTime = (int)floor(-[currentLapStartTime timeIntervalSinceNow]); ←この部分を修正 - [正]
この部分の修正は必要ありません。 - 【 第3刷にて修正 】
- [誤]
- 294ページ ES1Renderer.mmの15行目
- [誤]
drawCircle(currentGame.tyreBarrier[i]->center,
currentGame.tyreBarrier[i]->radius, 8, 255, 255, 255, 255); - [正]
drawCircle(currentGame.tyreBarrier[i]->center,
8, currentGame.tyreBarrier[i]->radius, 255, 255, 255, 255); -
備考:
タイヤバリアの描画部分において、引数の順番が間違っていました。
- 【 第3刷にて修正 】
- [誤]
- 325ページ ES1Renderer.mmの14行目
- [誤]
drawTyreBarrier(currentGame.tyreBarriers[i]->radius, 0.03f,
tyreTexture, tyreSideTexture); - [正]
drawTyreBarrier(currentGame.tyreBarriers[i]->radius, 0.03f, tyreTexture); -
備考:
関数の引数が多い個所がありました。
- 【 第3刷にて修正 】
- [誤]
お問い合わせ
書籍の内容に関するお問い合わせはこちら。お答えできるのは本書に記載の内容に関することに限ります。









