2008/05/27

アンチエイリアスも・・・

OpenTKのソースコードのWinGraphicsModeクラスに、
未実装のSetGraphicsModeARBなんてのがあるあたりをみると、
アンチエイリアスなどの拡張機能に対応した
レンダリングコンテキストの初期化を
実装するつもりがあるっぽい。
まぁ、まだバージョンも0.9.1で1未満だし、
今後実装されることを期待。

・・・ということで、
アンチエイリアスも
放置。

せっかくだから、
資料へのリンクだけでも、
どっかにまとめておきますか。


あ、
ホームページに資料ページを作ろうとしてたら
思い出したのだけど、
そういやホームページのほうの
NURBSのページを放置してたから、
そのへんをやってみようかな・・・?

2008/05/26

今度はアンチエイリアス。

資料が見つからないので、
ひとまず、フルスクリーンは放置。
まぁ、特に必要に迫られているわけでもないので。

で、何となく、
今度はアンチエイリアスを調べてみた。

OpenTKではGLControlのコンストラクタの
引数に渡すGraphicsModeクラスのインスタンスを通して
アンチエイリアスのサンプリング数を指定できる。
が、
アンチエイリアスが有効なレンダリングコンテキストを作成する機能は
実装されてないので無視される。

で、自分で資料を探してみると、
NeHeのLesson46 Fullscreen AntiAliasing
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=46
ってのを見つけた。

コードを書いて試してみたら、
wglChoosePixelFormatARB関数で
有効なピクセルフォーマットを取得するところまではうまくいった。
さて、GLSharpで実装するか、
OpenTKを改造するか・・・。

OpenTkのレンダリングコンテキストって、
ややこしくって、よくわかんないんだよなぁ・・・。

2008/05/24

続・フルスクリーンモード・・・

OpenTKのソースコード眺めてみると、
OpenTK.Platform.Windows.WinDisplayDeviceDriver
(DisplayDeviceDriverのWindowsでの実装。)
というクラスの中で、
ChangeDisplaySettings関数使ってるし。
前にも書いたディスプレイの解像度変更は
これを使って実装しているようだ。

ってことは、わざわざ自分で
ChangeDisplaySettings関数を
使う必要はないのか。
それどころか、
DisplayDeviceクラスを通して
知らずして使っていたということか・・・。

このあいだ書いた、
描画速度が極端に遅くなる 、という症状は、
DisplayDeviceクラスを使って
ディスプレイの解像度を変更したときではなく、
どうも
.NET TIPS Windowsアプリケーションをフルスクリーンで表示するには?

に書いてある方法でフルスクリーンにしたときに起こるようだ。
つまり、
別の方法でフルスクリーンにしろ、
ということか。

2008/05/22

フルスクリーンモード ただいま調査中・・・。

そういや、
CSGLにフルスクリーンモードの機能がある
とかいうのを聞いた覚えがあったので、
CSGLのソースコードを眺めていたら、
「ChangeDisplaySettings」
というWin32 APIにたどり着いたのだが、
どうもこれっぽい。

試しに
「ChangeDisplaySettings フルスクリーン」
でググってみるとMSDNとかそれっぽいのが
すぐに出てきた。

C#でWin32 APIをいじるときは、
http://www.pinvoke.net/index.aspx
ここが便利。
英語だが、ソースコードやサンプルコードなど
必要なものはたいてい揃っていると思います。

さて、
これでフルスクリーンモードを実装するのに
必要なものは揃った・・・か?

2008/05/17

OpenTKでフルスクリーンモード

OpenTK、結構いい感じになってるっぽい。

Ver. 0.9.1になって追加された
「DispreyDevice」というクラスがあるのだが、
これを使うと、その名の通り、
ディスプレイデバイスを簡単に扱える。
具体的には、
ディスプレイの解像度やリフレッシュレートなどを
たったの1~2行で変更したり、元に戻したりできる(!)。

DisplayDevice[] disp = DisplayDevice.AvailableDisplays;

でディスプレイデバイスをリストアップして、
例えば、解像度640*480ピクセル、色32bit、リフレッシュレート60Hzなら、
disp[0].ChangeResolution(disp[0].SelectResolution(640, 480, 32, 60.0f) );

元にもどすなら、
disp[0].RestoreResolution();

これだけでOK。

これに加えて、
http://www.atmarkit.co.jp/fdotnet/dotnettips/199fullscreen/fullscreen.html
を参考にしてフルスクリーンモードの切り替えを実装すると・・・
あっという間に解像度を指定した
フルスクリーンモード切り替えができあがり。


・・・と思ったんだけど。
なんだか極端に描画速度が遅くなるようなので、
ダメっぽい。
もうちょっと、ちゃんと調べてみます。

2008/05/14

OpenTK ver.0.9.1

OpenTKがバーションアップしたらしい。
ネームスペースの変更とか、
いろいろあるようだが・・・

ver.0.9.0同様、
やっぱりGLクラスにGetBooleanv関数が無い。
代わりに「GL.NV.GetBoolea」とかいうのがある。
なんでなおらんのだろうか・・・。

まぁ、まだ落としてきたばっかりだし、
GLSharpも新しいバージョンに対応させたいし、
新機能なども幾つか実装されたようなので
ぼちぼち、じっくり見てみますかな。

2008/05/13

再開しました。

ども。
一歩二歩散歩というモノです。

ひとまず、
場所を変えてブログを再開しました、
というご報告まで。