フルスクラッチによるグラフィックスプログラミング入門

概 要

COMICWORKSやopenCanvasの開発者として知られる著者が、フルスクラッチ(自主開発コード)主体のグラフィックスプログラミングの真髄を解説します。WindowsのAPIに頼らず、グラフィックスプログラミングを基礎から学ぶことで新技術や応用力が磨かれ、ほかのソフトにはない独自性を生み出せます。本書はマルチプラットフォーム時代のグラフィックスプログラミングの基礎知識から、簡単な画像解析テクニック紹介まで順序立てて理解することができるやさしい教科書です。

著者 須崎亮太郎、荻野友隆、内村創
価格 本体3400円(税別)
ISBN 4-7980-0958-X
発売日 2004/12/18
判型 B5変
色数 2色
ページ数 556
CD/DVD
対象読者 中級
シリーズ
表紙イメージ
購入 アマゾンで購入する

※リンク先によっては、販売ページが用意されていないことがあります。 あらかじめご了承ください。

新しいウィンドウで開く 書籍購入のご案内

サポート

サポート情報は以下からご参照下さい。

サポート情報へのリンク

目次

はじめに

 1. 本書の目標

 2. 再発明の理由

 3. フルスクラッチじゃ使い物にならない?

 4. 本書の対象者

 5. libneet

 6. 本書の構成

 7. 謝辞

CHAPTER1 開発環境について

1.1開発環境について

1.2C++Builderでの開発

Borland C++Builderについて

Windowsプログラムの動作

イベントドリブン型プログラム

生成されるファイルの構成

ゲーム用のループを作る

ライブラリを追加する

リリース用のバイナリを作る

TIPS色々

1.3VisualStudio.NET2003での開発

VisualStudio.NET2003について

MFCを使ったアプリケーション開発

CHAPTER2 Windowsグラフィックの基礎

2.1CGの基礎

画面表示までの流れ

色の表現について

画素の並び

dpi・解像度について

フレームレートについて

2.2GDIプログラミングの基礎

ウィンドウハンドル、デバイスコンテキスト

画像を表示する

DCの注意点

2.3メモリ上に画像を作る

もう一つの画像表示方法

メモリアクセスできるバッファをつくる

表示する

点を打って表示を確認する

CHAPTER3 グラフィックプログラミング~導入編~

3.1画像を扱うクラスを作る

画像クラスを設計する

基本的なメソッドの実装

Windowsで使えるクラスを作る

3.2矩形転送をしてみよう

矩形を転送してみよう

こんな単純でいいの?

ボトルネックは何だろう?

3.3クリッピングで無駄を省く

クリッピングを行った矩形転送

矩形転送のクリッピング関数を実装する

矩形塗りつぶしのクリッピング関数を実装する

速度を比較する

3.4最適化ってなに?

最適化ってなに?

最適化の方法

最適化のポイントは?

注意点

3.5固定小数表現

固定小数表現について

固定小数表現の注意点

3.6アセンブラ入門

アセンブラって何?

インラインアセンブラを使ってみよう

Pentium系CPUでアセンブラを書く為の予備知識

レジスタとメモリについて

レジスタとセグメントについて

数値演算

ジャンプ命令

条件分岐

値を変更してはいけないレジスタ

最後に

CHAPTER4 グラフィックプログラミング~実践編~

4.1ピクセル演算

矩形転送の派手な演出

カラーキー付き矩形転送

基本中の基本「αブレンディング」

αブレンディングで矩形塗りつぶし

色々な演算 「加算」「乗算」など

最上位の成分を使う

AND,ORフィルター

まとめ

4.2線を引く

縦線・横線を引こう

斜めの線も引こう

少し凝った線

4.3簡単な図形を描く

図形を描こう

円を描く

三角形を描く(1)

ちょっと寄り道、内積・外積

三角形を描く(2)

効率よく三角形を描く

もっと効率よく三角形を描く

多角形を描く(1)

多角形を描く(2)

4.4エフェクト処理

画面を派手に演出する

画像を波のように揺らす

最適化して揺らす

もう少し複雑に揺らす

回転・拡大・縮小

フィードバック処理

4.5曲線とシェイプ

直線だけで満足できますか?

曲線を描いてみよう

自由な形状ってどう描くんだろう?

多角形で円を描く

パスで定義した図形をレンダリングする

4.6アンチエイリアシング

1ピクセルの壁を越える

人間の目の特性を利用する

エッジを滑らかにしてみる

円のアンチエイリアシング

多角形のアンチエイリアシング

三角形のアンチエイリアシングの改善

ライン描画での簡単アンチエイリアシング

矩形転送にもアンチエイリアシング

回転処理のアンチエイリアス化

4.7テクスチャマッピング

矩形転送だけじゃ物足りない

テスクチャマッピングの考え方

テスクチャマッピングの実装

最適化を行う

便利な関数を作る

この方式の問題点

4.8平均化処理

色の平均を取ろう

まずはモザイク

α値を考慮する

画像をぼかす

移動ぼかし(Motion Blur)

ガウスぼかし(Gaussian Blur)

4.9ブラシストローク

ブラシストロークの基本

バッファリングして、取得した座標を平滑化する

輝度を比較して、より綺麗な線を描く

曲線で補間する

アンドゥに対応する

水彩風の表現をする

CHAPTER5 画像解析

5.1HDR画像について

HDR画像って何?

ダイナミックレンジって何?

HDR画像の例

そもそも、なんでHDRが必要なの?

HDRIフォーマットの種類

ツールをそろえよう

HDRIを見よう

HDRIをいじろう

HDRIを弄ろう(具体例)

HDRIを撮ろう(用意編)

HDRIを撮ろう(撮影編)

HDRIを撮ろう(合成編)

ファイル読み込み&トーンマップ(自前実装)

トーンマッピング

5.2色空間について

色空間って何だろう?

人間の目のシステム

等色関数

色空間

RGB色空間

CMY色空間

XYZ色空間

YCrCb(YUV)

5.3ヒストグラムの表示

ヒストグラムってなに?

ヒストグラムを表示しよう

RGBのヒストグラムも描画してみよう

5.4レベル補正とガンマ補正

レベル補正ってなに?

レベル補正をしてみよう

ガンマ補正について

ガンマ補正をしてみよう

5.5オプティカルフロー

解析系のお話

オプティカルフロー

どうやって取得しようか?

実装

検出例

あれ? 遅くない?

高速化

5.6ハフ変換

直線を検出しよう

ハフ変換て何?

基本的なアイデア

実装

結果

5.7直交変換の基礎

フーリエ変換って何?

ベクトルについての復習

直交変換

DCTを実装してみよう

2次元DCTを実装してみよう

5.8ウェーブレット変換

ウェーブレットって何?便利なの?

フーリエ変換との違い

連続? 離散?

リフティング構成

Haarのウェーブレット

応用ウェーブレット

CHAPTER6 ファイル処理と外部ライブラリ

6.1BMPファイルを扱う

好きな画像を表示させよう

基本中の基本、ビットマップ形式

ビットマップファイルを書き込む

ビットマップファイルを読み込む

ビットマップファイルを「簡単に」読み込む

ビットマップファイルを表示する

6.2zlibを使う

zlibとは

配布サイトからソースを入手

ソースアーカイブを展開してみる

zlibのビルド(C++Builder編)

zlibのビルド(VisualStudio.NET2003編)

zlibを使ってみよう

6.3JPEGファイルを扱う

JPEGとは

配布サイトからソースを入手

ソースアーカイブを展開してみる

JPEGライブラリのビルド(C++Builder編)

JPEGライブラリのビルド(VisualStudio.NET2003編)

ロード・セーブ関数を書く

ロード・セーブ関数のビルド(C++Builder編)

ロード・セーブ関数のビルド(VisualStudio.NET2003編)

6.4PNGファイルを扱う

PNGとは

配布サイトからソースを入手

ソースアーカイブを展開してみる

PNGライブラリのビルド(C++Builder編)

PNGライブラリのビルド(VisualStudio.NET2003編)

ロード・セーブ関数を書く

ロード・セーブ関数のビルド(C++Builder編)

ロード・セーブ関数のビルド(VisualStudio.NET2003編)

6.5TGAファイルを扱う

TGAとは

配布サイトからソースを入手

TGAライブラリのビルド(C++Builder編)

TGAライブラリのビルド(VisualStudio.NET2003編)

ロード・セーブ関数を書く

ロード・セーブ関数のビルド(C++Builder編)

ロード・セーブ関数のビルド(VisualStudio.NET2003編)

CHAPTER7 TIPS

7.1マイクロタイルアレイ

これしか方法はないの?

画像を細かく分けて確保する

MTAの利点

7.2Webcamを使おう

Webcamを使ってみよう

Video for Windowsを使って制御する

アートな表現に挑戦

7.3タブレットからの入力

タブレットについて

DLLの復習

DLLを呼び出そう

DLL内の関数名を調べる

Wintabのラッパークラスを作る

CTabletを組み込む

7.4コールバック関数

アプリケーションが固まってしまう

コールバック関数で進捗を報告する

C++Builderでのサンプルコード

7.5乱数とノイズ

乱数を作ろう

擬似乱数とシード

擬似乱数 ― 線形合同法

擬似乱数 ― M系列

メルセンヌ・ツイスタ

randの問題点

真の乱数

参考文献

ダウンロード

索引

PR

秀和システム