あいてぃーとふぼふ

C#ぷりみてぃぶ!#2

日経ソフトウエア 2012年7月号に、「C#ぷりみてぃぶ」の第2話を寄稿させていただきました~!(*≧∀≦)ノ

今回のテーマはコレクション!

.NET Frameworkには、様々なコレクションクラスが用意されています。これらは、C#でプログラミングをする上で欠かすことのできない存在です。そこで今回は、このコレクションクラスの中でも、特に重要な5つのコレクションクラスについて解説をさせていただきました。コレクションクラスは、.NET Frameworkのバージョンと共に機能や種類が変化しています。ですので、意外と知らないコレクションもあったりするのではないでしょうか?特に、セット系のコレクションは比較的新しいクラスなので、リストやディクショナリとの違いを踏まえて使い分けることができると超COOLです!(//∇//)

掘るか…豆るか…

今回は色々と悩みました。といっても別に、めいんの胸の描き方とか、ふたりをいかに絡ませるかなどということは、常日頃の悩みなので、そういうことではありません( ´_ゝ`)

今回は、1つ1つのコレクションをもっと掘り下げて解説するかどうかで悩みました。でもそうすると、あっという間に4ページを使い果たしてしまいますし、なにより内容が冗長になってしまいます。もっとも、コレクションの使い方って、プログラミング経験者ならコードを見れば大体わかると思うんですよね。そこで今回は、個々の解説はそこそこに、実際にコレクションを開発に利用する上で知っておくと便利な豆知識を解説することにしました。初期容量やパフォーマンス云々のお話は、コレクションの利用経験が少ない方にとっては、なかなか知る機会の少ない知識だと思います。ですので、なにか1つでも得られるものがあれば幸いです~(≧ω≦)

とまぁ、そんなことより何よりも。今回のお話で最も大切なことは…
最後のオチだったり。あ…あと骨戦闘員

Kinectでドロイド君を動かそう!(その2)

前回からはじめたこのシリーズも、いよいよ今回が最終回です!∑(´゚Д゚`;)
ということで、こんな感じのサンプルになりました~(*≧∀≦)ノ

普通に扱いやすいです!

本当はもう少し続く予定だったんですが、とりたてて問題もなく完成してしまいました(汗 もちろん、ご覧のように紆余曲折はあったんですが、原因はどれも計算ミスによるものだったので、割愛させていただきます。キネクト自体は驚くほど扱いやすく、それは「Kinect for Windows SDK」のAPIが扱いやすいということでもあります。ただ、まだまだ機能が少ないために全体像を把握しやすかったというのが一番の理由かもですね。APIの少ない今が習得のチャンスです♪

多少の不満はあるけれど!

それでも、キネクトに抱いた不満はいくつかあります。1つめは骨格情報のミラーリングがサポートされていないということです。ただし、これは実装側でデータを変換すれば(X座標を入れ替えれば)よいだけなので、大きな問題ではありません。2つめは、関節の情報が三次元座標だけということです。これも、関節の角度を実装側で割り出せばいいだけなので、やっぱり大きな問題ではありませんでした。けれど、欲を言えば関節の向きも取得できたら嬉しいです。この向きが取得できないと、前向きか後ろ向きかはもちろん、身体をくるりと一回転するような動きをトレースできません。もちろん、実装側で顔認識とか関節座標の履歴を保持すればどうにかできなくもなさそうですが、実装がカオスになりそうなので…(汗 3つめは、デバッグがしにくいことで、確認のたびにポーズをとるのは大変でした。でもこれは、今月末に公開予定のSDK v1.5で改善されるというお話ですので、今から楽しみにしています~(o*゚ー゚)o

それでもここまでできちゃいます!

自分の動きに合わせて、リアルタイムに3Dモデルが動くというのは、個人的にとても新鮮な感動です!惜しむらくはこれが…ドロイド君であって窓辺さんではないことですが…。このように、一見するとおぉ~な感じ(?)のキネクトアプリも、実装自体は大したことありません。これからリファクタリングを行いますが、コメントをふんだんに盛り込んだとしても500行には満たないかなと。リファクタリング中に気付いたことや思い出したことがあれば、またブログに書いていきたいと思います。とにかくもう、キネクトは本当に簡単で面白いです!
ネタに選んで大正解でした♪(。´ゝω・)

ソースコードは夏コミで!

このサンプルの3Dモデルとソースコードは夏コミの同人誌のオマケとして配布する予定(当選すれば)です。ぜひとも在庫の撲滅にご協力ください!他にもサンプルを作成したら、併せて配布しちゃいます。時間があれば、次は3Dスキャナーモドキを作ったり、音声認識を検証してみたいですね。

Kinectでドロイド君を動かそう!(その1)

今回からしばらくの間、「Kinect for Windows」を利用して、思い通りに3Dモデルを動かすサンプルの開発に挑戦してみたいと思います。いわゆるひとつの「モーションキャプチャー」的なサンプルです。できればホントは「窓辺さんの3Dモデル」を動かしたかったんですが…お高いので代わりのモデルを用意することにしました(´・ω・`)

ハイエンド・ドロイド!

ということで今回は、窓辺さんの代わりに「ドロイド君」の3Dモデルを動かすことにします!(*`Д´*)ノ でも、どうせなら普通のドロイド君では物足りません。そこで今回は、驚異の7000ポリゴンオーバーで作成したハイエンドなドロイド君…つまり「ハイエンド・ドロイド」を利用します~!なんということでしょう!曲面やエッジの成形にポリゴンを贅沢に使用しています。しかもこのドロイド君…スゴイのはポリゴン数だけではありませんよ?( ̄ー ̄)

スキニング・ドロイド!

何と!こいつ…動くぞKinectから取得できる骨格情報を参考に、ボーンを仕込んで動くようにしてみました。個人的なこだわりポイントは、頭と胴体の間に「首」となるポリゴンを仕込んだことです。これによって頭を動かすと首が口のように見えるので、なんだかとってもチャーミング♪最終的にKinectでこのポーズが取れれば目標達成です!

使えるものは流用すべし!

ご覧のようにこのドロイド君は、肘や膝が人間の肌みたいに「グニャリ」と動きます。こういう3Dモデルのことを「スキニングモデル」というんです。C#でスキニングモデルを扱う場合は、AppHubで公開されているXNAの「スキニング モデル」というサンプルを参考にすると便利です。今回もこのサンプルを一部参考にして、Kinectで3Dモデルを動かすサンプルを開発していきたいと思います。

意外と情報が少ない?

しかし…この手のサンプルってネットで全然公開されていないんですね。ネタがありきたりすぎるかと思っていましたが、意外とそうでもないみたいです。単純に骨格を描画しているサンプルはよく見かけるんですが、あれってあくまで2D画像として骨格を描画しているので、実はとっても簡単なんです。SDKのAPIには、骨格と画像をマッピングするAPIも用意されていますしね。けれど、骨格を3Dモデルにマッピングさせようとすると、一筋縄ではいきません。行列とか行列とか行列とか…考えただけでも面倒くさそうです…ノ乙(、ン、;)

なお、サンプルが完成した暁には、3Dモデルとソースコードを同人誌のオマケとして配布する予定ですので、在庫の撲滅にご協力ください♪

Kinect for Windowsを購入しました!

今度の夏コミ(当選すればですが…)のネタ用に「Kinect for Windows」を購入しちゃいました~♪(*≧∀≦)ノ

話題のNUIデバイス

Kinectは、マイクロソフトが開発したセンサータイプの入力デバイスです。手を触れずに、身振りや音声で操作することのできる「NUI(ナチュラル・ユーザ・インタフェース)」と呼ばれるタイプのアプリケーション開発に利用できます。Xbox360用のKinectが発売されたのは2010年11月なので、ずいぶん遅めのデビューになってしまいましたが、しばらくはこのKinectを検証していきたいと思います。

実売価格は2万円弱

「Kinect for Windows」の希望小売価格は2万4千800円です。ただし、発売から3か月ほど経過した現在は実売価格が2万円を下回るようになってきました。なにやら最近は「Kinect for Windowsスペシャルパック」といった、窓辺ななみさんとクラウディアさんの3Dモデルが同梱されているパックも発売されているみたいです。…が、ついでにDSP版のWindows7までついてくるので、お値段もお高いんですよねぇ。できれば上記の3Dモデルを検証に利用していきたかったのですが…さすがに趣味で出せる値段ではありませんのでションボリです(´・ω・`)

Kinectを夏コミのテーマに選んだ理由は…また別途お話しするとして、まずは開発環境の構築から始めて行きたいと思います!(ゝω・`)

GWの終わりから始まるモノ

ゴールデン・ウィークが終わった後から始まるものって…何だと思いますか?もちろん、仕事もそうですね~(T△T)でも、二次元と三次元の狭間に生きる我々にとって、もっと大切なことがあるはずです。それは…

今までの経験を活かして…

そうです、答えは夏コミの準備です。ご存じの通り、コミケにサークル(売り手)として参加できるかどうかは、抽選式になっています。夏コミの場合、当落が発表されるのは6月なので、まだ半月以上も先なのです。ですが、当落発表を待ってから動き始めると…たいがい痛い目を見ます。そこで今年は、GW明けから早々に夏コミの準備を始めることにしました!(`・ω・´)b

ネタはいろいろあるけれど…

ということで、現在は「ネタ」を思案中です。今年こそはしっかりと、開発者向けの同人誌を作成するのが目標です!幸いなことに、最近は色々な話題がありますので、ネタには全く事欠きません。例えば「Windows 8」と「Visual Studio 11」による「Metro style apps」あたりは旬なネタですよね~!ところが、私はスレートPCを持っていないので、これらの真価を検証することができません。

Windows 8の解像度って…

もちろん、スレートPCの中には安価なものもあるわけですが、Windows 8 でMetroアプリを利用する場合、選択肢は極端に限られます。そもそも、Windows 8における解像度の最低要件は「1024×768 (XGA)」だそうなので、比較的安価なスレートPCではこの要件を満たせません。さらに、Windows 8をタブレットとして使用する場合、上記の解像度にタブレット機能用のスナップ領域(?)を加算した「1366×768(FWXGA)」が最低要件となります。はふん。この条件を満たすスレートPCって、現状ではオイソレと買える値段じゃない(10万前後)んですよねぇ…。かといって、マルチタッチ対応ディスプレイとかで代用するのは、Windows 8やMetroアプリの方向性と少し違う気がしますし。

結局ふりだし!

ということで、これらのネタは引き続きアンテナを張りつつ、夏コミのネタには別の何かを考えないとマズそうです…orz