情報工学実験4:2D/3D Grahpics,GUI




チーム名

『2次元-3次元-真次元』


メンバー

045708G 上原研大
045726E 島袋吉騎
045730C 高村隆孝
045735D 多和田真二
045759B 山城拓也
045762B 義永栄史


pdfファイル
プログラムソースの一括ダウンロード


目的

この実験では、UNIX上で動作するGUI(Graphical User Interface) の代表的なシステムのプログラムを行う。
 一番低レベルなビットマップ(Frame Buffer)レベル
 X Window Systemレベル
 ツールキットレベル
 スクリプト言語レベル
 Open/GLライブラリ
これらを用いて、コンピュータのインタフェースの設計に関する理解を深め、 経験を積むことが出来る。また、GUIはイベント駆動型のプログラムとオブジェクト指向 計算が必須であり、これらの理解を深めることが出来る。

Level1 ビットマップレベル

カラー画像の一点の色は、 RGB と呼ばれるように、三原色で表現することができる。現在のコンピュータでは、8bit ずつ24bit のRGBでカラーを表現することが一般的である。画像自体は、これらの一点を二次元配列を使って構成することができる。 適当なプログラム言語を用いて、
    struct bitmap {
        unsigned char r,g,b;
    } frame_buffer[x][y];

のような構造を定義せよ。
これらの上に、

     RGBの入れ換え
     輝度変換
     ガンマカーブ変換
     拡大縮小、回転、平行移動などのアフィン変換

などの変換を施すプログラムを作成せよ。

実行結果

原画像 縮小画像
RGB変換画像 回転変換画像

Level1プログラムソースのダウンロード



Level2 直線の描画

frame_buffer をクリアする関数、および、任意の色の直線を描画する関数を作成せよ。

実行結果

直線の描画

Level2プログラムソースのダウロード




Level3 ワイヤーフレーム3次元画像表示

立方体の3次元画像表示を格納するframe_bufferを作成せよ。
表示する立方体の角度や位置を指定するパラメータとしては、座標変換行列を用いて、 単位行列を回転や拡大縮小などのアフィン変換を利用して作成する。
これらの変換行列を使って、立方体の頂点を作り、直線描画を使って、 ワイヤフレーム画像をframe_buffer内に描画し、表示してみよ。

実行結果

level3_1 level3_2 level3_3

Level3プログラムソースのダウンロード



Level4 ポリゴン表示

立方体を描画する際に、各面に別な frame_buffer を表示したい。
これはテクスチャ・マッピングと呼ばれる。各面は、テクスチャ画像を、 アフィン変換したものになる。長方形は、平行四辺形(遠近による縮小を考慮する場合は、4辺形)となる。

これらのアフィン変換を順番に適用し、立方体のポリゴン表示を行え。
適当な数の立方体の表示を行い、時間を測定せよ。プログラムを高速化するにはどうしたら良いか?
ハードウェアで実現する場合を考慮して、考察し、実装せよ。

実行結果

ポリゴン1 ポリゴン2

Level4プログラムソースのダウンロード



Level5 ツールキットレベル

Mesa などの Open/GL を用いて、上記の立方体の表示と同じことを行え。時間も測定し、 自分で書いたプログラムと比較せよ。時間の差は、どこから来るのか考察せよ。

実行結果

level5

Level5プログラムソースのダウンロード




Level6 ツールキットレベルによる2Dドローツール

任意のツールキットを用いて、簡単な2Dドローツールを作成せよ。

     直線、曲線、四角形、円、楕円

の描画ができること。
また、書いた内容を、SVGフォーマットなどに類似した XML で格納する機能を含めること。

実行結果

level6

Level6プログラムソースのダウンロード




LevelX

新しいレベルを提案し、実装および評価を行え。

実行結果

levelx

LevelXプログラムソースのダウンロード




参考文献

梨II
2006年前期UNIX実験「Watering KissMint」チーム
2006年前期UNIX実験「又又」チーム
X Window System(Xウィンドウシステム)の動作原理 Xプロトコル
Quick introduction to XWindow Graphics
X アプリケーション工房
Electronic Textbook index0
Welcome to Rio's Laboratory
井門研究室ホームページ
OpenGL入門
GLUTによる「手抜き」OpenGL入門
X Japanese Documentation Pro ject
ゲームとアフィン変換
X-Window Programming
Xlib-C Language X interface
独習Java ジョゼフ・オニール著 トップスタジオ訳 武藤健志監修 翔泳社
改訂新Java言語入門 林晴比古著 ソフトバンクパブリッシング