モニタとグラフィックス環境
中間試験以降は、グラフィックスに関する話題を扱う。 ただし、グラフィックスではX座標,Y座標といった複数の情報の組合せであり、 配列や構造体といったデータの利用が中心となる。そしてこれらの情報を 関数呼び出しで正しく受け渡しができなければならない。
モニタ
コンピュータで画像を表示するための表示装置の歴史を簡単に紹介。
CRT(陰極管方式)
古いテレビであり、電子銃から出た電子を蛍光板に当てて発光させる。
電子銃では、電極に高電圧をかけ、電子を飛び出させる。 偏向コイルでは、電圧により電子の方向をXY方向に軌道を曲げる。 蛍光板は、電子がぶつかると発光する。 カラーモニタでは、R,G,Bの3色に相当する3本の電子銃がある。
ベクタースキャン方式とラスタースキャン方式(走査線方式)
このままでは、光る場所が1つなので、光る場所を偏向コイルで上下左右に動かして、画面全体を光らせる。
ベクタースキャン方式は、画面の光る点を一筆書きの要領で描く方式。これでは複雑な絵を描くのが困難であり、 最近ではラスタースキャン方式(走査線方式)を利用する。
普通のテレビであれば、縦に水平の約520本の走査線が並んで1画面が描かれている。 また、画面のチラつきを防ぐために、1本起きに奇数フィールドと偶数フィールドに分けて表示をしている。
欠点:電子を曲げて蛍光面にぶつけるために、奥行きが必要。真空管で重い。 中央が盛り上がってフラットな画面が作れない。
液晶方式
通常の光は、光の波の方向が様々方向がまざっている。波の方向が1つになっていると偏光と言う。 液晶は、電圧により通過できる光の方向を制御できる液体。 バックライトの光を偏光板で一方向にして、その光を液晶で通過を制御する。
欠点:バックライトが必要、液晶の反応速度が遅いので高速の動画には向かない。 斜め横方向から見ると見えにくくなる。
有機EL
有機ELディスプレイの構造は、簡単に言えば発光ダイオードの赤,緑,青が画面中に並んでいるようなもの。 (ただし発光ダイオードは無機EL)
このため、バックライトも不要であり、厚さも薄く作ることができる。斜め方向から見て見難くなることがない。 画面の反応も速い。
テキストVRAM、グラフィックVRAM
古いコンピュータでは、画面の1つの点の場所をすべて管理するだけのメモリや、扱う処理速度がなかったため、 メモリ上のテキストVRAMに文字コードを書き込むと、画面の対応した場所に文字が表示される。 文字の形はハードウェアに組込み。
これでは表現力が無いため、画面上の1ドットに対応した場所に、ドットの色情報を書き込むグラフィックVRAM 方式が出てきた。画面上の任意の場所にドットを描く事ができるが、文字を描くにも点列を大量にコピーするため、 古いコンピュータでは処理を追いつかせるのが大変だった。 文字のフォントは、文字のドット数に応じた点の情報のビットマップ画像であった。 しかし、フォントを点のON/OFFで覚える方式は、拡大したときにギザギザになる場合がある。 このため、最近ではベクターフォントなどが使われる。
グラフィックを使ったプログラミング
グラフィックを扱うプログラムは、昔であれば"BASIC"というプログラム言語で、線を描く命令で描いていた。 しかし、最近のGUI(Graphical User Interface)環境では複数のウィンドウを扱うため、オブジェクト指向の プログラム言語が必要となる。しかし、これらの言語では、ウィンドウやフォントといった複雑な情報でプログラムを 記述するため、分かりにくい。
Microsoft社のVisual Studio(C#)や、Apple社のXcode(Objective-C)などは、 これらのプログラミングが簡単になるように、 画面上に部品を並べると、その部品に応じた処理を行う関数を自動生成してくれて、 プログラマーはその関数の内部を必要に応じて書き換えてプログラムを行う。 ただし、これらの環境だと、部品配置の操作方法やGUIのためのデータ構造の特徴を覚えないと プログラムが作れないため、基本概念中心で説明する講義では扱わない。
また、C#やObjective-Cは、C言語やC++をベースとしているが、 OSなどにより実行環境が違うとプログラムが動かなかったりするため、 インターネット環境で利用できるように、Javaが作られた。 Javaは、OS専用のJava実行環境(JRE)と一緒に使うことで、JavaのプログラムはOSに依存しない。 Androidのプログラムの多くはJavaで作られている。
GrWin
今回の授業では、GUIの複雑な命令を知らなくても簡単な命令でプログラム記述ができるGrWinを用いる。 GrWinは、C言語で書かれた描画命令は、grwin.exe というプログラムに送られて画像を表示してくれる。 授業では、GrWinの中の線画の命令だけで説明を行う。