みなさんこんにちは。
今回も、C#でOpenGLを使う方法について、ご紹介します。
前回でOpenTKとOpenTK.GLControlのインストールが終わりましたので、今回は使い方について、特に初期化部分の説明をします。
まず、OpenGLは描画モジュールなので、FormやUserControlなどの描画クラス内で使用することになるかと思います。
そこで、描画クラスのソースコードの先頭にusing宣言を入れます。
例:Form.cs
using OpenTK;
using OpenTK.Graphics;
using OpenTK.Graphics.OpenGL;
次に、初期化を行います。
このとき、描画クラスのコンストラクタで行わないようにしてください。コンストラクタでOpenTKの関数を呼び出すと、デザイナー画面に切り替えたときにエラーになり、UIのコントロールの配置ができなくなりますので注意ください。
初期化のタイミングとしては、Formの表示直前(Form.Loadedイベントハンドラ)、または表示されたあと(Form.Shownイベントハンドラ)で行うのがよいと思います。
Formクラスをデザイナー画面に切り替え、LoadedまたはShownイベントハンドラに関数を追加し、以下のようにOpenTKの初期化処理を実装してください。
(マウス処理などは、使う必要がなければ省いて構いません)
// UIの更新開始
SuspendLayout();
// GLControlのインスタンス作成。GLControlは、.NETFrameworkのUIとOpenGLを橋渡しする役目を持つ(GLUTのような位置づけ)。
glControl = new GLControl();
// サイズを設定。親ウィンドウ(コントロール)と同じサイズに設定。
glControl.Size = new Size(this.Width, this.Height);
// 位置設定。親ウィンドウ(コントロール)の左上に配置。
glControl.Location = new System.Drawing.Point(0, 0);
// 初期化時に一度だけ呼ばれる、ロード処理を行うイベントハンドラを登録。シェーダの作成などを行う。
glControl.Load += new EventHandler(glControl_Load);
// 画面サイズ変更時に呼ばれるイベントハンドラ。
glControl.Resize += new EventHandler(glControl_Resize);
// マウス押下時に呼ばれるイベントハンドラ。
glControl.MouseDown += new System.Windows.Forms.MouseEventHandler(this._3DView_MouseDown);
// マウス移動時に呼ばれるイベントハンドラ。
glControl.MouseMove += new System.Windows.Forms.MouseEventHandler(this._3DView_MouseMove);
// マウス押上時に呼ばれるイベントハンドラ。
glControl.MouseUp += new System.Windows.Forms.MouseEventHandler(this._3DView_MouseUp);
// マウスホイール時に呼ばれるイベントハンドラ。
glControl.MouseWheel += new System.Windows.Forms.MouseEventHandler(this._3DView_MouseWheel);
// Formなどの親ウィンドウにGLControlを追加する
Controls.Add(glControl);
// UIの更新終了
ResumeLayout(false);
いかがでしたでしょうか?
次回は、簡単な描画方法について説明します。
●参考