1.0C#で書かれたOpenGL用のクラスライブラリです。一歩二歩散歩なりに作ってみました。フリーソフトとしてここで公開しています。OpenGLのラッパーとしてOpenTKというフリーのライブラリを使用しています。GLSharpのメインは、クラスライブラリの部分です。初期化(レンダリングコンテキストの作成)や、テクスチャの作成がサクッとできたり、カメラやライト、マテリアルを表すクラス、文字列描画など、いろいろあります。コードを書く手間が省けるし、お手軽に扱えるようになるはずです。Object)ローダーも実装しています。(曲面に未対応など、まだ機能が十分でない点もありますが・・・。)Metasequoiaという3Dモデリングソフトがありまして、フリーソフトでありながら高機能、かつ初心者でも扱いやすいという、なかなかの優れモノがあるのです。(それゆえ、ユーザーも結構多いようです。)GLShrarpでは、このMetasequoiaで作成したモデルデータ(.mqoファイル)を読み込んで、OpenGLで描画することが可能です。ついでに、MQO形式での書き出しもできたりします。GLSharpの主なクラスは以下のようになっています。wglWGLのラッパークラス。IGLRenderingControlOpenGLで描画を行うコントロール。(OpenTKにも「GLControl」というのがありますが、それとは別物です。)OpenGLの初期化はコントロールが勝手にやってくれます。デザイナからピクセルフォーマットが指定できたりします。RenderingSceneというScene型のプロパティを持ち、ここにセットされたOpenGLシーンを描画します。IGLRenderingControlOpenGLで描画を行うフォーム。基本的に、機能はGLSControlとほぼ同等。フルスクリーンモード機能を持っています。IGLRenderingControlOpenGLで描画を行うコントロールを表します。両者を同じように扱えるようになっています。RenderingContextOpenGLのレンダリングコンテキストを扱うためのクラス。初期化の手間をかなり省くことができる。引数にコントロールを指定するだけで、そのコントロールに対して描画するためのレンダリングコンテキストを作成できる。アンチエイリアスなどのエクステンションにも対応しました。SceneOpenGLシーンを表す抽象クラス。このクラスから派生クラスを作成し、GLSControlまたはGLSFromのRenderingSceneプロパティにセットすると、コントロール(またはフォーム)のほうで自動的に描画してくれます。FpsControllerSceneオブジェクトのフレームレート(FPS)をコントロールするクラス。Materialマテリアルを扱うクラス。環境光(Ambient)、拡散光(Diffuse)、反射光(Specular)、自己照明(Emission)、反射強度(Shiness)、テクスチャ(Texture2D)これらをまとめて扱える。このクラスを使えば、ライティングを使用する際に、マテリアルの各要素+テクスチャをまとめて指定できる。Textur2Dテクスチャを扱うクラス。Bitmapクラスから自動的にテクスチャを生成してくれる。ミップマップ、テクスチャ変換行列、テクスチャ座標自動生成にも対応。DisplayListディスプレイリストを扱うためのクラス。Cameraカメラ(視点)を表すクラス。OpenGLでの、視点の移動や回転などを請け負う。簡単なプロジェクション(射影変換)行列の操作もできる。Lightライト(光源)を表すクラス。環境光(Ambient)、拡散光(Diffuse)、反射光(Specular)、光源の種類(点光源とか、指向性の光源とか、スポットライトとか。)などをまとめて扱うことができる。Mesh3Dモデルのメッシュを表すクラス。頂点、マテリアル、プリミティブなどを持つ。メッシュの描画、法線の作成なども行える。OpnenGLで、描画するものをひとまとまりの「モデル」単位として扱うためのクラス。抽象クラスなので、継承して使う。階層構造をつくることが可能。Modelメッシュデータを保持・描画するすクラス。このクラスを使ってMetasequoiaのMQOファイル(*.mqo)の入出力も行うことができる。階層構造とローカル座標にも対応。アウトラインフォントの文字列をメッシュ化し、それらを扱うクラス。簡単なテキストのレイアウトも設定できる。クラスを継承しているので、MQOファイルに文字オブジェクトとして書き出すことも可能。Selectionマウスピッキングをサポートするクラス。モデル(Modelクラスのインスタンス)単位でのマウスピッキングを簡単に行うことができる。IGlyphれぞれ、ビットマップ、ポリゴン、テクスチャで文字を描画するグリフを表す。GlyphDictionaryそれぞれ、ビットマップ、ポリゴン、テクスチャで文字を描画するグリフオブジェクトを作成・管理するクラス。同一グリフの多重作成を避けることができる。TextLabelそれぞれ、ビットマップ、ポリゴン、テクスチャでテキストを描画するクラス。テキストの簡単なレイアウト指定(右揃えとか、中央揃えとか、その程度)も可能。Position位置座標と回転行列を扱うクラス。ワールド座標系の位置座標と回転行列、ローカル座標系の位置座標と回転行列を持つ。描画オブジェクトの位置や回転を管理・指定するためのクラス。Primitiveプリミティブを表すクラス。頂点インデックス、面法線ベクトル、各頂点のUV座標、マテリアル、頂点カラーを持つ。TessellatorGLUを利用してテセレーションを行うクラス。輪郭線(Contourクラス)から、テセレーションによりメッシュを作成できる。Contour輪郭を表す頂点群を持つクラス。Tessellatorクラスでテセレーションに用いる輪郭線。OutlineFontTessellatorアウトラインフォントの文字をポリゴン(メッシュ)化するクラス。CaptureOpenGLのバッファをキャプチャして、Bitmapクラスに変換するためのクラス。描画したものを画像ファイルとして保存したりするのに便利。Vectorベクトル演算のための静的クラス。Matrix行列演算のための静的クラス。Joysticジョイスティック(ゲームパッド含む)を扱うクラス。GLSharpの配布形式は基本的にソースコードなのですが、OpenGLラッパーとして使用しているOpenTKのソースコード量がなかなか多いので、OpenTKはビルド済みのDLL(OpenTK.dll)のみを含めてあります。(ソースコードはOpenTKのサイトで入手してください。「OpenGLラッパーDLL」+「その他のクラスライブラリのソースコード」というやや変則的な構成になってます。サンプルプログラムもセットになっていて、こんな感じになってます。個人の制作物ですからひょっとしなくてもバグがあると思われます。そんなものを見つけたときは、ブログのコメントあたりでご一報いただけると、非常にありがたいです。その他、改善してほしい点などがあったら、同様にどうぞ。<ダウンロード>では、ダウンロードはこちらから、どうぞ。ソリューションをZIPしてあります。)GLSharp5-4-3_OpenTK1-0.zipビルド済みのサンプルのプログラムも上げときます。ビルドするのめんどくさいとか、とりあえずサンプルを動かしてみたいという方は、こちらをどーぞ。GLSharp5-4-3_demo-bin.zipこっちは古い方です。GLSharp5_3_1.zipGLSharp5_1_0.zipGLSharp_4001.zip一応書いておきますが。コピペ、改変、改造、どうぞ、ご自由にお使い下さい。損害等の保証はいっさいできません。誰だか知らないけど制作者さんありがたく使わせてもらいますよー、とかちょっと思ったりしてもらえれば、幸いです。Libraryhttp://www.opentk.com/GLSharpでは、冒頭でも述べたように、OpenTKを使用しています。OpenTKについての詳細は、上記のサイトを参照してください。Yanesdk.NETについて一部、YaneuraoGameSDK.NET(通称Yanesdk.NET)という、.NET用のライブラリからソースコードを使用させていただきました。(アニメーションのフレームレートを制御する「FPSTimer」クラス。変更が加えてありますが。)YaneSDKに付いての詳細は、YaneSDKのホームページhttp://yanesdkdotnet.sourceforge.jp/を参照してください。1.0今更ですが、アップしているファイル内の、ビルド済みの"GLSharp.dll"に不具合があることが判明したので修正。なんかうかく動かない、と思っていた方、申し訳ないです。ついでに、使用するOpenTKを、ver.1.0のリリース版に変更。GLSharp自体のソースはそのままです。2レンダリングコンテキスト作成時に発生することがあるバグの修正。2・OpenGLのバージョン取得時にエラーになるのを修正。以前のバージョンでデモがうまく動かなかった人は動くようになるかもしれません。・テクスチャで描画する文字にアンチエイリアスを指定しても無視されてしまうバグを修正。2文字列描画関連のクラスで、GDIフォントオブジェクトがリークしていたのを修正。2文字列描画関連のクラスを再設計。文字に色をつけられる機能を追加。FPSTimerを改善。前よりもだいぶマシになったのではないかと。2RenderingContextクラスと、PixelFormatAttributeクラスを修正。2Sceneクラスを再設計。AnimationSceneクラスの廃止、FrameControllerクラスの追加、など。MQOファイルのバイナリ頂点データ、ミラーに対応。MathUtilクラスを追加。Selection.Pick()メソッドの仕様変更。Radeon系のビデオカードを使用している場合にレンダリングコンテキストの初期化でエラーが発生していたっぽい。)サンプルプログラム(GLSharp_Demo)にQuadricsSample(GLUの2次曲面オブジェクトのサンプル)を追加。一部のコードファイルのエンコードがシフトJISだったので、すべてのコードファイルのエンコードをUTF-8に変更。