また、FreeImageを使ってちょっとしたツールを作ってみました。
今度は、OpenTKも使って、シンプルな画像ビューワー。
FreeImageで画像ファイルを読み込み、
OpenGLでレンダリングしてます。
Windows XP以上、.NET Framework 3.5以上が必要。
あと、5ボタンマウス推奨。
前から、Windows標準の「Windowsフォトビューアー」の
ボタンとかウィンドウの枠とかがうっとうしいと思ってたので、
枠もボタンも無い、可能な限りシンプルなものにしてみました。
画面上に、画像だけが表示されます。
あとは、右クリックで申し訳程度のメニューが出るだけで、
他には何にもありません。
基本的にマウスで全て操作します。
ドラッグ&ドロップで画像を開いたり、
左ドラッグで画像(ウィンドウ)を移動、
マウスの「進む」「戻る」ボタンで次/の画像を表示、
ホイールで拡大・縮小とか。
ウィンドウがディスプレイの縁にスナップしたりもします。
詳しいこととダウンロードはこっちにて。
-> シンプルな(すぎる)画像ビューワー (ImgViewer)
前回のクリップボードの画像保存ツールでは、
FreeImageを画像をファイルに保存する部分に使ってたけど、
今度は、画像をファイルから読むところに使ってます。
起動するのがちと遅いのだけれど、
たぶん、OpenTKとかGLSharpとか、
DLLがそこそこ大きなファイルサイズだからかも。
ごく一部の機能しか使ってないから、
そのあたりをゴリゴリ削ってしまうのもいいのかもしれない。
FreeImageに関しては、試してみた感じだと、
画像ファイルの読み込みは.NET FrameworkのBitmapクラスよりも少し遅い。
まぁ、その辺は、特にJPEGに関しては画質はFreeImageのほうが信頼できるので、
仕方ないのかなと。
あと、OpenGLを使って
画像をテクスチャとしてロードしたりレンダリングしたりするので、
GPUが非力だと、読み込みやレンダリングが重くなるかも。
まぁ、最近のGPU統合型のCPUなら、
そこそこ動くんでは無いかと思いますが。
2012/06/11
2010/10/09
OpenTK 1.0 リリース
OpenTK 1.0 が、やっと「RC1」がとれてリリースされたようだ。
時々OpenTKのサイトのForumsをのぞいていたのだけれど、
特にレンダリングコンテキストの初期化まわりでの問題が
レポートされているのをよく見かけたので、
だいぶ安定性が良くなったのではないかと。
さて、
ぼちぼちGLSharpのほうも
いじり始めますかな・・・。
時々OpenTKのサイトのForumsをのぞいていたのだけれど、
特にレンダリングコンテキストの初期化まわりでの問題が
レポートされているのをよく見かけたので、
だいぶ安定性が良くなったのではないかと。
さて、
ぼちぼちGLSharpのほうも
いじり始めますかな・・・。
2010/04/28
Account Suspended ?
OpenTKのサイトに行ったら、
なぜか
"Account Suspended"
となって全く見れない。
Googleの検索結果まで
"Account Suspended"と表示されてるし・・・。
いったい何が?
とりあえずダウンロードだけはできるみたい。
http://en.sourceforge.jp/projects/sfnet_opentk/
追記:
どうやら1~2日程度で復帰した模様。
なぜか
"Account Suspended"
となって全く見れない。
Googleの検索結果まで
"Account Suspended"と表示されてるし・・・。
いったい何が?
とりあえずダウンロードだけはできるみたい。
http://en.sourceforge.jp/projects/sfnet_opentk/
追記:
どうやら1~2日程度で復帰した模様。
2010/03/17
GLSharp更新しました。
文字列描画周りのバグを修正しました。
今まで気づかなかったのだが、GDIフォントオブジェクトがリークしていた・・・orz
Font.ToHfont()
で取得したフォントオブジェクトのハンドルは、
自分でDeleteObject(...)で削除しないといけなかったのね・・・。
OpenTKのほうはBeta3がリリースされているけど、
試してみたら
レンダリングコンテキストの初期化でエラーになってしまったので
とりあえず、
GLSharpのほうはBeta2のままです。
あと、ジョイスティック周りのも、
すいませんがもうしばらくお待ちください。
今まで気づかなかったのだが、GDIフォントオブジェクトがリークしていた・・・orz
Font.ToHfont()
で取得したフォントオブジェクトのハンドルは、
自分でDeleteObject(...)で削除しないといけなかったのね・・・。
OpenTKのほうはBeta3がリリースされているけど、
試してみたら
レンダリングコンテキストの初期化でエラーになってしまったので
とりあえず、
GLSharpのほうはBeta2のままです。
あと、ジョイスティック周りのも、
すいませんがもうしばらくお待ちください。
2009/12/10
GLSharp更新しました。
久々にGLSharpを更新しました。
OpenTK 1.0 Beta 2 が公開されたので、
それに対応してみました。
このバージョンから、
OpenTK.dllには修正を加えずに
本家サイトで公開されているものをそのまま使用してます。
でも、GLUのラッパーの部分だけは
「OpenTK.Compatibility.dll」のソースコードから
該当部分をひっこぬいてきて若干の修正を加えて、
「OpenTK.GLU.dll」として作ってみました。
(理由は後述。)
OpenTK 1.0 の Beta がとれて
正式バージョンになったら、また更新する予定。
OpenTK はバージョン1.0になって
ずいぶんと変わったようだ。
OpenGL ESにも本格的に対応しているようだし、
OpenCLとかいうのにも対応したようだ。
(まぁ、ESとかOpenCLはとくに使わないけど・・・。)
肝心のOpenGLについては、
バージョン3.2までしっかり対応している様子。
だけと、
GLUが「OpenTK.dll」から分離されて
「OpenTK.Compatibility.dll」に移動され(OpenTK.Graphics.Glu)、
さらにObsolete属性がつけられていて、
Gluクラスを参照するたびにコンパイラの警告が
"Use OpenTK math function instead."
(かわりにOpenTKの数学関数(たぶんOpenTK.Math.Functionクラスのこと)をつかってけろ)
というメッセージとともに出る。
でも、
OpenTK.Math.Functionクラス(これもObsolete属性付き)や
OpenTK.dllのほうのOpenTK.Functionクラスには
Gluの関数の代わりになるような機能は全くない・・・。
OpenTK 1.0 Beta 2 が公開されたので、
それに対応してみました。
このバージョンから、
OpenTK.dllには修正を加えずに
本家サイトで公開されているものをそのまま使用してます。
でも、GLUのラッパーの部分だけは
「OpenTK.Compatibility.dll」のソースコードから
該当部分をひっこぬいてきて若干の修正を加えて、
「OpenTK.GLU.dll」として作ってみました。
(理由は後述。)
OpenTK 1.0 の Beta がとれて
正式バージョンになったら、また更新する予定。
OpenTK はバージョン1.0になって
ずいぶんと変わったようだ。
OpenGL ESにも本格的に対応しているようだし、
OpenCLとかいうのにも対応したようだ。
(まぁ、ESとかOpenCLはとくに使わないけど・・・。)
肝心のOpenGLについては、
バージョン3.2までしっかり対応している様子。
だけと、
GLUが「OpenTK.dll」から分離されて
「OpenTK.Compatibility.dll」に移動され(OpenTK.Graphics.Glu)、
さらにObsolete属性がつけられていて、
Gluクラスを参照するたびにコンパイラの警告が
"Use OpenTK math function instead."
(かわりにOpenTKの数学関数(たぶんOpenTK.Math.Functionクラスのこと)をつかってけろ)
というメッセージとともに出る。
でも、
OpenTK.Math.Functionクラス(これもObsolete属性付き)や
OpenTK.dllのほうのOpenTK.Functionクラスには
Gluの関数の代わりになるような機能は全くない・・・。
2009/11/15
2009/08/13
OpenTKが更新中
最近OpenTKの活動が活発になっているようだ。
まだ詳細はみていないが、
現在、正式にリリースされているのはver.0.9.8-2。
でもって、ver.1.0リリースに向けてver.0.9.9も公開が始まっている様子。
なにやらOpenCVなるもののラッパーも追加されたとか。
ver.0.9.9からwindowsでのFSAAをサポートするようになったっぽいが、
まだ試してないのでよくわからん。
まだ詳細はみていないが、
現在、正式にリリースされているのはver.0.9.8-2。
でもって、ver.1.0リリースに向けてver.0.9.9も公開が始まっている様子。
なにやらOpenCVなるもののラッパーも追加されたとか。
ver.0.9.9からwindowsでのFSAAをサポートするようになったっぽいが、
まだ試してないのでよくわからん。
2008/12/03
バッファオブジェクト
何となく気が向いたので、
バッファオブジェクトに手をつけてみることにした。
で、GLSharpへの実装も視野に入れて
赤本片手に、バッファオブジェクトを扱うクラスを試作中。
・・・といっても、まだバッファオブジェクトの扱い方すら
よくわかってないけど。
んん、OpenTKの
glBufferData、glSubBufferData関数のインポートが・・・
GL.BufferData( BufferTarget target, IntPtr size, IntPtr data, BufferUsageHint usage );
GL.BufferData( BufferTarget target, IntPtr size, object data, BufferUsageHint usage );
GL.BufferSubData( BufferTarget target, IntPtr offset, IntPtr size, IntPtr data );
GL.BufferSubData( BufferTarget target, IntPtr offset, IntPtr size, object data );
IntPtr型でサイズやオフセットを指定しろと?
いや、それはちと違うんでない?
バッファオブジェクトに手をつけてみることにした。
で、GLSharpへの実装も視野に入れて
赤本片手に、バッファオブジェクトを扱うクラスを試作中。
・・・といっても、まだバッファオブジェクトの扱い方すら
よくわかってないけど。
んん、OpenTKの
glBufferData、glSubBufferData関数のインポートが・・・
GL.BufferData( BufferTarget target, IntPtr size, IntPtr data, BufferUsageHint usage );
GL.BufferData( BufferTarget target, IntPtr size, object data, BufferUsageHint usage );
GL.BufferSubData( BufferTarget target, IntPtr offset, IntPtr size, IntPtr data );
GL.BufferSubData( BufferTarget target, IntPtr offset, IntPtr size, object data );
IntPtr型でサイズやオフセットを指定しろと?
いや、それはちと違うんでない?
2008/07/11
GLSharp更新しました。
とりあえず、いろいろ作ってたのが一段落したので、
GLSharpの新しいのをHPのほうにアップしました。
ここでは書いてなかった気がするが、
アニメーションの基礎部分なんかも実装しました。
まだ、幾分改良の余地はありそうですが。
フレームレート制御ややこしいな、と思ってたのだが、
YaneSDKになんかそんなのがあったな、と思いだして、
FPSTimerクラスをいいように使わせていただきました。
なかなか使い勝手が良いです。
ただ、そのままだと、時間計測にSDLを使ってるので、
FPSTimerのためだけにSDLを組み込むのも面倒なので
(っていうか、SDLの使い方知らんので)
System.Diagnostics.Stopwatchで時間を計測するように改造しました。
GLSharpの新しいのをHPのほうにアップしました。
ここでは書いてなかった気がするが、
アニメーションの基礎部分なんかも実装しました。
まだ、幾分改良の余地はありそうですが。
フレームレート制御ややこしいな、と思ってたのだが、
YaneSDKになんかそんなのがあったな、と思いだして、
FPSTimerクラスをいいように使わせていただきました。
なかなか使い勝手が良いです。
ただ、そのままだと、時間計測にSDLを使ってるので、
FPSTimerのためだけにSDLを組み込むのも面倒なので
(っていうか、SDLの使い方知らんので)
System.Diagnostics.Stopwatchで時間を計測するように改造しました。
2008/05/27
アンチエイリアスも・・・
OpenTKのソースコードのWinGraphicsModeクラスに、
未実装のSetGraphicsModeARBなんてのがあるあたりをみると、
アンチエイリアスなどの拡張機能に対応した
レンダリングコンテキストの初期化を
実装するつもりがあるっぽい。
まぁ、まだバージョンも0.9.1で1未満だし、
今後実装されることを期待。
・・・ということで、
アンチエイリアスも
放置。
せっかくだから、
資料へのリンクだけでも、
どっかにまとめておきますか。
あ、
ホームページに資料ページを作ろうとしてたら
思い出したのだけど、
そういやホームページのほうの
NURBSのページを放置してたから、
そのへんをやってみようかな・・・?
未実装の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のレンダリングコンテキストって、
ややこしくって、よくわかんないんだよなぁ・・・。
ひとまず、フルスクリーンは放置。
まぁ、特に必要に迫られているわけでもないので。
で、何となく、
今度はアンチエイリアスを調べてみた。
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アプリケーションをフルスクリーンで表示するには?
に書いてある方法でフルスクリーンにしたときに起こるようだ。
つまり、
別の方法でフルスクリーンにしろ、
ということか。
OpenTK.Platform.Windows.WinDisplayDeviceDriver
(DisplayDeviceDriverのWindowsでの実装。)
というクラスの中で、
ChangeDisplaySettings関数使ってるし。
前にも書いたディスプレイの解像度変更は
これを使って実装しているようだ。
ってことは、わざわざ自分で
ChangeDisplaySettings関数を
使う必要はないのか。
それどころか、
DisplayDeviceクラスを通して
知らずして使っていたということか・・・。
このあいだ書いた、
描画速度が極端に遅くなる 、という症状は、
DisplayDeviceクラスを使って
ディスプレイの解像度を変更したときではなく、
どうも
.NET TIPS Windowsアプリケーションをフルスクリーンで表示するには?
に書いてある方法でフルスクリーンにしたときに起こるようだ。
つまり、
別の方法でフルスクリーンにしろ、
ということか。
2008/05/17
OpenTKでフルスクリーンモード
OpenTK、結構いい感じになってるっぽい。
Ver. 0.9.1になって追加された
「DispreyDevice」というクラスがあるのだが、
これを使うと、その名の通り、
ディスプレイデバイスを簡単に扱える。
具体的には、
ディスプレイの解像度やリフレッシュレートなどを
たったの1~2行で変更したり、元に戻したりできる(!)。
でディスプレイデバイスをリストアップして、
例えば、解像度640*480ピクセル、色32bit、リフレッシュレート60Hzなら、
元にもどすなら、
これだけでOK。
これに加えて、
http://www.atmarkit.co.jp/fdotnet/dotnettips/199fullscreen/fullscreen.html
を参考にしてフルスクリーンモードの切り替えを実装すると・・・
あっという間に解像度を指定した
フルスクリーンモード切り替えができあがり。
・・・と思ったんだけど。
なんだか極端に描画速度が遅くなるようなので、
ダメっぽい。
もうちょっと、ちゃんと調べてみます。
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も新しいバージョンに対応させたいし、
新機能なども幾つか実装されたようなので
ぼちぼち、じっくり見てみますかな。
ネームスペースの変更とか、
いろいろあるようだが・・・
ver.0.9.0同様、
やっぱりGLクラスにGetBooleanv関数が無い。
代わりに「GL.NV.GetBoolea」とかいうのがある。
なんでなおらんのだろうか・・・。
まぁ、まだ落としてきたばっかりだし、
GLSharpも新しいバージョンに対応させたいし、
新機能なども幾つか実装されたようなので
ぼちぼち、じっくり見てみますかな。
登録:
投稿 (Atom)