SIHOのプログラミングわーくワク

興味の赴くままに勉強してたら、読み書きできる言語は9個になりました。他にもいくつか気になる言語があったりなかったり?  まだまだ続く、楽しいお仕事わーくワク♪

  • « 
  • 10 
  • 11 
  • 12 
  • 13 
  • 14 
  • 15 
  • 16 
  • 17 
  • 18 
  • 19 
  • 20 
  • 21 
  • 22 
  • 23 
  • 24 
  • 25 
  • 26 
  • 27 
  • 28 
  • 29 
  • 30 
  • »

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

OpenNI=1.5.2.23とC#でのUserGeneratorの作り方と現状の問題点

2012.07.19 (Thu)

OpenNI 1.5.2.23&NITE=1.5.2.21でUserGeneratorの作り方が変わっていたのでいちおう、メモ書きしておく。

this.context = Context.CreateFromXmlFile(SAMPLE_XML_FILE, out scriptNode);
this.depth = context.FindExistingNode(NodeType.Depth) as DepthGenerator;
this.user = new UserGenerator(this.context);



こんな風にContextインスタンスを指定してUserGeneratorを作成する。
そのあとStartGenerating()すればよい。

ちなみに、

this.context = new Context();
//デバイスを登録
NodeInfoList deviceNode = context.EnumerateProductionTrees(NodeType.Depth, null);
foreach (NodeInfo node in deviceNode)
{
context.CreateProductionTree(node);
}
//登録されたデバイスを取り出す
NodeInfoList nodeList = this.context1.EnumerateExistingNodes();

foreach (NodeInfo node in nodeList)
{
switch (node.InstanceName)
{
case "Image1":
image = this.context.GetProductionNodeByName("Image1") as ImageGenerator;
break;
case "Depth1":
depth_ = this.context.GetProductionNodeByName("Depth1") as DepthGenerator;
break;
}
}
this.user = new UserGenerator(this.context);



というやり方もある。後者は複数Kinectのときに使う。

けれどここで問題が発生。
userインスタンスは最後にnewしたものだけgenerateが可能のようだ。
※ちなみにUser情報はNITE管轄なのでNITEのドライバが2Kinectに対応していないのかもしれないなっと。
(ただし、これは、1つのWindowでテストしたものなので取得したいuserインスタンス分のWindowを用意してそれぞれのThreadで取得&描画更新を行った場合はまた違う結果が出るかもしれない。もし試した方がいれば教えてください)

ひとつのWindowでuserインスタンスを複数使う実験
1)前の記事のように1つのKinectと同じようにひとつの描画更新フローで組んでみた。
2)Threadを分けてみた→AccessViolationExceptionエラーがでる
 ※Userインスタンスを作っていない状態でもでる。ヒストグラムの計算で出ているので何か書き方がおかしいのかも?
3)描画更新のメソッドを2つ用意して、その中で毎回「this.user = new UserGenerator(this.context);」する
 →これはある程度早いマシンだとOKかも?最初しばらくはエラーなしで動く。けれど、「new UserGenerator()」メソッドは非常に重いので、画面が固まったように見えてMacMiniのBootCamp での Windows 7環境では実用できるレベルにはまったく無い。
 →ただし、描画更新を行った後、必ず「this.user = null;」にしてあげないとNGでした。

というわけで現在のNITEドライバでのuserインスタンスは、少なくともひとつのWindowでは1つしか作れないと考えたほうがよさそうだ。
それでもデバイス列挙ができるCreateProductionTree()が使用可能になったのは大きいので、いまはUser情報を使わない方向で設計を組みなおすかなと。

コメント

コメントの投稿

トラックバック

この記事のトラックバックURL

 | HOME | 

プロフィール

siho_prof

SIHO
しほ

Twitter:
SIHO_o

viva mambo, inc.
iPhone&iPad / Flash / Kinect
使用言語:Objective-C, ActionScript 3.0, Javascript, Lua, PHP, C#, C, C++, WSH。
F-site staff

Solar System Simulator 広報

Web,スマートフォン、Desktopを問わず、アプリ制作が好物。執筆は必要に応じて。お仕事くださいまし。

サイネージ:ガンダムフロント東京・キャラクターフォトスポット設計(2012/4~常設)

アトラクション:富士急ハイランド 戦国BASARA ゲーム設計&プログラミング(2010/7-2012/4にて常設展示)

イントラシステム:「某メーカー研究所KJ法システム」DB,Flash,PHPを含むソリューション設計&DB構築、「美術系専門学校の生徒管理システム」iPadクライアントを含むソリューション設計&DB構築

iPhone/iPadアプリ:某球団試合速報アプリ、『魂を熱くさせる 宇宙飛行士100の言葉』『Mitaka Gallery -てのひら宇宙-』

書籍同梱ソフト:『4次元デジタル宇宙紀行Mitaka』『DVD-ROM&図解 動く! 深海生物図鑑』『DVD-ROM&図解 ハッブル望遠鏡で見る宇宙の驚異』

著書:『世界一わかりやすい Windows 7』『世界一わかりやすい Flash CS3』

検索フォーム

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。