クラウドコン2010のデモツールの開発メモ

6月9日に行われたクラウドコンピューティングコンペティションにHIBIKIというチームで出場し、優勝(IBM特別賞)を頂きました。関係者のみなさま、大変お世話になりました。
公式ページは↓
クラウドコンピューティング コンペティション ・ 主催者企画 | Interop Tokyo 2010
写真がでっかくて恥ずかしいw

発表について

発表は以下のUstからどうぞ。HIBIKIの発表は37、8分のあたりからです。発表しているのはうちの代表です。

今回発表した内容についてはうちの相方がブログに書いているのでそちらを見てください。
情報科学屋さんを目指す人のメモ クラウドコン2010@InteropでチームHIBIKIがグランプリを受賞しました

デモツール

発表の様子を見ていただければわかりますが今回の発表はPowerPointではなく全て自分が作ったデモツールを使用しています。
今回は「XNA Game Studio」で開発しました。
XNA Game Studioは、「Windows」および「Xbox 360」向けのゲームを作成するための開発ツールでMSが無料で提供しているものです。
なんで、そんなものを使ったかというと最初はDirectXOpenGLなどを使おうと思っていたのですがいくつか問題が。
まず、開発に取れる時間があまりない!
作り始めたのは4月頭からなので2カ月以上あったのですが大学等の関係であまり時間が取れないことが分かっていました。このためライブラリなどが充実していてすぐに作り出せるものを探す必要がありました。
また、個人的な趣味ですが新しい言語などを覚える際に多数の小さいサンプルとそれを組み合わせた1つの大きなプログラムがあった方が勉強しやすいです。

この2つの条件を見事にクリアしてくれたのがXNA Game Studioでした。
まず、小さいサンプルは以下のところにまとまっています。

また、大きなプログラムとしては下のものを参考にしました。

↑これはちょっと慣れていないと複雑で読むのが大変ですがすごく参考になります。

XNAを使っていて苦労した点

大量の立方体の表示

デモで1つのノードを表現するのに立方体を表示しています。数個ならば普通に描画しても問題がないのですが、大量に描画しようとすると動作が重くなってしまいます。このため今回はMesh Instancing、具体的にいえばHardware Instancingを使用しています。
詳しくは↓

これによりCPUへの負荷が大幅に減らすことができ、描画がスムーズに進みます。
問題はサンプルが分かりにくいこと。ただでさえ時間がないのにHLSLまで使いだしたときには若干泣きたくなりましたw

曲線の描き方

デモではノード間の通信を表現するのに曲線で線を引いています。この曲線、簡単なようで自前でやるにはかなり面倒です。
しかし!XNAでは曲線を計算してくれるCurveクラスがありす。
実際の使い方は↓

このCurveクラスを使うことで曲線上の点の座標を簡単に計算出来ます。あとは普通にGraphicsDevice.DrawPrimitives()で線を引くだけです。簡単簡単w

最後に

あんまりデモツールを開発することはないような気がしますが、参考になれば幸いです。