OpenTKOpenTKがGitHubで更新されるようになりました。NuGetから手に入れることができるようになりました。Coreに対応する機運があるようです。GameWindowを作るGameWindowはシンプル今回は、簡単なウィンドウである"GameWindow"を使って画面に表示してみます。簡単なウィンドウを作成し、フレームレートを設定できるので、名前の通りゲーム向きです。実際に表示してみる言葉で説明するより実際に動作する画面とソースコードがあったほうが早そうなので、サンプルを出してしまいます。OpenTK.dllへの参照を忘れないでくださいね。何も表示していない画面です。Game():base(800,600,GraphicsMode.Default,"0-3:GameWindow"){}}}22行目に注目してください。GameクラスはGameWindowクラスを継承し、baseで継承元(つまりGameWindowクラス)のコンストラクタを呼び出しています。OpenTKのドキュメントによると、以下のような説明があります。attributes.今回の場合、「横800px、縦600px、デフォルトのモードでタイトルは"0-3:GameWindow"」という指定でウィンドウを作っていることになります。実用的なGameWindow上のウィンドウではあまりにもシンプルなので、もうちょっと機能を使ったウィンドウも作ってみます。カラフルな正方形を描画します。ソースコードが急に長くなりました。難しいことはないです。切り分けて説明します。OpenTK.Input;参照には"OpenTK"と"System.Drawing"を追加してください。OpenTK.Graphics.OpenGL"というのは、C言語でのOpenGLの機能を使うということです。ここの"OepnGL"を変えるとOpenGLESの機能が使えたりします。"OpenTK.Input"は今回キーボード入力のために使っています。//ウィンドウの起動時に実行される。e){base.OnLoad(e);GL.ClearColor(Color4.Black);GL.Enable(EnableCap.DepthTest);}Gl.ClearColor関数とGL.Enable関数を見て何か思い出しませんでしたか?そうです、OpenGLにはglClearColor関数やglEnable関数があり、その名前と似ているのです。OpenTKでは、OpenGLのgl****関数がGL.****関数という名前になっています。GLというクラスはOpenTK.Graphics.OpenGLという名前空間にあるので、usingで指定してやる必要があります。OpenGLでの"GL_DEPTH_TEST"のようなglEnableで使う定数はEnableCapという列挙型で格納されています。//ウィンドウのサイズが変更された場合に実行される。projection);}OpenGLでの"GL_PROJECTION"は、OpenTKでは"MatrixMode.Projection"となります。MatrixModeも列挙型です。Matrix4は、OpenTK付属の4x4行列のクラスです。Matrix4.CreatePerspectiveFieldOfView関数は、gluのgluPerspective関数でプロジェクト行列に適応される行列を生成します。ClientRectangleはGameWindowのプロパティで、ビューポートの設定に使っています。//画面更新で実行される。(Keyboard[Key.Escape]){this.Exit();}}"Keyboard"はGameWindowクラスのプロパティで、インデクサにKey列挙型を指定することで、指定したキーが押されているかをboolで得られます。//画面描画で実行される。4.0f);GL.End();SwapBuffers();}4つのGL.Color4関数に注目してください。引数がそれぞれ違いますが、これらはすべて正しい文法です。(関数のオーバーロード)79行目はOpenTK付属クラスでの指定、81行目はfloat型配列、83行目はfloat型を4つ、85行目はbyte型を4つ...という具合です。OpenGLとOpenTK:書き方の違いOpenGLはgl*****という関数でプログラムを動かしていました。OpenTKでその機能を使う場合はGL.*****という関数を使います。OpenGLでは状態指定の定数(GL_DEPTH_TEST,GL_PROJECTION,etc...)はdefineで定義されていました。OpenTKは関連するものを列挙型でまとめています。OpenGLでは色はglColor(数字)(型)、頂点はglVertex(数字)(型)という関数で指定していました。OpenTKはそれらの型の違う関数をオーバーロードで定義し、入れるデータの型を気にせず引数に指定できます。OpenTK付属のクラスも指定できます。MasuqaT.NET。