Windows グラフィック 入門


ファイルダウンロード mogra_2.f


このファイルは,以下のサイトにて公開されたものをダウンロードしたものです.

http://www.isc.meiji.ac.jp/~re00079/EX2.2012/20120613.html

関数の利用法等も併記されているので参照して下さい.


これまでの授業で扱ってきたものはコンソールと呼ばれる文字をタイプするだけの入力系に基くものでした.

などと呼ばれており,文字だけでしかやり取りができませんでした.

出力としても,ファイルに書き出すか,1行で出力し,改行していくだけのものとなっています.
シミュレーションなど行った場合,数値の羅列になるだけなので,刻み幅が小さい場合など,応答を追うことが
できません.

もちろん,数値データを出力しておき,ExcelやGNU Plot,Igor Pro, MATLABなどでグラフをプロットする方法も
有効ですが,プログラム上で即座に表示できるようにしておくのも有効です.

授業では,Windows上で動作する,コンソール(通称DOS窓)でプログラム開発をしていますが,あくまでも
WindowsのOS上で動作しているので,コマンドラインからWindowsソフトウェアを動作させることも可能です.

APIとは?

コマンドライン上で文字を表示するためにも,実はヘッダファイルを通じてライブラリを利用し,ハードウェア的に
動作させる手続きをしていました.printf()を利用するにあたって,stdio.hをインクルードし,必要なライブラリを
呼び出しています.

Windows上でグラフィックを扱うには,最終的にPCに実装されているグラフィックボードにアクセスして命令を
実行することになりますが,わざわざアセンブラ等でアドレスに直接データを送るようなことをしなくても,OSの
持つライブラリ(DLL)に必要な命令が用意されています.このような命令群をAPIと呼び,OS,あるいはハード
ウェアメーカから供給されています.従って,APIにコマンドを送ればハードウェアに基いたであるグラフィックを
利用することができるのです.

Windowプログラム開発について

Windowのプログラムは大変という話を聞いたことはないでしょうか?実際大変であり,ソースコードをテキスト
エディタで逐一書いていくことはできないわけではありませんが,あまりやりたくはないものです.
ひとつのWindowを開く関数だけで100行くらいの記述をし,その上で必要なパーツ(オブジェクト)を並べていくと
あっという間に1000行以上のプログラムになることは想像がつくかと思います.

従って,統合環境と呼ばれる開発環境を利用し,画面上でGUIを用いて様々なオブジェクトを配置していき,その
ためのコードは自動生成させ,必要な計算処理などを自ら記述する方法が採られています.

本関数ファイルについて

限られた基礎編としての授業でこれを用いるのは困難であるため,機能を大幅に限定し,コマンドラインから,
windowを作成し,その上に点や直線,長方形,円などを2次元的に描画するだけのライブラリを用いて描画する
ことが可能となります.上記のファイルをダウンロードし,インクルードするだけで,簡単な関数を呼び出すだけで
これが可能となります.

ウィンドウを開くだけであれば,以下のように記述すればよいようになっています.

#include<stdio.h>
#include"mogura_2.f"

int main(){

 g_int(480, 360);

 return 0;
}
必要なヘッダ
グラフィック用ヘッダファイル



関数呼び出し


関数の使い方は以下にまとめておきました.

int getscreenx(void) イベント発生時のx座標
int getscreeny(void) イベント発生時のy座標
int get_max_screen_x(void) 最大サイズのx座標
nt get_max_screen_y(void) 最大サイズのy座標
int g_int(int rx, int ry) windowサイズ(x,y)単位pixcel
void gend(void) 終了処理
void pset(int x, int y, int c) 座標(x,y)に色番号cの点を描画
void line(int x1, int y1, int x2, int y2, int c) 座標(x1,y1)-(x2,y2)に色番号cの線を描画
void box(int x1, int y1, int x2, int y2, int c) 座標(x1,y1)-(x2,y2)に色番号cの長方形を描画
void circle(int x, int y, int r, int c) 中心座標(x1,y1)半径rの色番号cの円を描画
色番号
0: RGB( 0, 0, 0); /* 黒 */
1: RGB( 0, 0,119); /* 暗青 */
2: RGB(119, 0, 0); /* 暗赤 */
3: RGB(119, 0,119); /* 暗紫 */
4: RGB( 0,119, 0); /* 暗緑 */
5: RGB( 0,119,119); /* 暗水 */
6: RGB(119,119, 0); /* 暗黄 */
7: RGB(119,119,119); /* 暗白 */
8: RGB( 68, 68, 68); /* 灰 */
9: RGB( 0, 0,255); /* 青 */
10: RGB(255, 0, 0); /* 赤 */
11: RGB(255, 0,255); /* 紫 */
12: RGB( 0,255, 0); /* 緑 */
13: RGB( 0,255,255); /* 水 */
14: RGB(255,255, 0); /* 黄 */
15: RGB(255,255,255); /* 白 */
※ 実はちょっと手を加えると使える色は変えたり増やせます.ソースファイルを眺めてみてください.

ご注意

このファイル自体,あるプログラマによって作られたものであるため,使いやすい関数を用意したものですので,
一般的なものではありません.従って,これを覚えたからと言ってwindows上で描画する方法を覚えたという訳
ではないのです.

但し,グラフィックを利用する場合,目的に合わせて利用できそうなヘッダファイルやライブラリを入手したり,
その上で使いやすいように自身の関数を新たに作成したりすることが必要となります.

勉強は必要ですが,Open GLを利用すれば3Dの立体を描画することも可能です.