HPがInfoseekにあったころの日記は、現在データベース化待機中となっています。
DB化完了:2006年度分 ・ 2002年度分 ・ 2003年度分1~5月
インデックスより、年・月を指定すると、その月のタイトルが表示されます。
見たい日記のタイトルをクリックすることで、日記を閲覧することができます。
タイトルにつく【】の意味
2002年 | 2003年 | 2004年 | 2005年 | 2006年 | 2007年 |
2008年 | 2009年 | 2010年 | 2011年 | 2012年 | 2013年 |
2014年 | |||||
1月 | 2月 | 3月 | 4月 | 5月 | 6月 |
7月 | 8月 | 9月 | 10月 | 11月 | 12月 |
やっとひと段落着いたので、久々にVBプログラミングでも。
昨日の章
最近やりたかったのは、ピクセル単位での描画(ピクセル=ドットでだいたい間違ってないです)。例えば、フラクタル画像とか『点』で描画する際に有効となる方法。 今までは、『1ピクセルの点のテクスチャを作成し、それを画面に敷き詰める』という手法をとっていたのだけど。これだと例えば400x400の画面では160000回も描画関数を呼ばないといけない。もちろんこれは高コスト。 さらに、毎回テクスチャを再描画しないといけないので、無駄に重いものとなってしまう。これでは『フラクタル画像を作って、そのあと』ができない。作るので精一杯だからである。
そこで、DirectX8のほかの機能でどうにかできないものかと調べてみる。するとほどなくして、ColorFill()という関数を発見。これはとある領域をとある色で塗りつぶせるものらしい。
これはテクスチャを直接いじるものなので、(多分)上記のテクスチャを大量に書くよりは早いはずである。
…が、しかし。どう検索してもColorFill()が出てこない。と、それもそのはず。この関数はDirectX9で新規に導入されたもののよう。X8で使えるわけが無い。
よし、じゃあこの機会にX9に乗り換えようか!とも思ったけど、残念ながらVB6がサポートしているのはX8まで…。.NETだとX9が使えるようです。が、.NETを使う気にはならない。
というわけで。残念。と、今回のプロジェクトが終わろうとしていたその時!
別のページで、『テクスチャが入っているメモリ(ここには各ピクセルの色情報が入っている)にアクセスして、それを書き換える』という技を発見。なるほど。
早速この方法を試してみる。テクスチャをロックして、テクスチャ情報が格納されている先頭のポインタを取得して、そのポインタにD3DColorValueを記入…。え、ポインタ?
そう、ポインタ。C系の言語にはあって、いろんな用途に使える概念。ポインタはメモリ上の住所であり、例えば『メモリ12345番地からテクスチャのデータが始まりますよー』っていうのさえ知ることができれば、10番目のピクセルのデータは12354番地にあるねっていうのが分かるわけ。
いろいろ難しいので、VBでは意識しなくていいように作られている。ちなみにVB上では、【変数⇒ポインタ』はできるんだけど、【ポインタ⇒変数】ができない。
いままでメモリをどうこういじることも無かったから、確かにポインタはいらないねぇ、VB万歳と思ってた。だけど、『ビデオメモリ(だと思う)』をいじると言う方法があったのは盲点。
今回は上記にも書いたとおりVBの仕様なのでどうしようもない。
よって、敗北。惨敗。
今日の章
リベンジをかけてみる。なぜならば、違う方法を思いついたから。
それは以下のような方法。
①ポインタはC++なら使うことが可能である。
②C++はDLLというファイルを作成することができる。
③DLLはVBで読み込むことが可能。
つまり、C++でポインタを弄くる関数を定義し、それをVB6から使おうという技。VBから見れば、ただのDLLの呼び出しなので、ポインタとか関係なく実行可能である。
あんまり好きじゃないんだけど、VS2005を立ち上げVC++を起動。DLL作成にしていざ開始!
インターネットで調べたところ、エクスポートしないと他の言語から参照できない模様。
また、普通に定義すると、関数名がfunc@XYYZZみたいに予測しにくいものになってしまうようなので、extern "C"というものを入れる。こうすると、func@8というように数字になるため、VBからも簡単に参照できるようになる。
このextern "C"は仕組みがよく分からなかったので、例の『おまじない』と言う事で理解しておいた。
あとは昨年のポインタの講義を思い出しながらC++でポインタいじくり関数を実装。『ポインタ番地』と『値』を放り込むと、該当番地に値を記入してくれるというもの。これにより『ポインタ⇒変数』がVB上でも使えるようになるはず!
DLLが完成したら、早速VB6で読み込んでみる。
そして、いざ戦闘開始!
テクスチャをロックして、テクスチャ情報が格納されている先頭のポインタを取得して…。このポインタとRGB(255,0,0)を例のDLLのほうに飛ばす。
すると、DLLがピクセルの情報を書き換えてくれる。これを広範囲で行えば…。
ピクセルへアクセス成功。VBの限界を打ち破った瞬間でもあります。
さらに1ピクセルずつちまちまやらないで、配列を送り込んでみる。C言語上では配列もポインタなので一気に処理が可能。
FPSは3…。だがまだ改良の余地はあるし何とかなるだろう。
まだまだ.NETやCに移らなくても大丈夫なようです。VB6愛してる。
2008.01.27 |
Ver.1.07 |
コメント文字数制限を緩和(350文字→512文字) |
2006.09.12 |
Ver.1.06 |
コメント文字数制限を緩和(256文字→350文字) |
2006.07.06 |
Ver.1.05 |
ポータルモードに対応。同一日の日記へのリンクも表示。 |
2006.03.28 |
Ver.1.04 |
コメントを改行できるように拡張。 |
2006.03.21 |
Ver.1.03 |
コメント送信エラー時、入力文字が残らないバグを修正。 |
2006.03.06 |
Ver.1.02 |
コメントの一部文字列に、\記号が挿入されるバグを修正。 |
|
|
投稿コメント文字制限数を変更。(64文字→128文字) |
2006.02.28 |
Ver.1.01 |
コメントシステムに削除機能を実装。 |
2006.02.23 |
Ver.1.00 |
HKP-DiarySystem稼働。 |
|
|
コメントシステム稼働。 |