GPU 並列図形処理入門――CUDA・OpenGLの導入と活用
この本の概要
2Dや3Dなどのコンピュータ画像処理を担うGPU(Graphic Processing Unit)は性能向上が著しく,その処理能力を活かすためのソフトウェア開発が求められています。GPUはCPUと異なり並列処理機能に秀でており,複雑な図形計算を高速処理できるからです。本書はGPUによる並列処理機能を軸に,nVIDIA社のCUDA(Compute Unified Device Architecture)の利用方法とOpenGLのプログラミング方法を基礎の基礎から解説します。コンピュータグラフィックスのプログラミングを実践するための理論を学べます。C言語の知識は必須です。
こんな方におすすめ
- OpenGL、CUDAを利用したプログラミングの基礎を学びたい方に
目次
第1部 コンピュータグラフィックスの基礎
第1章 プログラミングの準備
- 1.1 Visual
- 1.1.1 コンソールアプリケーションの作成
- 1.1.2 設定の変更
- 1.2 glutとOpenGLの利用6
- 1.3 freeglutのインストール
- 1.4 freeglutを利用したプログラミング
第2章 OpenGLとglutを用いた2次元コンピュータグラフィックス
- 2.1 2次元コンピュータグラフィックスのプログラミング
- 2.1.1 図形の指示
- 2.1.2 座標の指示
- 2.1.3 図形の色付け
- 2.2 座標の投影とビューポート変換
- 2.2.1 正投影の導入による表示範囲の拡大
- 2.2.2 ウィンドウとビューポート変換
- 2.2.3 アスペクト比の変更
- 2.2.4 図形中心の表示
第3章 3次元コンピュータグラフィックスへの拡張
- 3.1 正投影31
- 3.1.1 視点の変更
- 3.1.2 視体積の範囲決め
- 3.1.3 方位角と仰角の利用
- 3.1.4 マウス操作による視点の変更
- 3.2 ポリゴンの描画
- 3.2.1 隠面消去
- 3.2.2 シェーディング
第2部 OpenGLを用いた並列図形処理 55
第4章 ボロノイ図の生成
- 4.1 ボロノイ図とは
- 4.2 ボロノイ図の画像生成
- 4.3 実装の準備
- 4.4 円錐形状の描画
- 4.5 画像の取得と利用.70
第5章 オフセット面の生成
- 5.1 デプスバッファを用いたオフセット面の計算
- 5.2 STLフォーマット
- 5.3 STLファイルの読み込み用関数
- 5.4 ポリゴンモデルの表示用関数
- 5.5 オフセットプログラムの準備
- 5.6 オフセット処理の実現
- 5.6.1 球,円筒形,スラブ形状の描画
- 5.6.2 オフセット面の取得
- 5.6.3 オフセット面の描画
- 5.7 プログラムの完成
第3部 CUDAの導入とOpenGLとの併用
第6章 CUDAの導入
- 6.1 CUDAのインストール
- 6.2 Visual StudioによるCUDAプログラムの開発
- 6.3 CUDA処理の基本的な考え方
- 6.3.1 典型的な処理の流れ
- 6.3.2 GPUの並列処理アーキテクチャ
- 6.3.3 スレッドによる並列処理
- 6.3.4 ブロックとグリッド
- 6.4 CUDA関数の紹介
- 6.4.1 メモリ管理
- 6.4.2 データ転送
- 6.4.3 ブロックとグリッドの定義
- 6.4.4 カーネル関数
- 6.4.5 デバイス関数
- 6.5 プログラム例
- 6.5.1 CPU処理の実装例
- 6.5.2 CUDAによる実装
- 6.5.3 シェアードメモリの利用
第7章 粒子法解析とアニメーション表示
- 7.1 粒子法解析
- 7.2 粒子法解析アルゴリズムの実装
- 7.2.1 CPU処理による実装
- 7.2.2 GPU処理による実装
- 7.3 VBOの導入
- 7.3.1 VBOを用いた図形描画
- 7.3.2 VBOによる粒子群の表示154
- 7.4 CUDAとVBOの併用
第8章 拡散方程式の数値解法とアニメーション表示
- 8.1 差分法による拡散方程式の数値解法
- 8.2 差分法アルゴリズムの実装
- 8.2.1 CPU処理による実装
- 8.2.2 GPU処理による実装
- 8.2.3 シェアードメモリの利用
- 8.2.4 テクスチャメモリの利用
- 8.3 PBOの導入
第4部 CUDAによる複雑な図形処理 195
第9章 メタボール法
- 9.1 粒子群の濃度場
- 9.2 ソートによる粒子群のセルへの割り当て
- 9.3 実装の準備
- 9.4 基本的なデバイス関数の定義
- 9.5 カーネル関数の定義
- 9.6 thrustライブラリ
第10章 マーチングキューブ法
- 10.1 マーチングキューブ法
- 10.2 アルゴリズムの概要
- 10.3 実装の準備
- 10.4 テクスチャメモリの利用
- 10.5 カーネル関数の定義
- 10.6 Metaball.cppの修正
第11章 包含立体の利用
- 11.1 包含ボックス
- 11.2 ボックス定義の準備
- 11.3 AABBとOBBの定義
- 11.3.1 AABBの定義
- 11.3.2 OBBの定義
- 11.4 包含ボックスに関する計算
- 11.4.1 点と包含ボックス間の距離
- 11.4.2 包含ボックス間の交差判定
- 11.5 階層的な包含ボックス
- 11.6 プログラムの利用法
第12章 立体間の衝突検出
- 12.1 階層的な包含ボックスによる絞り込み
- 12.2 ポリゴン間の並列交差判定
- 12.3 撃力ベース法
- 12.4 実装の準備
- 12.5 階層的な包含ボックスによる絞り込み
- 12.6 撃力ベース法による衝突の解消311
- 12.7 衝突判定
- 12.8 デバイス関数
- 12.9 カーネル関数
- 12.1 プログラムの利用法
- あとがき
- サンプルプログラムの使い方