DrawPS2はOpenGLとwin32APIを利用したレンダリングプログラムです。 以前からwin32APIによるDRAW_PSとGLUTによるbeachがありますが、それぞれ開発環境が異なるため使い分けが必要で大変不便でした。 この不便さを解消するため、DRAW_PSの環境で利用でき、かつ3次元シミュレーションも扱えるプログラムとしてDrawPS2の開発に至りました。
利用にはC++の知識、描画にはOpenGLの知識がそれぞれ要求されます。 しかし、後述の使い方さえ把握すれば、すぐにでも利用できるはずです。
DrawPS2はWindowsアプリケーションです。DRAW_PS ver.1と異なりウィンドウの 多重作成やマウス、キーボードイベントなど高度なプログラムとなっています。 よって、プログラムに致命的なコードを記述すると最悪windowsがクラッシュする ことがあるので重要なシステム上では動作させないようにして下さい。 万一、当プログラムを利用して損害を受けても一切責任を負いません。
また、企画、作成、デバッグなど全て一人でこなしているため十分なテストが行えていません。サンプルプログラムを参考に、リファレンスに従った関数の使い方をして下さい。
DrawPS2はMakefileを添付しています。コマンドプロンプトからカレントディレクトリをsrcに移しmakeと打てば実行ファイルが生成されます。 コマンドとその内容は以下の通りです。
| コマンド | 内容 |
|---|---|
| make | 実行ファイルdrawps2.exeを生成します。 |
| make run | 実行ファイルdrawps2.exeを実行します。 |
| make clean | ソースファイルと実行ファイル以外を削除します。 |
BCC Developerなどの開発環境を用いる場合は、必ず「Windowsアプリケーション」「リソース:drawps2.rc」「ライブラリ:opengl32.lib」の設定を忘れず行ってください。
利用者が設定するファイルはpsmain.cppです。 以下が基本的な構造です。
#include "drawps2.h"
DRAWPS2 drps2;
void psMain
{
drps2.psCreateWindow();
}
関数についてはリファレンスreference.htmlを、シミュレーションの作成例は同封のsample.htmlを参照ください。
DrawPS2はアニメーション処理に関するマルチメディア機能を持っています。
| メニュー | 内容 |
|---|---|
| ファイル | 終了でウィンドウを閉じます。 |
| ツール | 再生、一時停止、停止でそれぞれアニメーションの制御が可能です。 停止は一時停止に加えて変数を初期値に戻します。 1フレーム再生はDisplay()とCalculate()で登録した関数を1回呼び出します。 |
| ヘルプ | DrawPS2のバージョン情報を表示します。 |
また、マウス、キーボードを使ってインタラクティブにシミュレーションを行うことも可能です。
DrawPS2.0のファイル構成は以下の通りです。
| ファイル名 | 内容 |
|---|---|
| drawps2.h | プロトタイプ宣言 |
| drawps2.cpp | DrawPS2の中核ファイル。主な関数は全てここで定義されています |
| psmain.cpp | psMainクラスのメンバ関数の定義を行います。またDrawPS2のウィンドウなど初期設定も行います |
| drawps2.rc | リソーススクリプト。メニューの定義がされています |
| resource.h | マクロ定義です |
pendulum
単振り子の運動のシミュレーションのサンプルソースです。
DRAW_PSスタイルを使い、初期化、計算、描画関数の登録とサブウィンドウの作成の基本的なサンプルです。
kepler
2体問題のシミュレーションのサンプルソースです。
beachスタイルを使った3次元シミュレーションを行う場合に、これを参考にすると良いでしょう。
beach標準のマウス操作の使用方法もこのようになります。
clank_nicholson
2次元熱伝導方程式をクランク=ニコルソン法で解いたサンプルソースです。
beachスタイルを用いた2次元のシミュレーションです。(実際は1次元)
OpenGLのプロジェクション、モデルビューも自前で呼び出しています。
Q:beachスタイルのとき、すぐpsCreateWindow()すると背景がおかしい。
A:仕様です。beachIPM()を呼び出すか、OpenGLに従った関数を呼び出さないとそうなります。
Q:beachと同様にGLUTのインストールは必要ですか?
A:不要です。DrawPS2はWindows搭載のopengl32を利用しています。