先週1週間は珍しく会社でコーディング。さすがにそんな週末は家でコーディングはしなかったりする。

複数のOSでのプログラムテスト用に,以前VMWareを使っていてその後MS製のVirtualPCに乗り換えたのだが,ずっと不満だった点がある。VMWareではHDDへの書き込みを別の場所に保存しておいて電源を切るときに破棄するかHDDに反映するかを選択できたのだがVirtualPCではできない点。と思っていたのだが,マトゥ氏が「復元ディスク」を使えばできるよ,とさらっと言ってきた。試してみたら確かにできる。目からウロコだったという話。

土日はずっとタスクトレイ用のアイコンを作っていた。アイコン作るたびに思うけど,16×16は表現の限界がある。特にタスクトレイの場合,Windows2000ではシステム16色しか使えないので大変。

最終的にタスクマネージャのようなアニメーションをしたいのだが,アイコンを何枚も用意するのはカッコ悪いので,動的に作る仕組みを考えてみる。アイコンのフォーマットはMSDNに公開されているので,その通りにリソース-GRPICONDIR-GRPICONDIRENTRY-ICONDIRENTRYの順番で探す。最終的にBMPと同じ形式になるのでどうにでも編集できて,CreateIconFromResourceExでアイコンを作成。

久しぶりにGDIプログラミングをしてみる。最後に本格的にやったのはWAP用エディタ作った時だから,5年以上前ってことに。それ以降はずっとWebアプリとDirectXとかだから,MFCとかデバイスコンテキストとかだいぶ忘れてる。

#とは書いたものの,ロビーは結構ガシガシとウィンドウプログラミングしてたか。

とりあえず作りたいのはVisual Studioにあるようなプロパティ編集用グリッドコントロール。.NETならPropertyGridViewというそのまんまのクラスがあるのだが,C++ネイティブコードからは簡単には使えない(多分)ので,完全自作しかないかなあ,てな感じで。

自宅マシンにVista β1を入れてみる。3DのWindowsを見たかったのだが,そんな設定はなかった。もしかしてβ1では3Dの表示はまだない? 最新のCTPはダウンロードすれば手に入るが,さすがにAirH"では2GBとか辛いし,会社から持って帰るのもなんだし,って感じで保留。

#2006.06.09 既にβ2が出ているが。VistaのAeroを使うにはVRAMが足りないらしい。マジですか。

ようやくVisual Studio2005のDVDが届いた。既に本体はAirH"でダウンロードしてるのでMSDN日本語版だけインストール。


今年になってからずっと風邪気味だったので(?)長い間ほっといたハリーポッター6巻を読んでいた。既に登場人物が全然分からないわけだが,なんとか読み終わる。そういう展開ですか。てか今更ノルマみたいなの作って,あと1巻で全部終わるのだろうか。7巻は1000ページとかだったりして。

パジ氏に聞いてみたところ,World Testerの15パズルは62FPS出るとのこと。うちじゃ40~50くらいしか出ないから高速化に力を入れていたというのに。これ以上高速化しても,最近のPCだと全然意味ないんですかね。

Windows Vista 日本語版 β 5270。HDDを固定で16GB確保し,VirtualPCを裏で数十時間動かし続けてやっとインストール完了。VirtualPC追加機能を入れないと重いため,Virtual Server2005 R2の追加機能を入れた。GUIについてはVirtualPC自体Direct3Dに対応していないためあまり面白くない。

Windows Vista 日本語版 β。メモリを374MBに増やしたらプロダクトキーを認識した。何だこの仕様。それはいいとしてインストールを進めるが,フォーマットができない。これは,VirtualPCの場合だけっぽいけど,VirtualPCのHDではフォーマットができないらしい。とりあえずWindows Server 2003上でフォーマット。その後,インストール中に再びエラー。ハードディスクが16GB以上じゃないと意味不明なエラーが・・・てマジですか。容量可変にしていてもインストール中にがんがんデータ書き込むし。てことで6GBくらいまで増えたのを確認したところで,空き容量が足りなそうなので一旦停止。

物理シミュレータ World Tester1.01を公開。変更点は,高速化と円-円衝突ですり抜けるバグの修正。リビジョンはあまり好きではないので本来なら開発版にするのだが,円-円のすり抜けは明らかにバグなので正式版にした。

WeatherTypingは現状いろいろな仕様のしがらみがあっていじくるのが難しいのだが,こちらは新規なのでしがらみがなくて気が楽。てことで頻繁にバージョンアップしていく予定。

WorldTester。箱と箱の衝突判定に対して分離軸判定を用いるようにする。結果,かなり速くなって,うちの環境だとドミノ倒しで35FPS→62FPS,15パズルで9FPS→47FPSにまで上がった。というか元のコードが遅すぎという話もあるが。

Windows Vista 日本語版 βの案内が来たので会社でインストールを試みるが,プロダクトキーではじかれる。その後β用のNetNewsで,メモリが256MB以下だとダメという記事を見つける。自宅ではダウンロードしていないので月曜日まで試せないのだが,メモリが原因でプロダクトキーではじかれるってのもすごい仕様だ。まあβだから,なんだろうけど。

WorldTester。衝突判定の高速化を目指し,とりあえずOBBの分離軸法を実装中。

WorldTester。4号から「音源がないと起動しない」という報告を受ける。確かに以前,音を鳴らそうと思って音関係の初期化を入れたのを忘れていた。といっても通常の環境なら問題はないと思うので,Ver1.0では制限事項。

恒例の年越しロビー。結構多くの人がいらっしゃっていてありがたいです。


てことで年も変わったので,物理シミュレータ World Testerを公開。略すとWTになるのは偶然ってことで。目指せピタゴラ装置! なんだけどまだまだ先は長い。

毎回一番悩むソフト名前を考えてみる。別に大したソフトでもないので適当でいいんだけど,適当なのが難しい。で,これは! と思った名前は,Googleで調べてみると大抵既にある。考えてみると「Weather Typing」というのは,簡単な単語の割には(日本に限れば)他に見つからないわけで,結構すごい。

物理シミュレーションの実装はほぼ完了。あとはタイトルとアイコンか,という感じでアイコンエディタを起動。したのだが,Visual Studio 2005の[色の設定]ダイアログがどうしようもなくバグっている。アイコンの表示されている領域をクリックするたびにプロパティウィンドウと交互に点滅したり消滅したり,フローティングにすると色項目がなくなって点滅し続けるし。アイコンエディタは何か別のソフトを使うしかないか。

調子に乗ってビリヤード。

2005121901

Visual Studio2005インストール完了。少しは軽くなっているかと思ったけどやっぱり重かった。


円柱-箱とトーラス-箱の当たり判定をサポート。これで当たり判定は一通り実装できた。次は世界のシリアライズか。

Visual Studio2005が公開されたのでダウンロード開始。かなり時間かかりそうだけど。

円柱-レイとトーラス-レイの当たり判定をサポート。トーラス-レイは結局4次方程式を解く必要があるということで解の公式を勉強したり。


MSDNの更新完了。これで来週Visual Studio2005がダウンロードできるようになる,のか?

剛体シミュレーション。操作性を考えてみた。まずはマウスで物体を動かしたいので,2Dの座標値を3Dのレイに変換する方法を調べる。今までビューポート変換とか透視変換とか何となく扱ってきたのだが,このおかげでちゃんと理解できた。

で,それを調べていて,ビューポートを使えば画面分割が簡単にできるというのを知ったので,調子に乗ってステレオグラムにしてみた。下の画像を交差法で見ると立体に見える。これが動画で動いているのを見ると結構感動なわけだが,例によって静止画なのでいまいち。

2005112701

ただ,ステレオグラムは動画を裸眼立体視できる人にはいい感じだけど,そんな人はあんまりいないと思うので公開時は泣く泣く外すか。オプションで残しとこうかなあ。

ともあれ,あとは当たり判定を残り4種類ほど実装すれば最初の構想はほぼ完成。一番やりたかったドミノをマウスで並べて倒すゲームもできるし。

MSDNの更新案内が来た。もうすぐVisual Studio2005発売ということでProfessionalにアップグレード。単純にパッケージで買うだけでも結構な値段になるはずで,それにサーバOSとかSQLサーバとかVirtualPCとかが使えるのを考えれば安い,はず。Vistaが1年以内に発売されるかどうかが気になるけど,まあ気にしても分かんないし。それにしても何でVisualSourceSafeはProfessionalじゃないんだろう。


ついでにNorton AntiVirusも2006にしてみる。フリーソフトを作ってる身としては必須アイテムってことで。

パジさん作のWeatherTypingフラッシュを置いてみた。

DoCoMoの料金変更。携帯電話は持ってても電話+パケット0なので1番安いコースに変更。これで結構安くなるようだが…。それにしても料金変更のサイトはイヤな設計だった。


パジさんがウェザタイフラッシュを送ってきた。今更ながらウェザタイページに載っけようかな。てことでパジさんに修正依頼中。

ようやくトーラスとトーラスの当たり判定ができた。ネット情報などいろいろ合わせ,結局点と円の最短距離計算を何回か繰り返し求めるという方法で現実的な計算量になった。

てところで床,球,箱,円柱,輪っかの相互当たり判定14種類のうち11種類が完成。そろそろ操作性を考える時期かも。


いきなりハードディスクが止まる。何度か起動を繰り返すとようやく正常起動した。とりあえずバックアップを取って様子見。

掲示板の話。DXGetErrorString8がUnknownを返してくるとは。元のコードも表示するようにしておかないとエラーコードが分からなくなってしまうという教訓ということで。


トーラスとトーラスの距離算出について考えているのだが,なかなか奥が深い。ネットでもなかなか見つからないし。結局連立2次方程式を解くしかないのか?

トーラス(輪っか)を実装中。で,トーラスと球,トーラスと円筒の当たり判定は割とすぐにできたので,バイクっぽいものを作ってみた。

2005101001

上の謎物体は3つの物体でできている。1つ目は,大きな輪っかに円柱を刺して真ん中に固定のための球を配置したタイヤっぽいもの。これが前後で2つ。2つ目はタイヤを固定する小さな輪っか4つと擬似人の円柱からなる車体っぽいもの。あくまでも今サポートしている物体だけで表現しようとしたらこうなった。一応走る。

円柱同士の当たり判定を実装。素直に「円-円」「円-線分」「線分-線分」それぞれの当たり判定を実装してみたのだが,場合分けと外積ばっかりで見るからに遅そう。ま,そのうちもっといい方法を使うことにしよう。

掲示板の話。今更ながらリプレイは便利。

滋賀でのタイピング大会って先週終わったのかと思ったら今日らしい。先月ウェザタイを使いたいという連絡があって,断る理由もないので許可してみたらいつの間にか予定日を過ぎてた,みたいな。