一般社団法人 全国個人事業主支援協会

COLUMN コラム

みなさんこんにちは。

今回も、C#でOpenGLを使う方法について、ご紹介します。

前回は、OpenTKの初期化に関してお話しましたが、今回からは、簡単な描画方法について説明します。

 

●はじめに

基本的な描画方法はOpenGLと同じですので、OpenGLでプログラムを組む感覚でコーディングできます。

また、OpenGLのインターフェースは「OpenTK.Graphics.OpenGL」の「GL」名前空間に備わっていますので、

GL.Viewport(0, 0, glControl.Width, glControl.Height); // ビューポートの設定

のような感じで使うことができます(OpenGLのインターフェースでは glViewportでしたが、OpenTKでは、GL.Viewportのような呼び出し方になります)。

OpenTKで使えるOpenGLのバージョンですが、OpenTKの3系統(3.x.x)ならばOpenGLは4系統 (4.x)が使用できます(※OpenTK 3.1.0 で OpenGL 4.5 を動作確認済み)。

 

●描画の初期処理

前回は、以下のように初期化のイベントハンドラを登録しました。

glControl.Load += new EventHandler(glControl_Load);

このイベントハンドラは、ウィンドウが作成される直前に一度だけ呼ばれますので、ここでシェーダの作成といった描画に関する初期処理を行います。

var vertShader = GL.CreateShader(GL_VERTEX_SHADER);  // 頂点シェーダ

GL.ShaderSource(vertShader, File.ReadAllText(@”vertexShader.vert”)); // 頂点シェーダの読み込み

GL.CompileShader(vertShader); // 頂点シェーダのコンパイル

var fragShader = GL.CreateShader(GL_FRAGMENT_SHADER); // ピクセル(フラグメント)シェーダ

GL.ShaderSource(fragShader, File.ReadAllText(@"fragmentShader.frag")); // ピクセルシェーダの読み込み
GL.CompileShader(fragShader); // ピクセルシェーダのコンパイル

var program = GL.CreateProgram(); // プログラムオブジェクトの作成
GL.AttachShader(program, vertShader); // 頂点シェーダをアタッチ
GL.AttachShader(program, fragShader); // ピクセルシェーダをアタッチ
GL.LinkProgram(program); // プログラムのリンク

// programのリンク後、各シェーダは不要になるので削除
GL.DetachShader(program, vertShader);  // プログラムオブジェクトから頂点シェーダを外す
GL.DetachShader(program, fragmShader); // プログラムオブジェクトからピクセルシェーダを外す
GL.DeleteShader(vertShader); // 頂点シェーダを削除(削除マークを付けるだけ。すべてのDetachShaderがおこなれた時点で削除される)
GL.DeleteShader(fragShader); // ピクセルシェーダを削除(削除マークを付けるだけ。すべてのDetachShaderがおこなれた時点で削除される)

m_progmam = program; // メンバ変数に保存。アプリケーション終了時に GL.DeleteProgram(m_program); で削除すること。

 

次回も引き続き、簡単な描画についてお話します。

 

 

The following two tabs change content below.

佐藤 潤一

最新記事 by 佐藤 潤一 (全て見る)

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア