OpenTKOpenTKがGitHubで更新されるようになりました。NuGetから手に入れることができるようになりました。Coreに対応する機運があるようです。WindowFormに組み込む組み込む際の注意点WindowsFormでOpenTKを使うには、OpenTK.GLControl.dllも加えて参照に含める必要があります。普通にフォームを作成した場合、OpenTKのコントロールの描画イベントが発生しない限りは画面が更新されません。これを解決する方法は下の方に記述します。自動生成のものとはソースコードが違うかもしれませんが、イベント処理が主なのでイベントの生成に気を付ければコードが違ってもしっかり動きます。ゲームのように高速に動作させたいものには向いていません。ボタンなどのコントロールが簡単に作れるので、マップビューアやモデルビューア、シミュレーションソフトなどに向いていると言えるでしょう。GLControlを複数設置して疑似的な2画面で描画ということもできますが、これは下の方に記述します。Formに組み込むと複雑?今回もカラフルな正方形を描画します。ソースコードのファイルが、見た目と動作で二つになりました。見た目の"00-04_main.Designer.cs"から見ていきましょう。glControl;GUIで追加する場合はVisualStudioでデザインエディタを開いた状態でツールボックスを開きます。ツールボックスのタブの上で右クリックメニューを開くと「アイテムの選択」があるのでそれを選択します。コンポーネント」の中で"glc"でフィルターをかけると、参照に追加されていたらGLControlがあると思うので、チェックボックスをONにしてOKを押すとGLControlがツールボックスに追加されます43~45行目はイベント用関数の追加です。今回は無難な名前にしておきました。それではそれでは、今回のキモの動作の部分に入っていきましょう。前回と同じ格好に似せているので、一度も見ていない方は前回の記事を見ておくことをお勧めします。OpenTK.Graphics.OpenGL;本当は、Formの追加時にもっとusingが挿入されますが、使わなかったものは消しておきました。多い分には(関数名が被らなければ)問題はないはずです。//glControlの起動時に実行される。e){GL.ClearColor(Color4.Black);GL.Enable(EnableCap.DepthTest);}//glControlのサイズ変更時に実行される。projection);}//glControlの描画時に実行される。4.0f);GL.End();glControl.SwapBuffers();}前回との違いで気を付ける必要があるのは31,33,58行目です。見た目を弄ったために変化するもの以外に変えるものは少ないです。補足:常に描画する,複数のGLControl常に描画する場合、ループの中に描画処理やUIの動作を突っ込んでやります。ここで紹介するのはApplication.Idleイベントを使ったものです。Application.Idleイベントは名前の通り、アプリケーションがアイドル状態になった時に発生するイベントです。このイベントが発生したらループで描画させます。どこかでループを抜けるように処理しておかなければGUIがフリーズしてしまいます。それを防止するために、今回はGLControlがアイドル状態でない場合にループを抜けるようにしました。複数のGLControlを使って描画する場合、各コントロールを処理する前にOpenTKの処理先を指定しておかなければ、OpenTKはずっと同じコントロールに対して処理し続けます。処理先を指定するものがGLControlのMakeCurrent関数です。各コントロールへの処理を始める前に必ず記述します。記述しないと、別のコントロールに処理の影響が及んでしまいます。noteに置きました。このプログラムをコンパイルして実行すると、下の数字の速度で二つのコントロールの正方形がそれぞれ回転します。2つのコントロールに対して、常に描画したいときに追加すべきものだけ取り出してみます。glControl2.IsIdle){Render1();Render2();}};C#を使わない人には変なコードに見えるかもしれません。デリゲートとラムダ式を使っていますが、Application.Idleに中かっこ内の処理を登録するということです。簡単に言うと、関数ポインタのようなものに対して、関数を定義しながら代入する...というところでしょうか。MasuqaT.NET。