Last Update 2008/11/21

Open GLを使ったアニメーションプログラミングの基本から応用まで
物理・制御シミュレーション入門

酒井 幸市 著
B5変型判 口絵8ページ+328ページ
CD-ROM付き
定価3,080円(税込)
JAN9784789836951
2002年1月1日発行
[絶版2008.11.21] 物理・制御シミュレーション入門
大変恐縮ですが,こちらの商品は品切れ絶版となりました.

  最近市販されている3次元コンピュータグラフィックス(3DCG)やアニメーションに関するソフトウェア,ゲームでは,人間や動物のような複雑な形状を本物そっくりに作成し,それらを自由に動かすことができるようになっています.
 これらのアプリケーションでは,グラフィックスライブラリOpenGLが広く使われています.OpenGLは,SGI社(Silicon Graphics, Inc.)が開発したグラフィックスライブラリですが,いまやワークステーションばかりでなく,ほとんどのパソコンで利用できるようになっています.特に,Microsoft社のWindows NT/95/98/2000/MeをOSとするパソコンでは,VC++(Visual C++)によって利用することができます.
 著者は,工業高等専門学校において,卒業研究や工学実験に3DCGに関する項目を取り入れてきました.それは,学生自らが直接OpenGLを組み込んでプログラミングすることが,CG教育にとってより効果的だからです.拙著「OpenGL 3D プログラミング」(以後,「前著」という)は,このような目的で学生教育用に著した本です.
 VC++によるプロジェクトの作成には,通常MFC(Microsoft Fundation Class) AppWizardを利用するのが一般的です.基本的なソースコードを利用者に代わって自動的に生成してくれる便利なものですが,使い慣れるまでには相当な時間を要します.一方,VB(Visual Basic)は,プログラミングが比較的容易であり,何よりもWindowsの特徴であるGUI(Grafical User Interface)を極めて簡単に構築できます.
 前著は,プロジェクトの基本構成をVB側で作り,VC++で作成したDLL(Dynamic Link Library)をVB側からコールする形態をとっています.DOS用C言語と同じ感覚でDLLを作成しており,DLLを作成する際にOpenGLを組み込んでいます.VBによるプロジェクトの作成方法から説明しており,DOS用C言語をある程度習得している方ならば理解できるような構成にしてあります.

 本書の内容は以下のとおりです.
第1章:OpenGLによる3次元CGの構築
 コンピュータグラフィックスの基本を学習し,OpenGLによる3DCGの構築手法を学びます.前著の第1章〜第5章の内容をコンパクトにまとめ,さらに,超2次関数によるモデリングも追加しています.
第2章:OpenGLの高度な機能
 テクスチャマッピングと半透明オブジェクトについて説明しています.グリッド格子による布モデルを導入しています.
第3章:リアルタイムアニメーションの実現
 本書で扱うリアルタイムアニメーションの原理を述べています.動力学を利用した等加速度運動,放物運動,さらには三角関数による旗のアニメーションをも扱っています.
第4章:エージェントのモデリング
 階層構造をもつオブジェクトのモデリング方法を述べ,複雑な階層構造として人型オブジェクト(本書ではエージェントと呼ぶ)を具体的に取り上げ,キーフレームアニメーションおよび,運動学と逆運動学による操作関数の作り方を説明しています.
第5章:仮想空間のレイアウト
 次章で扱う複雑な仮想空間を,VB側でレイアウトできるようにしています.エージェントが与えられた中継点を順次歩行できるようにしています.また,トラック操作を追加したカメラワークを説明しています.
第6章:経路探索
 人工知能のA*アルゴリズムによる経路探索を扱っています.これによってエージェントが迷路のような複雑な仮想空間を,障害物を回避しながら目標点まで到達できるようにしています.
第7章:物体操作
 5本指による手のモデリングを示し,おもにテーブル上に置かれたターゲットに対する把持操作を説明しています.反復増減による逆運動学を利用した操作関数の作成方法を扱っています.
第8章:遺伝的アルゴリズムによる物体操作
 物体を操作するときのエージェントの動きをより滑らかにするために遺伝的アルゴリズム(GA)を利用しています.GAの原理を述べ,逆運動学に対する応用例として,2リンク系のロボットハンドの経路探索に適用し具体的に説明しています.
第9章:車オブジェクトのファジイ制御
 エージェントや他の車を回避しながら自律走行できる車オブジェクトを扱っています.自律走行にはファジイ制御を利用しています.また,道路が存在する仮想空間をVB側でレイアウトできるようにしています.
第10章:手話アニメーション
 複雑なキーフレームをVB側で作成し,データベースで管理する方法を述べています.具体的には,手話アニメーションに適用し,テキスト-手話変換システムを作成しています.

 これらの章の内容は相互に関連していますが,関心のある部分から読み始めてもよいでしょう.そのため,同じような説明が所々で重複している場合があります.

 著者はプログラミングに精通しているわけではありません.本書で示した方法よりわかりやすく,もっと効率的なプログラミングがあると思われます.ただ,読者が本書を通してコンピュータグラフィックスの分野に関心を持ち,プログラミングに興味を抱くようになっていただけたなら著者としてこれ以上の喜びはありません.なお,プログラムを何度も手直ししていますが,思わぬバグあるかもしれません.そのようなときは是非ご連絡下さるようにお願いいたします. プログラム開発に使用したツールは,Visual Studio 6.0(Professional Edition),OSはWindows 98です.画面設定は,1152×864ピクセル,TrueColor(32ビット)で行っています.

目次

第1章 OpenGLによる3次元CGの構築
  1.1 簡易3次元CGシステムの構築
    1.1.1 プロジェクトの構成
    1.1.2 VC++側の関数の種類と主要な自作関数
    1.1.3 VB側のプロジェクト
  1.2 モデリング
    1.2.1 モデリングの種類
    1.2.2 基本立体のモデリング
    1.2.3 モデルビュー座標変換
    1.2.4 投影座標変換
    1.2.5 ビューポート座標変換
    1.2.6 座標変換のまとめ
    1.2.7 モデリング用フォーム
  1.3 レンダリング
    1.3.1 光源の設定
    1.3.2 マテリアル特性の設定
    1.3.3 シェーディング
    1.3.4 法線ベクトルの与え方
    1.3.5 シャドーイング
    1.3.7 レンダリング用フォーム
  1.4 アフィン変換
    1.4.1 アフィン変換の種類
    1.4.2 OpenGLによるアフィン変換
  1.5 カメラワーク
  1.6 超2次関数のモデリング
    1.6.1 超2次関数
    1.6.2 回転体のデータ構造
    1.6.2 実行例
  1.7 簡単なアニメーション

第2章 OpenGLの高度な機能
  2.1 テクスチャマッピング
    2.1.1 OpenGLのイメージデータ
    2.1.2 テクスチャの設定
    2.1.3 テクスチャ座標と多角形の対応付け
    2.1.4 曲面に対するマッピング
    2.1.5 テクスチャマッピングの実行例
    2.1.6 布モデルに対するマッピング
  2.2 半透明物体の描画
    2.2.1 混合係数の決定
    2.2.2 アルファブレンディングの手順
    2.2.3 具体例

第3章 リアルタイムアニメーションの実現
  3.1 リアルタイムアニメーションの実現
    3.1.1 OpenGLによるアニメーションの原理
    3.1.2 VC++側によるフレームデータの作成
    3.1.3 スクリプトによるアニメーションの実行
    3.1.4 複数オブジェクトの制御
    3.1.5 プロジェクトの変更
    3.1.6 アニメーションの実行例
    3.1.7 無限に続くアニメーション
  3.2 動力学モデルを利用したアニメーション
    3.2.1 等加速度運動
    3.2.2 転がり運動
    3.2.3 斜面を滑り落ちる直方体
    3.2.4 斜面を転がるボール
    3.2.5 ボールの放物運動
    3.2.6 直方体の放物運動
  3.3 旗のアニメーション
    3.3.1 三角関数による旗の表現
    3.3.2 旗のアニメーション

第4章 エージェントのモデリング
  4.1 階層モデリング
    4.1.1 階層構造
    4.1.2 描画ルーチンの作成法
  4.2 エージェントのモデリング
    4.2.1 エージェントの階層構造
    4.2.2 座標系と回転操作
    4.2.3 CAgentクラスのおもなメンバ変数
    4.2.4 キーフレームアニメーション
    4.2.5 エージェントの描画
  4.3 プロジェクトの実行
    4.3.1 新しいプロジェクト
    4.3.2 動きのタイミング
    4.3.3 相互作用
  4.4 操作関数の作り方
    4.4.1 運動学と逆運動学
    4.4.2 解析的手法による操作関数の具体例

第5章 仮想空間のレイアウト
  5.1 仮想空間の作成
    5.1.1 レイアウト用フォームの作成
    5.1.2 新しいオブジェクト用変数の定義
    5.1.3 オブジェクトのレイアウト
    5.1.4 オブジェクトデータの保存
    5.1.5 オブジェクトデータの転送
    5.1.6 仮想空間におけるオブジェクトの描画
    5.1.7 実行例
    5.1.8 順次歩行動作
  5.2 カメラアニメーションの新しい機能
    5.2.1 エージェントの目からみたシーン
    5.2.2 トラック操作
    5.2.3 VB側の変更および実行例

第6章 経路探索
  6.1 問題解決のための探索
    6.1.1 グラフ表現
    6.1.2 探索の種類
    6.1.3 A*アルゴリズムの考えかた
    6.1.4 A*アルゴリズムのプロセス
  6.2 障害物の回避
    6.2.1 とっさの回避
    6.2.2 他のエージェントとの衝突回避
  6.3 交差判定
    6.3.1 点と線分の位置関係
    6.3.2 壁との交差判定
    6.3.3 テーブルとの交差判定
    6.3.4 危険範囲の設定
  6.4 VC++側の変更・追加
    6.4.1 ProOgl3D6.hの修正
    6.4.2 ProOgl3D6.cppの修正
    6.4.3 探索用ヘッダファイルsearch( )
    6.4.5 A*アルゴリズム
  6.5 VB側の変更・追加
    6.5.1 標準モジュールの変更
    6.5.2 frmSpaceの修正
    6.5.3 frmLayoutの修正
  6.6 実行例
    6.6.1 デフォルトによる実行
    6.6.2 壁とテーブルのある空間での実行
    6.6.3 椅子を加えた空間での実行
    6.6.4 大規模な探索空間の例

第7章 物体操作
  7.1 手形状モデルと把持姿勢
    7.1.1 手のモデリング
    7.1.2 把持姿勢
    7.1.3 ターゲットと手の関係
    7.1.4 描画関数
  7.2 位置・姿勢を求める関数
    7.2.1 手の位置・姿勢を求めるメンバ関数
    7.2.2 ターゲットの位置・姿勢を求めるメンバ関数
  7.3 操作関数
    7.3.1 反復増減による逆運動学
    7.3.2 把持操作
    7.3.3 その他の操作関数
  7.4 接近点とゴール点の決定
  7.5 プロジェクトの変更と実行例
    7.5.1 VB側の修正
    7.5.2 VC++側の修正
    7.5.3 実行例

第8章 遺伝的アルゴリズムによる物体操作
  8.1 遺伝的アルゴリズム
    8.1.1 染色体のコード化
    8.1.2 遺伝的アルゴリズムの流れ
    8.1.3 遺伝子操作のまとめ
  8.2 ロボットハンドのGA問題
    8.2.1 運動学と逆運動学
    8.2.2 GAの具体例
    8.2.3 VBによる実行例
    8.2.4 ロボットハンドの軌道生成
  8.3 GAを用いた物体操作
    8.3.1 個体の定義
    8.3.2 適応度の定義
    8.3.3 プログラムコード
    8.3.4 実行例

第9章 車オブジェクトのファジイ制御
  9.1 車オブジェクト
    9.1.1 道路の作成
    9.1.2 CCarクラスの作成
    9.1.3 道路上の走行
  9.2 ファジイ制御
    9.2.1 ファジイ制御の原理
    9.2.2 走行コースと速度の制御
    9.2.3 障害物回避
    9.2.4 プログラムの説明
  9.3 カメラ・アニメーション
    9.3.1 CCameraクラスの作成
    9.3.2 新しいカメラ設定
  9.4実行例
    9.4.1 VB側のフォーム
    9.4.2 単純な走行
    9.4.3 道路上の走行
    9.4.5 カメラアニメーション

第10章 リアルタイム手話アニメーション
  10.1 リアルタイム手話作成システム
    10.1.1 VB側のプロジェクト
    10.1.2 VC++側のプロジェクト
  10.2 データベースの作成
    10.2.1 データベース
    10.2.2 VBによるデータベースの作成
    10.2.3 データベースへのアクセス
    10.2.4 レコードの編集
    10.2.5 手話ファイルのロードとアニメーションの実行
  10.3 テキスト手話合成システム
    10.3.1 手話表記
    10.3.2 システムの概要
    10.3.3 わたりについて
    10.3.4 音声合成
  10.4 逆運動学による手話データの作成
    10.4.1 VB側のインターフェース
    10.4.2 VC++側の準備
    10.4.3 遺伝的アルゴリズムの実行



●本書付属のCD-ROMについてのご注意
本書付属のCD-ROMの貸与または改変,複写複製(コピー)はできません.詳しくはこちらをご覧ください.