トップ
ソフトウェア
陶芸
陶芸
OpenGL
大戦略1208攻略
リンク
1 ファイルの入手と初期設定 このような設定はNGの例
OpenGLをVB.netで使う準備
準備するもの
・VisualBasic.net(ここでは2003及びframework1.1を使用しています。)
・CsGL
・CsGLの入手について
@VB.netでOpenGLを使うには、二つの間をつなぐCsGL.DLLを利用する。これは、配布が可能なので、自作のソフトでも使うことができる。また、こちらからダウンロードできる。
Aダウンロードしたファイルを解凍すると、[libinstall]フォルダができるので、その中の[install.bat]を実行する。すると、c:\windows\system32内に[CsGL.dll]ファイルができる。
VB.netへのCsGL追加とセッティング
ここでは、他のフォームに追加しやすくするためにクラスを作成し、実際にForm1に追加して使用する。追加方法はいろいろあるので、使いやすいように各自変更してほしい。このとき、以下の手順で作成する。
プロジェクトの作成
1 普通に新規プロジェクトを作成
2 プロジェクトからCsGLを参照できるよう、以下の作業で関連付ける。
「プロジェクト」「参照の追加」「参照」でファイル指定ウィンドウが開くので、先に追加したcsgl.dllを指定し、OKを押す。
3 「プロジェクト」「モジュールの追加」で、モジュールを追加(クラスでもよいが、何かとOpenGL関連の別計算(法線の計算関数など)を追加することを考えて、モジュールと同居させている)。ここではModuleOpenGLという名前にしておく。
モジュールの変更
1 モジュールを以下の紫文字を追加し、CsGL用のベースとする。今後、OpenGLで使用するコマンド等はこのクラスに追加していくことになる。
Imports CsGL.OpenGL

Module ModuleOpenGL

End Module

  Public Class OpenGLBase
    Inherits CsGL.OpenGL.OpenGLControl
    ’OpenGL用コードはここに追加していく********************

    Protected Overrides Sub InitGLContext()
    ’OpenGLの初期化内容をここに記述

    End Sub

    Public Overrides Sub glDraw()
    ’OPGLをRefleshすると、こちらが呼び出されるので、描画はここに記述

    End Sub
    ’****************************************************

  End Class

Form1の変更
Form1に上のモジュールに作成したクラスを関連付ける。ここではForm1にPicturebox1を配置し、そこにOpenGLの画像を表示するようにする。
1 Form1にPicturebox1を追加
2 form1上部にある、下の文章の左にある「-」をクリックし、デザイナで自動生成されたコードを表示する。
 #Region " Windows フォーム デザイナで生成されたコード "

 Dim OPGL As OpenGLBase ’OpenGLBaseクラスで定義

 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
 Handles MyBase.Load

  OPGL = New OpenGLBase ’OpenGLBaseクラスを格納
  OPGL.Parent = picturebox1 ’picturebox1にドッキング
  OPGL.Dock = DockStyle.Fill ’picturebox1全体に表示

 End Sub


,これで、Form1内でOPGLという名前でOpenGLが使用できるようになる。OPGL.RefreshでglDrawが呼び出される。
OpenGLの表示とGlutについて
よく、C言語を利用しての初心者講座ではGlutを使っていることが多いのだが、ここでは使わない(というか、使い方がよく分からない。。。)。このため、これらのサンプルプログラムにあるGlutで始まるコマンドは全て無視し、それに値するコードを別で記述することになる。例えば、キー入力なども、通常のVB.netで記述する場合と同じようにイベントを発生させ、OPGL内の関数を呼び出す形になる。また、OpenGLの初回描画(ウィンドウが開いてから、描画されるまで)には時間が掛かることがあり、一度描画を呼び出しただけでは表示されないことが多い。このため、以下のようなプログラムをForm1に配置し、常に表示を更新することが望ましいようだ。ただし、他の処理がある場合は適当に停止させる。この辺の処理はいまだに解決していないので、各自で解決してください
 Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) _
 Handles MyBase.Activated

 Do While Me.Created ’終了するまでずっとループ
   Me.Refresh() ’表示を更新
   Application.DoEvents()
 Loop

 OPGL.Dispose()

 End Sub
ここまでのプログラムjの動作確認
ここまでの変更で実行すると、picturebox1が黒い四角で表示される(OpenGLが機能している)。上の追加分を削除して試してみると、picturebox1が初期設定の色で表示されるはずである。
なお、ここのホームページでのサンプルコードは、あくまでもサンプル用なので、実用化するときには改良が必要である。実際、Me.Refreshを連続して行うと、VB.netで配置したパーツがちらつくことになる。また、OPGL.Disposeの実行位置は、Closingルーチン内で書いたほうが形としてスマートである(ここでは簡単にするためにまとめた)。
OpgeGLコマンドの使い方
プログラムでは、OpenGLBaseクラスの中にOpenGLコマンドを記述することで描画する。このとき、C言語サンプルで書かれているものといくつか異なるので主な点をあげておく。実は、このルールにそって記述するだけで、簡単なC言語版サンプルなら動く。ここから先は、このサイトだけでなく、OpenGLのトップページにある参考サイトの資産を活用してほしい。(このサイトはおそらくどんどん手抜きになるだろうから・・・)
1 全てのコマンドはGL.glxxxxという形で記述される。
例:C記述 glFlush; → VB.net記述 GL.glFlush
2 コマンドで使用する専用の定数は、system.Uint32型(符号なし整数)となる。また、一連の定数名はGLFlags.xxxxで大方整数型で登録されている(たまに登録されていないものあり)。使用方法は以下の例のようになる。
例:GL.glEnable(Convert.ToUInt32(GLFlags.GL_DEPTH_TEST))
3 テクスチャなどポインタを利用する場合は、その都度考える。
4 Glutで始まるコマンドは必要に応じてVB.netコマンドに置き換えるが、基本的に無視。
例えば、キー操作は、formのイベントからGLクラス内に作った関数を呼び出せばよい。
5 gluで始まるコマンドは登録されていないものが多いので、その都度考える。

ここまでで、初期設定は完了とする。次から実際のコード記述を行っていく。
 
前へ 次へ
  
Copyright Lichu since 2008 all rights reserved