C#2.0時代のゲームプログラミング(8)

描画にはOpenGL/DirectXを使う。二次元の描画をするときでも三次元の描画システムを利用するようにすれば、affine変換(上下反転、左右反転、拡大縮小etc..)が自由に行なえるようになる。


Yanesdkではlinux/MacではOpenGLを使うことにするので、Window環境で開発する場合でも、まずはOpenGLで描画することを考える。そうすれば、そのままlinux/Macでも動くからだ。


Windows環境であってもSDL経由でOpenGLを使うのは容易だが、SDLを経由せずにOpenGLを使うにはちょっとしたコツが必要になる。しかもpure C#となると、ちょっと難しい。


まず、t-potさんの記事ではC++.NETでこれを実現している。*1


C++で出来るならばpure C#でも出来ないはずはないのだが、これについて書いている記事は国内ではほとんど見当たらない。例えば、Studio Dragoonさんのところの記事では、



ただC#OpenGLを利用する場合はレンダリングコンテキストの取得が少々面倒で、
色々と調べた結果C#からの取得は無理と判断し、C++.NETを利用しました。

と書かれている。しかしもちろん、無理なことではない。 (つづく)

*1:余談だが、当初、このサンプルプログラムはVC++2005ではコンパイル出来なかった。該当箇所は
this->timer1->Tick += new System::EventHandler(this,timer1_Tick);
のようにEventHandlerを渡している部分(計3箇所)で、これがC3867になった。
this->timer1->Tick += new System::EventHandler(this,&Form1::timer1_Tick); のように修正すれば動くのだが。このへん、C#と比較すると、とてもC++で書く気にはなれない。