tag:blogger.com,1999:blog-90478950923621192032024-03-14T20:19:18.524+09:00sd-techUIデザインまわりのTips
Flash,as3,wii,kinect,タッチパネル,インターフェース,ui,google,apple,
interface,design,デザインfukusinhttp://www.blogger.com/profile/02654126877276758457noreply@blogger.comBlogger22125tag:blogger.com,1999:blog-9047895092362119203.post-90855453010223005672011-06-07T18:47:00.000+09:002011-06-07T18:47:12.108+09:00[Kinect] カナダ医療チームが「Kinect」を現場採用<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKyO48hdxlwZZxC3D2slYkOf0SIQ7YPLZRMqctM98fhHV8T1rTgIIGJAH142HA0s1Kz_gGeeQANGSR9DuNAHFrJogNostj0GW3HTZf7MGSX7_pJikvyvhG-VI8AncUXMvcO67w0piGk_Rq/s1600/01.jpeg" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKyO48hdxlwZZxC3D2slYkOf0SIQ7YPLZRMqctM98fhHV8T1rTgIIGJAH142HA0s1Kz_gGeeQANGSR9DuNAHFrJogNostj0GW3HTZf7MGSX7_pJikvyvhG-VI8AncUXMvcO67w0piGk_Rq/s320/01.jpeg" width="320" /></a><br />
Kinect使ってMRIやCRTスキャンの画像を操作できるようです。<br />
これからいろんな現場でジェスチャー操作ができるようになるんでしょうか。<br />
<br />
<iframe width="560" height="349" src="http://www.youtube.com/embed/f5Ep3oqicVU" frameborder="0" allowfullscreen></iframe><br />
<br />
元記事:<a href="http://gigazine.net/news/20110407_xbox_kinect_hospital/">Gigazin-カナダの医療チームが「Kinect」を外科手術の現場で採用、執刀医の作業負担を大幅に削減</a>fukusinhttp://www.blogger.com/profile/02654126877276758457noreply@blogger.com0tag:blogger.com,1999:blog-9047895092362119203.post-78862639885534125672011-05-19T18:56:00.010+09:002011-05-24T15:21:08.443+09:00素数アプリ「Panasonic Prime Smash!」(動画)素数を数えて落ち着くんだ!!<br />
素数を楽しく覚えるiPadアプリを作りました。<br />
出てきた数を素数になるまで割っていくアクション性の高いゲームになっています。<br />
<br />
<a href="http://risupia.panasonic.co.jp/">リスーピア</a>で人気のアトラクション「素数ホッケー」をiPad用に進化させました。<br />
素数コレクションというやり込み要素もあるので、<br />
素数が好きな方はぜひプレイしてみてください!<br />
<br />
<object height="344" width="425"><param name="movie" value="http://www.youtube.com/v/W1JRwSoTKaQ?hl=ja&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/W1JRwSoTKaQ?hl=ja&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br />
<br />
<object height="344" width="425"><param name="movie" value="http://www.youtube.com/v/biNqOwIvVqA?hl=ja&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/biNqOwIvVqA?hl=ja&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br />
<br />
Unityで開発しましたが、<br />
UnityだとiPhone/iPadアプリが楽に作れますね。<br />
<br />
ちなみにボクのベストスコアは26169pts。<br />
26169は素数…ではありません。ざんねん!<br />
<br />
<br />
<img border="0" height="72" width="72" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgP4sa0cKoDLC5y9NNXsrIO6N82b8E4N_5oDOQ9cg3t4Ez4-tXJeFiBbELo2cwB6LMsjzAIxf2b9rqJT_R8tkF7CYca1VJ1h7qJUowv2f0JXDVb39Cm2wKE4aYOFyBu0YrFQhIDJ7HosqV9/s200/prime_72px.jpg" /><br />
<b>Panasonic Prime Smash! (無料)</b><br />
<i>タッチして、スマッシュして、<br />
楽しく素数を覚えよう!<br />
<br />
Panasonic Prime Smash! は<br />
素数を楽しみながら素数を学べる<br />
新感覚のゲームです</i><br />
<a href="http://panasonic.net/apps/jp/#h201">http://panasonic.net/apps/jp/#h201</a>fukusinhttp://www.blogger.com/profile/02654126877276758457noreply@blogger.com0tag:blogger.com,1999:blog-9047895092362119203.post-83936071502708380692011-04-09T12:03:00.000+09:002011-04-09T12:03:41.652+09:00Androidマーケットへの登録<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGY1LkaZ2X-Jya_fVYj-1WhbZ5LedwPaUfwvmZQWnFsFTs19DGOg-EkPznCCrh4WBai5CcGyVeMTJlDZ5dqhXo8ci7LKyoLzzYPgZrdK9FLopt27tewG7MjY5EmS6aYVc9a-xgmOBmz1hF/s1600/compass_capture.jpeg" imageanchor="1" style=""><img border="0" height="320" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGY1LkaZ2X-Jya_fVYj-1WhbZ5LedwPaUfwvmZQWnFsFTs19DGOg-EkPznCCrh4WBai5CcGyVeMTJlDZ5dqhXo8ci7LKyoLzzYPgZrdK9FLopt27tewG7MjY5EmS6aYVc9a-xgmOBmz1hF/s320/compass_capture.jpeg" /></a></div><br />
スムースに動作するコンパスアプリが欲しかったので、自分で作ってマーケットに登録してみました。<br />
GLSurfaceView(openGL)を用いてスムースな動作を目指してます。トレードオフとして、起動が少し遅いですが…<br />
もし興味のある方は<a href="https://market.android.com/details?id=net.zehai.Compass&feature=search_result">こちら</a>からどうぞ。<br />
<br />
<b>※あくまで個人製作ですので、要望やバグ報告はマーケットに登録してあるメールアドレスからお願いします</b><br />
<br />
登録の際、少しはまったところを挙げておくと…<br />
<br />
<b>■マーケットに表示されるアプリアイコンがデフォルトのまま</b><br />
<br />
これは、リソースのdrawable-hdpiにのみアプリアイコンを入れていて、他のdrawable-mdpiとdrawable-ldpiにはデフォルトアイコンが入っていた事が原因でした。<br />
<br />
<b>■IS03で画像(テクスチャ)が表示されない</b><br />
<br />
drawable関連でもう一つ。<br />
IS03は特殊な解像度なので、drawable-320dpiというリソースフォルダを作成し、その中に対応する画像を入れる必要があります。SDK2.3からはdrawable-xdpiというリソースフォルダが使用できるようです。<br />
<br />
<b>■全年齢対象に出来ない</b><br />
<br />
はまったところではありませんが、現在地を取得するアプリは全年齢対象アプリに出来ないようです。<br />
今回、コンパスの真北を取得するために現在地の取得を行っているので、それが原因でした。<br />
<br />
<br />
さて、Googleにデベロッパーとして登録するとデベロッパーコンソールというページが使えるようになるのですが、これが凄く便利です。<br />
<br />
<b>■統計情報の表示</b><br />
<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqQMoBrYbkE6-9Q2yCph0jZc_SErCh37xrWiWMRRltr5J_xe0G1Mp6XbIczVZERVqA82Fbbxp5ywcep-Xqh9sEAUngQU5zPZvU_lWI1aBlVE6gA2X4ervVbU2ZP0tTFbcc_9C961fBreCK/s1600/console_1.png" imageanchor="1" style=""><img border="0" height="276" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqQMoBrYbkE6-9Q2yCph0jZc_SErCh37xrWiWMRRltr5J_xe0G1Mp6XbIczVZERVqA82Fbbxp5ywcep-Xqh9sEAUngQU5zPZvU_lWI1aBlVE6gA2X4ervVbU2ZP0tTFbcc_9C961fBreCK/s320/console_1.png" /></a></div>さすがGoogleといった感じで、インストールされたプラットフォーム、端末、有効なインストール数、国等の情報をグラフ表示してくれます。<br />
<br />
<br />
<b>■詳細なバグレポート</b><br />
<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLHvBAL0l7NS3H71Cio_igWw4Se_tUqZc8-3k8OdV50snhb8pA5JIWknLShmLCb0VXOMu1iBlXNZS4oY7pSiZuriV8W4HcP94DNwQkcPCdpgNvw1SzP5QQyNEE8mUg-JgEsRy_4wh2I7-u/s1600/console_2.png" imageanchor="1" style=""><img border="0" height="197" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLHvBAL0l7NS3H71Cio_igWw4Se_tUqZc8-3k8OdV50snhb8pA5JIWknLShmLCb0VXOMu1iBlXNZS4oY7pSiZuriV8W4HcP94DNwQkcPCdpgNvw1SzP5QQyNEE8mUg-JgEsRy_4wh2I7-u/s320/console_2.png" /></a></div>一番驚いたのはここ。<br />
アプリごとのエラーレポートを見る事が出来、その中ではエラーの発生時間、種類はもちろんのこと、なんとどのクラスの何行目でエラーが起こっているかも見る事が出来ます。開発時にLogCatでログ見ているとエラーが起きた時に内容が表示されますが、その内容がそのままデベロッパーコンソールで見る事が出来るイメージです。<br />
開発者には嬉しい仕様ですね。<br />
<br />
これだけ充実していると、また何か作りたくなってきてしまいますね。soumihttp://www.blogger.com/profile/13715617615138609870noreply@blogger.com0tag:blogger.com,1999:blog-9047895092362119203.post-35853603153336686192011-04-09T11:26:00.000+09:002011-04-09T11:26:26.267+09:00EclipseにAndroid SDKのサンプルを読み込んで、警告を消すAndroid SDKにはGoogle製のサンプルがいくつもついてきます。<br />
Androidアプリを開発する時にはEclipseを使う事が多いと思いますが、Eclipseにそのサンプルを読み込む方法と、そのままでは警告が出てしまいますので、それらを消す方法をご紹介します。<br />
<br />
<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_tglzYdy7jpchPTLjU223lK4FKUmE4e8rjXpw_Gzhh6YW43ha7cdIlmM_2-ku1uepTkivoH-jb1YSB-3p9eW8FN2cJsV91TK_lI8TREJZvCnpAggZ2cOVzZ88P5EHvIeSz9bebCws3AEN/s1600/add_project.png" imageanchor="1" style=""><img border="0" height="306" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_tglzYdy7jpchPTLjU223lK4FKUmE4e8rjXpw_Gzhh6YW43ha7cdIlmM_2-ku1uepTkivoH-jb1YSB-3p9eW8FN2cJsV91TK_lI8TREJZvCnpAggZ2cOVzZ88P5EHvIeSz9bebCws3AEN/s320/add_project.png" /></a></div><br />
まず、新規プロジェクトを作成し、Androidプロジェクトを選択します。<br />
<br />
<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeKn8_a56pJL2NPCiR96eSeliL93gJVMABbGxToA0sQdNMC9BToPyED7IYvOH2DvZi4nG1iZ-HzvJljO7By_0SdQRUm5Riv-9NVwe3hHfm-xncPBCDoUazz4p55IVgkn4qmLQPnwpL0aR8/s1600/sample_project.png" imageanchor="1" style=""><img border="0" height="320" width="189" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeKn8_a56pJL2NPCiR96eSeliL93gJVMABbGxToA0sQdNMC9BToPyED7IYvOH2DvZi4nG1iZ-HzvJljO7By_0SdQRUm5Riv-9NVwe3hHfm-xncPBCDoUazz4p55IVgkn4qmLQPnwpL0aR8/s320/sample_project.png" /></a></div><br />
ここで、普通であればパッケージやアプリ名等を入力して新規プロジェクトを作成しますが、「既存サンプルからプロジェクトを作成」から、インポートしたいサンプルを選択します。ただし、この項目はビルドターゲットを先に指定しておかないとアクティブにならないので、先に指定しておきます。<br />
あとは、完了を押すとEclipseにサンプルプロジェクトがインポートされます。<br />
<br />
<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAL5JTCZInVp_ntMpg_wf3RUgV6boxCzCbq4Ir1TxQeqCTIK5cNp5QF7QP2unSr_qXKoBwnU4hn1o3bpQgWuOtnPH5-kGnMC9Z2dBVOoWh8UMNlZdkFcfHLB51V0PyCB6-h6rgsj6ZQ-36/s1600/error.png" imageanchor="1" style=""><img border="0" height="184" width="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAL5JTCZInVp_ntMpg_wf3RUgV6boxCzCbq4Ir1TxQeqCTIK5cNp5QF7QP2unSr_qXKoBwnU4hn1o3bpQgWuOtnPH5-kGnMC9Z2dBVOoWh8UMNlZdkFcfHLB51V0PyCB6-h6rgsj6ZQ-36/s320/error.png" /></a></div><br />
さて、そのままでも問題なくビルドして端末にインストールできるのですが、上のキャプチャのように警告が大量に出てきます。<br />
Eclipseはデフォルトではプロジェクトを横断して警告を表示してくるので、他のプロジェクトを進めているときでもこの警告が表示され、自分のプロジェクトでの警告やエラーがそれらに埋もれてしまいます。<br />
<br />
ここでは、下記2つの対策を紹介します。<br />
<br />
<br />
<b>■選択プロジェクト上のエラー/警告のみ表示する</b><br />
<br />
<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiBx_o2ioTly1AQ-2md5RNl1QaSdGtSvvRs5tCX2ojNGpXgdF0SUNbF6VYMIuhX2HIz-RJE3IjKnETN0wztc6MTTAdMF_tMOw36zEh0QmiSF4k2uu6lHt4wnHpySnHCr5L3UDyJ0norwhB/s1600/error_on_project.png" imageanchor="1" style=""><img border="0" height="134" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiBx_o2ioTly1AQ-2md5RNl1QaSdGtSvvRs5tCX2ojNGpXgdF0SUNbF6VYMIuhX2HIz-RJE3IjKnETN0wztc6MTTAdMF_tMOw36zEh0QmiSF4k2uu6lHt4wnHpySnHCr5L3UDyJ0norwhB/s320/error_on_project.png" /></a></div><br />
項目名通り、選択しているプロジェクトのエラー/警告のみが表示されます。<br />
警告が表示される「問題」タブの右上、▼マークをクリックし、上の画像のように「表示」->「プロジェクト上のエラー/警告」を選択します。<br />
<br />
<br />
<b>■プロジェクト単位でエラー/警告を無視する</b><br />
<br />
<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUPvDwE-UeQODOp3WBtrODJIorALvoyO87sLOmgeqVdY7olZ4yJH2gbPcbrLjlLfEAxPfF-fG0bA8XaKIqIzbDi41JzVKowuHYpRphIoza4rV3JGJifIsNP9r29vGLxVhaGJ99ZCy9R_iD/s1600/prefs.png" imageanchor="1" style=""><img border="0" height="255" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUPvDwE-UeQODOp3WBtrODJIorALvoyO87sLOmgeqVdY7olZ4yJH2gbPcbrLjlLfEAxPfF-fG0bA8XaKIqIzbDi41JzVKowuHYpRphIoza4rV3JGJifIsNP9r29vGLxVhaGJ99ZCy9R_iD/s320/prefs.png" /></a></div><br />
こちらの方法では、サンプルプロジェクトのエラー/警告のみを無効にします。<br />
<br />
読み込んだプロジェクトのプロパティを開き、「Javaコンパイラ」->「エラー/警告」を選択します。<br />
「プロジェクト固有の設定を可能にする」にチェックを入れ、必要な項目を「無視」に変えていき、OKを押すとプロジェクトのビルド後に変更が適用されます。<br />
Google製のコードですし、コピペはあっても基本的にはソースを直接変更する事は無いと思いますので、全部無視で良いと思います。<br />
<br />
<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP3v3dTMEfIqKHQO-EAO0cI2urrMdwoJi9hm5jecUNHM462VDPydGN72g9LeYw2pmw9tvhE4LdOaFvADvAFBEGC8ZHm6MBYfh1lKxBhORJIIw7L_5F5CHly1m9tYFMAyPta3Iu6Tv4wiB3/s1600/after.png" imageanchor="1" style=""><img border="0" height="169" width="267" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP3v3dTMEfIqKHQO-EAO0cI2urrMdwoJi9hm5jecUNHM462VDPydGN72g9LeYw2pmw9tvhE4LdOaFvADvAFBEGC8ZHm6MBYfh1lKxBhORJIIw7L_5F5CHly1m9tYFMAyPta3Iu6Tv4wiB3/s320/after.png" /></a></div><br />
サンプルの中では、ApiDemoが便利ですね。簡単にですが、何ができるか知る事が出来ます。<br />
サンプルプロジェクトも結構多いので全部を網羅するのは大変そうですが、ちょくちょくのぞいてみると面白いかもしれませんね。soumihttp://www.blogger.com/profile/13715617615138609870noreply@blogger.com0tag:blogger.com,1999:blog-9047895092362119203.post-8149882352788799772011-04-09T11:02:00.000+09:002011-04-09T11:02:52.691+09:00Androidでセンサーから方位を取得する<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGmSk_PZ4LJFMmlKLQOU0cLfGzOIftkZef6R0KrV9fvDsP45sQH_YV8OZl5nv5t6t39fVUAAIqsNHeY1YgsPGZR43d-wdXdyUh6cKBtT_gi8LCx-Vi2wy2UQziisaeTIz2gB26yZM-fJaG/s1600/compass.png" imageanchor="1" style=""><img border="0" height="257" width="257" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGmSk_PZ4LJFMmlKLQOU0cLfGzOIftkZef6R0KrV9fvDsP45sQH_YV8OZl5nv5t6t39fVUAAIqsNHeY1YgsPGZR43d-wdXdyUh6cKBtT_gi8LCx-Vi2wy2UQziisaeTIz2gB26yZM-fJaG/s320/compass.png" /></a></div>最近ネイティブAndroidプログラムに手を出しています。<br />
FlashのAS3を触っていると、AndroidのJavaはあまり敷居が高くなく感じますね。whileの挙動とか、イベントリスナの登録あたりはちょっと違いますけど。<br />
イベントリスナの登録は、AS3でいうNetStraemのonMetaDataハンドラの扱いに似ていますね。ただ、Javaの方はインターフェイスで強制実装させるあたり、厳格になっています。<br />
<br />
さて、本題ですが、Androidでコンパスを作成する時の話です。<br />
コンパスを作成するにあたってセンサの値を取ってくる必要があるのですが、他のセンサーと同じようにSensorManagerから読み出す事で使用する事が可能です。<br />
<br />
<pre class="brush:java" title="Compass.as">public class Compass extends Activity implements SensorEventListener{
private SensorManager sm;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sm=(SensorManager)getSystemService(SENSOR_SERVICE);
}
@Override
protected void onResume() {
super.onResume();
//全センサを取得
//List<Sensor> sensors = sm.getSensorList(Sensor.TYPE_ALL);
//加速度センサ
//List<Sensor> sensors = sm.getSensorList(Sensor.TYPE_ACCELEROMETER);
//磁気センサ
//List<Sensor> sensors = sm.getSensorList(Sensor.TYPE_MAGNETIC_FIELD);
//方位センサ
List<Sensor> sensors = sm.getSensorList(Sensor.TYPE_ORIENTATION);
for(Sensor sensor : sensors){
//イベントを登録
sm.registerListener(this, sensor, SensorManager.SENSOR_DELAY_GAME);
}
}
…
}
</pre><br />
Sensor.TYPE_ORIENTATIONが方位センサのタイプ定数になります。<br />
ただ、<a href="http://developer.android.com/reference/android/hardware/Sensor.html#TYPE_ORIENTATION">このタイプは現在非推奨となっており</a>、Android2.2からは<a href="http://developer.android.com/reference/android/hardware/SensorManager.html#getOrientation(float[], float[])">SensorManager.getOrientation()</a>が推奨されます。使い方としては、上記の方法で加速度と地磁気センサの値を取得し、それらの値から然るべき方位を計算する、という形になります。<br />
<br />
<pre class="brush:java" title="Compass.as">//SensorEventListenerにより実装が要求されるメソッド
public void onSensorChanged(SensorEvent event) {
float[] amv=new float[3];
float[] mfv=new float[3];
float[] orv=new float[3];
switch(event.sensor.getType()){
case Sensor.TYPE_ACCELEROMETER:
amv=event.values.clone();
break;
case Sensor.TYPE_MAGNETIC_FIELD:
mfv=event.values.clone();
break;
}
float[] in_r=new float[16];
float[] out_r=new float[16];
if(amv!=null && mfv!=null){
SensorManager.getRotationMatrix(in_r, null, amv, mfv);
SensorManager.remapCoordinateSystem(in_r, SensorManager.AXIS_X, SensorManager.AXIS_Z, out_r);
SensorManager.getOrientation(out_r, orv);
Log.d("message", String.valueOf(orv[0]));
Log.d("message", String.valueOf(orv[1]));
Log.d("message", String.valueOf(orv[2]));
}
}
</pre><br />
ただ、このまま実装すると、<a href="http://developer.android.com/reference/android/hardware/SensorManager.html#remapCoordinateSystem(float[], int, int, float[])">リファレンスにもある通り</a>特定の状態でしか正しい方位を取得できません。<br />
<br />
<blockquote>Using the camera (Y axis along the camera's axis) for an augmented reality application where the rotation angles are needed:<br />
<b>remapCoordinateSystem(inR, AXIS_X, AXIS_Z, outR);</b></blockquote><br />
画面が自分から見て手前側に傾いている時は正しく方位が見えますが、向こう側に傾いている時は方位が反転してしまいます。これを調整するにはremapCoordinateSystemの第二、第三引数を調整すると良いのですが、例えば横向きにする時には<br />
<br />
<blockquote>Using the device as a mechanical compass when rotation is Surface.ROTATION_90:<br />
<b>remapCoordinateSystem(inR, AXIS_Y, AXIS_MINUS_X, outR);</b></blockquote><br />
とすれば良いようです。<br />
<br />
これを、端末の向きによらず正しい方位を取得するようにしたかったので、色々試してみた結果<br />
<br />
<b>remapCoordinateSystem(inR, AXIS_X, AXIS_Y, outR);</b><br />
<br />
を使用すると端末の向きによらず正しい方位を取得する事が出来ました。<br />
<br />
ただし、iPhoneでもそうですが、寝転がってコンパスを見ると正しい方位が表示されません。まぁ、そんなことをする人はあまりいないと思いますが…soumihttp://www.blogger.com/profile/13715617615138609870noreply@blogger.com0tag:blogger.com,1999:blog-9047895092362119203.post-6924477494468091182011-03-02T11:49:00.000+09:002011-03-02T11:49:49.408+09:00Unity3DがFlash上で動くようになる?<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9dmU0Kcmkcu4OG_jRF0aRQxSkVJeuwH8AWIU0n1xYmzhHD7hiKBLq6HLfVykK3w6XAyXFPQQmdTFXr4am7HoGONWNIEtSuCgPSFVOH_zAs562EozppfSgT9eEwfYEKkp9mp5__WmPNyGV/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%25EF%25BC%25882011-03-02+10.31.46%25EF%25BC%2589.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9dmU0Kcmkcu4OG_jRF0aRQxSkVJeuwH8AWIU0n1xYmzhHD7hiKBLq6HLfVykK3w6XAyXFPQQmdTFXr4am7HoGONWNIEtSuCgPSFVOH_zAs562EozppfSgT9eEwfYEKkp9mp5__WmPNyGV/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%25EF%25BC%25882011-03-02+10.31.46%25EF%25BC%2589.png" /></a></div><span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms'; font-size: 13px; line-height: 20px;"><a href="http://blogs.unity3d.com/2011/02/27/unity-flash-3d-on-the-web/">Unity Technologies Blog</a></span><span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms'; font-size: 13px; line-height: 20px;">によると、UnityからFlashへの書き出しを検討しているようです。</span><br />
<span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms'; font-size: 13px; line-height: 20px;"> リリース時期やサポートされる3D機能等は明言していないですが、<br />
開発は順調に進んでいるようです。<br />
<br />
FlashPlayer11から搭載されるGPU描画可能な"3D API (<a href="http://labs.adobe.com/technologies/flashplatformruntimes/incubator/features/molehill.html">Molehill</a>)"を利用したものになるので、<br />
FlashPlayer11がリリースされた後に正式発表でしょうか。<br />
ちなみにFlashPlayer11は2011年前半にベータ版リリース予定です。<br />
<br />
もしこれが実現すれば、Flash単体での3Dオーサリングより手軽に作れるようになるんでしょうか。<br />
ゲームの3D部分はUnity、メニュー等の2D部分はFlashという作り方ができるとベストなんですが! </span><br />
<br/>fukusinhttp://www.blogger.com/profile/02654126877276758457noreply@blogger.com0tag:blogger.com,1999:blog-9047895092362119203.post-71316170839812155462011-02-23T21:55:00.004+09:002011-03-10T15:33:04.394+09:00QLColorCodeを使用してASファイルをクイックルック(Mac OS 10.6 Snow Leopard)<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisSkXlU6WFUmzulkS41kcGoqenhuGlKnMlTbWIWdqMD2xwl3nmhYDZqwGpKU-7qpcXJnAlwrp-FvNOr_Lw1uVBJ80lutNd7MD3mf3o6EhCDdICHdGg_KmkWyg6wt1JrKwwQh53upgznWG5/s1600/image1.png" imageanchor="1" style=""><img border="0" height="211" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisSkXlU6WFUmzulkS41kcGoqenhuGlKnMlTbWIWdqMD2xwl3nmhYDZqwGpKU-7qpcXJnAlwrp-FvNOr_Lw1uVBJ80lutNd7MD3mf3o6EhCDdICHdGg_KmkWyg6wt1JrKwwQh53upgznWG5/s320/image1.png" /></a></div><br />
クイックルックでASファイルの中身を見れる、QLColorCodeというプラグインがあります。<br />
僕も愛用しているのですが、会社のOS10.5ではASファイルを見れるのに、同じプラグインをコピーしても家の0S10.6で見れませんでした。<br />
色々と調べて、QLColorCodeを使用してOS10.6でASファイルをクイックルックする方法を見つけましたので、投稿しておきます。<br />
導入に関しては、自己責任でお願いしますね。<br />
<br />
QLColorCodeを導入する手順については、以下のサイトが詳しいです。<br />
<a href="http://d.hatena.ne.jp/beehive62/20100802/1280739114">QuickLookでソースをカラーリング:QLColorCodeの改良.</a><br />
<br />
上記サイトの通りにインストールすると、日本語も正常に表示され、改行コードに関するバグも直ります。<br />
ですが、OS10.6の場合ASファイルがクイックルックで見れません。<br />
これを直すには、<b>QLColorCode.qlgenerator内の「Info.plist」を編集すると良いようです。</b><br />
<br />
<a href="http://tekkie.flashbit.net/flash/as/enable-quick-look-of-actionscript-and-flex-files-on-snow-leopard">Enable Quick Look of ActionScript and Flex files on Snow Leopard</a><br />
<br />
上記サイトを見ると、以下の手順でASファイルのクイックルックを有効にできるようです。<br />
<br />
<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3HPx2iFp8RPUiBuOmM4HxLbCiHSi4hXOJHCub_uY58qUAnCtziZ0i8eI6D9BSHgSB97F3tO9VFFIp5nD1ESiPK9y1Rd1eVGpGFxOIeDzNgFk_SsT4iWOFTxh_Uk8Cfu1euJ0CNp50Qz-M/s1600/image2.png" imageanchor="1" style=""><img border="0" height="232" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3HPx2iFp8RPUiBuOmM4HxLbCiHSi4hXOJHCub_uY58qUAnCtziZ0i8eI6D9BSHgSB97F3tO9VFFIp5nD1ESiPK9y1Rd1eVGpGFxOIeDzNgFk_SsT4iWOFTxh_Uk8Cfu1euJ0CNp50Qz-M/s320/image2.png" /></a></div><br />
1)インストールしたQLColorCode.qlgeneratorを右クリック->「パッケージの内容を表示」します。<br />
2)Contents/Info.plistをテキストエディタで開きます。<br />
3)<key>LSItemContentTypes</key>と書いてある直下の<array>に、com.apple.applesingle-archiveを追加します。<br />
以下のような感じになります。<br />
<br />
<pre class="brush:xml" title="Info.plist"><dict>
<key>CFBundleTypeRole</key>
<string>QLGenerator</string>
<key>LSItemContentTypes</key>
<array>
<string>public.source-code</string>
<string>public.xml</string>
<string>com.apple.property-list</string>
<string>org.tug.tex</string>
<string>public.plain-text</string>
<string>com.apple.applesingle-archive</string>
</array>
</dict>
</pre><br />
<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqVlloODpBsQzmqYzi0GTxsvNZV2GlGpupaEwrSPnbMhr-kcxgawA_te7Gj8IEqmdcGMyigXfPh_Ybfs4fylNM0Lad1DZFCO4DKH6ias39UPcgvUjCmOqZRcWMAdslkGO64NnIy9MEvEvK/s1600/image3.png" imageanchor="1" style=""><img border="0" height="205" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqVlloODpBsQzmqYzi0GTxsvNZV2GlGpupaEwrSPnbMhr-kcxgawA_te7Gj8IEqmdcGMyigXfPh_Ybfs4fylNM0Lad1DZFCO4DKH6ias39UPcgvUjCmOqZRcWMAdslkGO64NnIy9MEvEvK/s320/image3.png" /></a></div><br />
これで、Snow LeopardでもASファイルがクイックルック出来るようになります。soumihttp://www.blogger.com/profile/13715617615138609870noreply@blogger.com0tag:blogger.com,1999:blog-9047895092362119203.post-4105759996843186712011-02-08T17:03:00.001+09:002011-02-21T22:52:03.645+09:00Mac OS 10.6とiPhotoとAndroid以前、<a href="http://www.sd-tech-blog.com/2010/12/iphotoandroid.html">iPhotoでAndroidの撮影した写真が読み込めない</a>という記事を書きましたが、この症状に陥る条件が分かったので投稿しておきます。<br />
<br />
症状をおさらいをすると、<br />
<br />
<b>・写真ファイルの文字数が8文字ジャスト</b><br />
<b>・ファイル名に"."や"-"を含まない</b><br />
<br />
上記以外のファイルは、端末をつないでもiPhotoの読み込み候補に表示されません。なので、Androidの写真ファイル名(2010-10-28 13.01.25.jpg等)はアウト。ただ、端末によっては問題なく読み込めていました。また、写真を手動で(D&D等で)読み込む分には問題ありません。<br />
<br />
<br />
色々と調べてみた結果、どうやら<b>Mac OS 10.6上のiPhotoでは、どのバージョンでも読み込む事が出来ないようです。</b>ですので、写真の取り込みには他のソフトを使うなり、手動でなんとかするなりするしか無さそう…<br />
<br />
<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqKSN56cHtQF7UB689rmBIK6XWB51ASji3MrCXO4VmhAOr_ZYkdhkQpPGrBgKeey8Xkp1dd9uFaBhkiHuG3u1wDL0w-zT2AcTs6lF7-n7mFSMNGHILyViv1jUxQMsAbyeuZBEAhi87nIFU/s1600/macos10_6.png" imageanchor="1" style=""><img border="0" height="320" width="281" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqKSN56cHtQF7UB689rmBIK6XWB51ASji3MrCXO4VmhAOr_ZYkdhkQpPGrBgKeey8Xkp1dd9uFaBhkiHuG3u1wDL0w-zT2AcTs6lF7-n7mFSMNGHILyViv1jUxQMsAbyeuZBEAhi87nIFU/s320/macos10_6.png" /></a></div><br />
確かに、他のカメラメーカーを見てもファイル命名規則は上記に乗っ取っているので、「カメラから写真を読み込む」にはこの条件でも良いですね。色々なデバイスがMacにつながれるようになった時、写真を選り分ける確実な方法、という事なのでしょう。<br />
<br />
ただ、それ以外なら例えExif情報があろうと無視なのはちょっと困りますね…<br />
Androidの写真をMacに読み込む、何か他の良い方法を探してみる事にします。soumihttp://www.blogger.com/profile/13715617615138609870noreply@blogger.com0tag:blogger.com,1999:blog-9047895092362119203.post-54454748496402245022011-02-03T12:08:00.000+09:002011-02-03T12:08:17.076+09:00[as3] WIndows7タブレット上のFlashのタッチ感度を良くするWIndows7タブレットでFlashを動かすとタッチの感度が悪いかったので調べてみました。<br />
<br />
WIndows7タブレットでマウスダウンを受け取るFlashを動かすと<br />
タッチ時にマウスダウンイベントが来ず、指を少しずらした時に来る仕様になっているようです。<br />
このままではタッチ操作がワンテンポ遅れてしまい、追従性のよくない動きになってしまいます。<br />
<br />
タッチパネルのドライバとFlashの相性の問題かと思って、<br />
いろんなメーカーのタブレットを試しましたが、どれもは挙動は同じ。<br />
<br />
そこでFlashCS5から新しく加わったマルチタッチイベントを試してみると<br />
Flashにスクリプト一行追加するだけで直りました。<br />
<pre class="brush:as3" title="DocumentClass.as">//Flash CS5が必要です。
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
</pre><br />
これでタッチ時にマウスイベントが来て、サクサク動くようになりました。<br />
調べてないけど、もしかするとAndroidとかでも有効かもしれない。<br />
<br />
ただ、これからはTouchEventを使う方がよさそうなので、勉強しないとね。<br />
参考:<a href="http://hakuhin.jp/as3/input_control.html#INPUT_CONTROL_01">FlashゲームPG講座 For AS3.0【入力コントロールについて】</a><br />
<br />
<br />
<table style="border-collapse:collapse;border-spacing:0;border-width:0px;padding:5px;margin:0;font-size:12px;line-height:1.5;"><tr><td style="border-width:0px;text-align:center;vertical-align:top;padding:5px 5px 0 5px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00456RNEQ/fksnstore-22/ref=nosim/"><img src="http://ecx.images-amazon.com/images/I/21VXUgBUFcL._SL75_.jpg" alt="オンキヨー Personal Mobile TWシリーズ TW317A5" style="border-style:none;padding:0;margin:0;" /></a></td><td style="border-width:0px;text-align:left;vertical-align:top;padding:5px 5px 0 0;"><div><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00456RNEQ/fksnstore-22/ref=nosim/" style="">オンキヨー Personal Mobile TWシリーズ TW317A5</a></div><div>新品最安価格:<span style="color:Black;font-weight:bold;">¥ 68,525</span> (14店出品)</div><div>売上ランク:53347位</div><div>レビュー平均:<img src="http://www.art-ing2.jp/amazon/parts/Rating40.png" alt="4.0" style="border-style:none;padding:0;margin:0;" />4.0点 (1人がレビュー投稿)</div></td></tr><tr><td style="border-width:0px;padding:0 5px 5px 5px;" colspan="2"><div style="color:#808080;font-size:10px;text-align:right;">by <a href="http://www.art-ing2.jp/amazon/item.aspx?ii=B00456RNEQ" style="color:#808080;">amazon通販最速検索</a> at 2011/02/03</div></td></tr></table>fukusinhttp://www.blogger.com/profile/02654126877276758457noreply@blogger.com0tag:blogger.com,1999:blog-9047895092362119203.post-15579018570657932372011-01-14T12:35:00.003+09:002011-01-15T01:01:57.367+09:00Unity3D事始め<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj780dJl8TDmDFxSzNBqHJJblgy-rC1oCC-QpWqCou2gDHA4fjhD0Msbh3-88_5e9vRjtfGSkKAyDILMuPRsFyu1Wc1ub8qQdUPba0Ax1smOA3T714TTPd1ClhdX0O8c7iX1rN56IAKQsZD/s1600/%25E3%2583%2594%25E3%2582%25AF%25E3%2583%2581%25E3%2583%25A3+3.png" imageanchor="1" style=""><img border="0" height="217" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj780dJl8TDmDFxSzNBqHJJblgy-rC1oCC-QpWqCou2gDHA4fjhD0Msbh3-88_5e9vRjtfGSkKAyDILMuPRsFyu1Wc1ub8qQdUPba0Ax1smOA3T714TTPd1ClhdX0O8c7iX1rN56IAKQsZD/s320/%25E3%2583%2594%25E3%2582%25AF%25E3%2583%2581%25E3%2583%25A3+3.png" /></a></div>ゲームエンジン「<a href="http://unity3d.com/">Unity3D</a>」入門のための覚え書き。<br />たまに聞かれるのでまとめてみました。<br />FlashからUnity3Dに移行したい人向けです。<br /><br /><b>■環境を整える</b><br /><br /><b>・Unity: </b><br /> Basicは無料。Proは1500ドル。(<a href="http://unity3d.com/unity/licenses">機能比較表</a>)<br /> Proにすると影シェーダ、ビデオ再生、スプラッシュ変更などの機能が使える。<br /> その他、UIが黒ベースになって少しリッチな気分に。<br /><br /> iPhone、Androidアプリを作りたい場合は、別途ライセンスがいる。<br /> iPhoneアプリを書き出すにはMac OSX snowleopard以上が必要。<br /><br /><b>・モデリングツール:</b><br /> Unityが対応しているソフトはMaya / 3DSMax / Blender / Cheetah3D。<br /> Blenderは無料で使えるのでオススメ。<br /> 2.5になってUIが一新されてとっつきやすくなった。<br /><br /> Mac版のみだが、Cheetah3Dも比較的安くてシンプルなUIで入門としては良さそう。<br /> ただ、うちの環境ではUnityにモデルを読み込むと軸が90度回転してしまう。<br /> (なにか設定がいる?)<br /><br /><b>・画像加工ソフト:</b><br /> PhotoShop。psdデータを直接Unityに読み込めます。<br /><br /><b>・スクリプトエディタ</b><br /> デフォルトのエディタはコードヒントが出ないので、他のエディタを使う。<br /> C#で開発するならUnity3.1にバンドルされている<a href="http://monodevelop.com/">MonoDevelop</a>がオススメ。<br /><br /> jsで開発するなら<a href="http://technology.blurst.com/unitydevelop-javascript-editor/">UnityDevelop</a>。<a href="http://www.flashdevelop.org/wikidocs/index.php?title=Main_Page">FlashDevelop</a>を改造したもの。<br /> ただし、Windows版のみ。<br /> Flasherならjsで始めると覚える事が少なくて楽チン。<br /><br /> ただ、UnityにMonoDevelopがバンドルされているので、<br /> 今後はC#に移行するのが良いかもしれない。<br /><br /><br /><b>■覚えておくと便利なポイント</b><br /><br /> ・Unityでは<b>日本語を含んだパスはNG</b><br /> (最初、デスクトップに置いたサンプルファイルが開かなくて、ハマりました。。。)<br /> ・<b>単位は1unit = 1m</b>として作る<br /> ・<b>Fキーが異常に便利。</b>選択したオブジェクトをフォーカスしてくれる<br /> ・<b><a href="http://unity3d.com/unity/editor/asset-store">Asset Store</a>が凄い</b><br /> (UnityのWindowメニュー> Asset Storeからアクセス)<br /> ・Unity3.0以前のデータを読み込むには<b>最適化が必要</b><br /> (Unity2.6では問題なく動いていたものを3.0で開くとエラーが出ることがある)<br /><br /><br /><b>■Flashから移行する時のポイント</b><br /><br /> ・Hierarchy view =レイヤーパネル、Animation view = タイムラインパネル<br /> ・<b>psdデータは直接読み込める</b><br /> ・jsだと<b>ActionScriptライク</b><br /> ・Windowsユーザーは<b><a href="http://technology.blurst.com/unitydevelop-javascript-editor/">UnityDevelop</a>必須</b><br /> ・スクリプトは<b><a href="http://unity3d.com/support/documentation/ScriptReference/MonoBehaviour.html">MonoBehavior</a>を継承している</b><br /> ・GameObject = DisplayObject、Prefabs = MovieClip、TextMesh = TextFieldと理解<br /> ・trace() = Debug.log()もしくは print()<br /> ・<b>iTweenが便利</b>。Tweenerみたいなもの<br /> ・スクリプト-<b><a href="http://unity3d.com/support/documentation/ScriptReference/index.Accessing_Other_Game_Objects.html">オブジェクトの参照方法</a></b><br /> ・スクリプト-<b><a href="http://unity3d.com/support/documentation/ScriptReference/Object.Instantiate.html?from=GameObject">GameObject生成方法</a></b><br /><br /><br /><b>■Unity関連リンク</b><br /><br /> ・ドキュメント日本語化プロジェクト<br /> <a href="http://ws.cis.sojo-u.ac.jp/~izumi/Unity_Documentation_jp/Documentation.html">http://ws.cis.sojo-u.ac.jp/~izumi/Unity_Documentation_jp/Documentation.html</a><br /> ・コミュニティwiki<br /> <a href="http://www.unifycommunity.com/wiki/index.php?title=Main_Page">http://www.unifycommunity.com/wiki/index.php?title=Main_Page</a><br /> ・フォーラム<br /> <a href="http://answers.unity3d.com/">http://answers.unity3d.com/</a><br /> ・チュートリアル集<br /> <a href="http://www.design3.com/unity/">http://www.design3.com/unity/</a><br /> ・スクリプトリファレンス<br /> <a href="http://unity3d.com/support/documentation/ScriptReference/20_class_hierarchy.html">http://unity3d.com/support/documentation/ScriptReference/20_class_hierarchy.html</a>fukusinhttp://www.blogger.com/profile/02654126877276758457noreply@blogger.com2tag:blogger.com,1999:blog-9047895092362119203.post-9445159374044409382011-01-11T18:34:00.001+09:002011-01-11T18:34:49.369+09:00MonoDevelop(Unity) for Macの日本語文字化けを直す最近、3Dを扱うインタラクティブデモを作成するのにUnityを使い始めています。まだノウハウが無く、四苦八苦しながら学習している状態ですが…<br /><br />このUnityですが、インストールするとMonoDevelopというエディタがついてきます。<br />MonoDevelopを起動すると、そのままの状態だとウェルカムスクリーン等、GUI上の日本語が文字化けしてしまいます。<br /><br />Unityにバンドルされていない、普通のMonoDevelopであれば、/Library/Frameworks以下のファイルを変更すると直るようなのですが、UnityにバンドルされているMonoDevelopだけだと当該フォルダが生成されません。<br />参考サイト:<a href="http://d.hatena.ne.jp/shunsuk/20091027/1256643206">[Mac][.NET]Mac OS X LeopardにMonoDevelopを入れたら文字化け、の対処法</a><br /><br />代わりに、アプリのパッケージ内にそれに該当するものを持っているようです。<br />「パッケージの内容を表示」から見る事が出来ます。<br /><br /><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM8M28vkJgzoaXVh_7t24SSfDmm0yZZLHp3xn_M_0P9QZ4G_aK8kq01O6rQJKBmFwsbJUgK5av3urDW0pH-Yt9na6N6PoXhaUWrK2yKLy7pS2GW7n33Qxn7XJakCHb-zQceqhp8iXB5R56/s1600/img1.png" imageanchor="1" style=""><img border="0" height="208" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM8M28vkJgzoaXVh_7t24SSfDmm0yZZLHp3xn_M_0P9QZ4G_aK8kq01O6rQJKBmFwsbJUgK5av3urDW0pH-Yt9na6N6PoXhaUWrK2yKLy7pS2GW7n33Qxn7XJakCHb-zQceqhp8iXB5R56/s320/img1.png" /></a></div><br />普通のMonoDevelopと同じようなファイル構成になっているので、上記サイトを参考に日本語化を試した所うまくいかず…<br /><br />どうやらGTKというツールキットを使用しているようなので、以下を参考にgtkrcファイル内のfont-nameというプロパティを変更してみました。<br />参考サイト:<a href="http://my.opera.com/beve/blog/show.dml/82331">GIMPやInkscapeの文字化け対策</a><br /><br /><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHxKbslruMdEJPg_varrUoElU5A221OZaWsLVdGhbg4eZ7FaDOqKl5je584ayF4eNa8zfqkaUZjkjN5z3nm5dRrnW1sfRCgu8FfVhT3UaHKNmj8jSNnhlcTP0q8ONgH5fibZl_-DZC5qwi/s1600/img2.png" imageanchor="1" style=""><img border="0" height="46" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHxKbslruMdEJPg_varrUoElU5A221OZaWsLVdGhbg4eZ7FaDOqKl5je584ayF4eNa8zfqkaUZjkjN5z3nm5dRrnW1sfRCgu8FfVhT3UaHKNmj8jSNnhlcTP0q8ONgH5fibZl_-DZC5qwi/s320/img2.png" /></a></div><br />Contents/Frameworks/Mono.framework/Versions/Current/etc/gtk-2.0/gtkrc<br />を変更していきます。<br /><br /><b>font = "Lucida Grande 12"</b><br />の下に<br /><b>font_name ="Hiragino Kaku Gothic Pro 10"</b><br /><br />を追加します。<br />最後の数字は使用するフォントサイズのようなので、見やすいサイズに変更してください。<br />他の部分は変更しなくても良いようです。<br /><br /><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmUHSwmEu46CwNSblbGAsYmnt3DWXI_UnL53e9ko7iuPDnRBSiHLdwr4HcSXhUtbDKHZtLQdYFiPpFip-dhc37oqWtIsyuTuY5AvPVf5ANncHP3I6bvxBSSXVJRAMPl6IHI6iWv9Jd5quF/s1600/img3.png" imageanchor="1" style=""><img border="0" height="262" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmUHSwmEu46CwNSblbGAsYmnt3DWXI_UnL53e9ko7iuPDnRBSiHLdwr4HcSXhUtbDKHZtLQdYFiPpFip-dhc37oqWtIsyuTuY5AvPVf5ANncHP3I6bvxBSSXVJRAMPl6IHI6iWv9Jd5quF/s320/img3.png" /></a></div><br />これを保存し、MonoDevelopを起動するとウェルカムスクリーンが日本語化されている事が確認出来ると思います。<br /><br /><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSnnlHAnRGzrrkZSZ5YLMRQebEWFdxVRmsk7tM1_LFn7LebjeKbAtEe-k-vYey8Wa3kbrLywHCREoqvMxUOZYvmTA1oB1tPzQG55Z2mKykPo-QRekuMcODB4sE_iMcGWIARvtISLTh4rFl/s1600/img4.png" imageanchor="1" style=""><img border="0" height="232" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSnnlHAnRGzrrkZSZ5YLMRQebEWFdxVRmsk7tM1_LFn7LebjeKbAtEe-k-vYey8Wa3kbrLywHCREoqvMxUOZYvmTA1oB1tPzQG55Z2mKykPo-QRekuMcODB4sE_iMcGWIARvtISLTh4rFl/s320/img4.png" /></a></div><br />エディタの設定はこれで完了したので、後はfukusinさんに聞きながらちびちびやっていこうかな。soumihttp://www.blogger.com/profile/13715617615138609870noreply@blogger.com4tag:blogger.com,1999:blog-9047895092362119203.post-80116081912937938252011-01-10T20:04:00.003+09:002011-01-10T20:52:15.910+09:00SCPluginを利用してGoogle Code(https)からチェックアウトする会社で協同作業をする時は、Subversionをよく使います。導入してから、最新ファイルの共有とバージョン管理が格段に楽になりました。<br />
SVNのクライアントと言えばTortoiseSVNが有名ですが、僕の作業環境はMacなので、Mac版のTortoiseSVNとも言えるSCPluginを使用しています。<br />
<br />
現在公開している<a href="http://code.google.com/p/sd-library/">SDLibrary</a>もSVNを使用してGoogle Codeに公開しています。これをチェックアウトする場合、read-onlyであればhttpで問題ないのですが、編集しようとするとhttpsでの接続を要求されます。ですが、SCPluginからhttps接続でチェックアウトしようとしたら証明書エラーが出てしまいました。エラー内容は以下。<br />
(画像は再現のために、適当なSSLを使用したサイトからチェックアウトしています)<br />
<br />
<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaNrbJ4kamg5bA6PtTZlB9MQAmBMH5sWcaj8zUj96et4Kg_TiIlhSELBQz-B3HVas3dZrEONMTfKc3DPXBy81EKWqaE05vpZtGI2w-6zUPxSWIv8nJM4iyflb2o9prW8RamxapLmCzHlIU/s1600/svn_error.png" imageanchor="1" style=""><img border="0" height="151" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaNrbJ4kamg5bA6PtTZlB9MQAmBMH5sWcaj8zUj96et4Kg_TiIlhSELBQz-B3HVas3dZrEONMTfKc3DPXBy81EKWqaE05vpZtGI2w-6zUPxSWIv8nJM4iyflb2o9prW8RamxapLmCzHlIU/s320/svn_error.png" /></a></div><blockquote>OPTIONS of '<b>URL</b>': Server certificate verification failed: issuer is not trusted(<b>URL</b>)</blockquote>※<b>URL</b>には接続先のアドレス(https://〜)が入ります<br />
<br />
証明書のエラーという事でちょっとはまってしまったのですが、SCPluginのフォーラムにこの問題に対する解決策がありました。<br />
<br />
<a href="http://scplugin.tigris.org/ds/viewMessage.do?dsForumId=1525&dsMessageId=2405274">http://scplugin.tigris.org/ds/viewMessage.do?dsForumId=1525&dsMessageId=2405274</a><br />
<br />
かなり詳細に書かれているのですが、対処方法だけ抜粋すると<br />
<br />
<b>1.Terminalを開く<br />
2."svn ls チェックアウトしたいリポジトリのアドレス"と入力、リターン。<br />
3.証明書を認証するかどうかのプロンプトが出る(下記参照)<br />
<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8LkZx_Q6p3l8FrPCUzZ42JKiut2B721uMlGBUJ7BIIeO6jvhX0Naslkb0YtPx_0etAq0L2dQpJLwKmnIZw6QSTAcbedR9UUDswgSVLln8Wq53vewuxMnNqXivAiKKRugNRvM5IInbxWI-/s1600/terminal.png" imageanchor="1" style=""><img border="0" height="244" width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8LkZx_Q6p3l8FrPCUzZ42JKiut2B721uMlGBUJ7BIIeO6jvhX0Naslkb0YtPx_0etAq0L2dQpJLwKmnIZw6QSTAcbedR9UUDswgSVLln8Wq53vewuxMnNqXivAiKKRugNRvM5IInbxWI-/s320/terminal.png" /></a></div>4."p"と入力、リターン(常に信頼)</b><br />
<br />
となります。<br />
一度承認が済めば、後はSCPluginから操作が可能になります。soumihttp://www.blogger.com/profile/13715617615138609870noreply@blogger.com0tag:blogger.com,1999:blog-9047895092362119203.post-61293227694255519922011-01-06T16:14:00.006+09:002011-01-21T18:38:05.436+09:00[Kinectハック] SD_KinectIOをFlashで受ける<a href="http://sd-tech-blog.blogspot.com/2010/12/kinect-sdkinectio.html">[Kinectハック] SD_KinectIO とりあえず公開</a>でKinectからFlashへスケルトン情報を送るプログラムを公開していますが、それをFlashで受けるためのサンプルとライブラリも併せて作ってみました。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBcJYwBUNv8pJrMbRI01ztBO-DGWDmPyfFCd-XvpwgHvlhXC1Wjl4RVKdrlRWsyxx79wCY2l16i9khPmuLWsx9auVG9LJCpjbiCSl5O5kq1QotjMhwBKmjevI1ob7mxoy2Apw11o4FZ0BX/s1600/kinect_flash2.png"><img style="cursor:pointer; cursor:hand;width: 320px; height: 233px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBcJYwBUNv8pJrMbRI01ztBO-DGWDmPyfFCd-XvpwgHvlhXC1Wjl4RVKdrlRWsyxx79wCY2l16i9khPmuLWsx9auVG9LJCpjbiCSl5O5kq1QotjMhwBKmjevI1ob7mxoy2Apw11o4FZ0BX/s320/kinect_flash2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5558995453817658466" /></a><br /><br />先のエントリでは人物のスケルトンモデルを表示するだけのデモを動かしていましたが、それと以前のオブジェクト移動のデモを合体させたサンプルを作成しています。<br /><br />SD_KinectIOからは<br /><br /><blockquote><b> "ユーザーID","部位ID","状態","x座標","y座標","z座標" (Null) </b><br /><br />(例)<br />1,1,add,100.223,600.032,1534,302<br />1,1,update,140.344,632.323,1523,324<br />1,1,remove,0,0,0<br /><br />ユーザーID:1~10<br />部位ID:1~24<br />状態:add,update,remove</blockquote><br /><br />というフォーマットで信号が送られてきます。<br /><br />今回はスケルトン情報からFlash上にスケルトンモデルを表示させたいのですが、各ユーザーの各パーツがバラバラに送信されてくるので、それをFlashの方でユーザーごとにまとめてやる必要があります。<br />IDとパーツとの対応づけや、それを各ユーザーに割り振る処理は中々面倒そうだったので、今回もライブラリとしてまとめました。Google Code上のライブラリを更新していて、com.sdtech.kinect以下がそれに該当します。<br /><br /><a href="https://sd-tech-blog-as3-library.googlecode.com/svn/trunk/doc/com/sdtech/kinect/package-detail.html">・kinectパッケージ</a><br /><a href="https://sd-tech-blog-as3-library.googlecode.com/svn/trunk/doc/com/sdtech/kinect/users/package-detail.html">・kinect.usersパッケージ</a><br /><br />ひとまず、各オブジェクトをコンストラクタでインスタンス化していきます。<br /><br /><pre class="brush:as3" title="Main.as"><br />public function Main():void{<br /> //<br /> //ポインタ生成<br /> mp=new MultiPointer(-1 , false);<br /> mp.simulate=true;<br /> mp.registerDefaultCursor(HandCursor);<br /> addChild(mp);<br /> //<br /> //ボーン描画用<br /> kmu=new KinectMultiUser();<br /> kmu.mouseEnabled=kmu.mouseChildren=false;<br /> addChild(kmu);<br /> //<br /> //FieldOfView設定<br /> fov.addEventListener(Event.ENTER_FRAME , getFOV);<br /> //<br /> //接続開始<br /> connect_btn.addEventListener(MouseEvent.CLICK , connectStart);<br /> //<br />}<br /></pre><br /><br />スケルトンモデルとボーン描画用のクラスの<a href="https://sd-tech-blog-as3-library.googlecode.com/svn/trunk/doc/com/sdtech/kinect/users/KinectMultiUser.html">KinectMultiUser</a>をインスタンス化し、以前も使用した<a href="https://sd-tech-blog-as3-library.googlecode.com/svn/trunk/doc/com/sdtech/pointer/package-detail.html">Pointerパッケージ</a>を組み合わせて使うため、同じようにインスタンス化します。また、3DのFieldOfViewを動的に変更出来るようにスライダーに、接続先を動的に変更出来るようにボタンにイベントを貼付けています。<br /><br /><pre class="brush:as3" title="Main.as"><br />private function connectStart(e:MouseEvent):void{<br /> //<br /> kc=new KinectConnector();<br /> kc.addEventListener(Event.CONNECT , connectComplete);<br /> kc.addEventListener(KinectEvent.RECEIVE , receiveKinectData);<br /> kc.connect(ip.text , int(port.text));<br /> //<br />}<br /></pre><br /><br />接続ボタンが押されたら、SD_KinectIOに接続に行きます。受け取るデータは単なるプレーンテキストなのでXMLSocketで受け取っても問題ないのですが、今後特殊な仕様が追加される事を考えて、ここでは<a href="https://sd-tech-blog-as3-library.googlecode.com/svn/trunk/doc/com/sdtech/kinect/KinectConnector.html">KinectConnector</a>を使用しています。イベントリスナも専用の物を使用していますが、結局DataEvent.DATAと同じ処理になっているので、実はDataEvent.DATAを使用しても問題なかったりします。<br /><br /><pre class="brush:as3" title="Main.as"><br />private function receiveKinectData(e:KinectEvent):void{<br /> //<br /> //受け取ったデータをパースし、ボーンを描画<br /> kmu.parseData(e.data);<br /> //<br /> for(var i:int=0 ; i<kmu.users ; i++){<br /> //<br /> //ユーザーを取得<br /> var ku:KinectUser=kmu.getUserById(i);<br /> if(!ku)continue;<br /> //<br /> //両手を取得<br /> for(var n:int=0 ; n<2 ; n++){<br /> //<br /> //一意のIDを作成<br /> var pointer_id:int=int(String(i+1)+(n+1));<br /> //<br /> var parts:KinectUserParts;<br /> if(n==0){<br /> parts=ku.getPartsById(KinectUserParts.R_HAND);<br /> }else{<br /> parts=ku.getPartsById(KinectUserParts.L_HAND);<br /> }<br /> //<br /> if(!parts){<br /> mp.lost(0,0,pointer_id);<br /> continue;<br /> }<br /> //<br /> //グローバル座標に変換<br /> var p:Point=ku.local3DToGlobal(new Vector3D(parts.x , parts.y , parts.z));<br /> //<br /> //ポインタ認識<br /> mp.detect(p.x,p.y , pointer_id);<br /> //ポインタを動かす<br /> mp.move(p.x,p.y,pointer_id);<br /> if(parts.z>1500){<br /> mp.down(p.x,p.y,pointer_id);<br /> }else{<br /> mp.up(p.x,p.y,pointer_id);<br /> }<br /> //<br /> }<br /> //<br /> }<br /> //<br /> //<br />}<br /></pre><br /><br />データを受け取ったらボーンを描画しますが、KinectMultiUserにはサーバーから受け取ったデータを渡すと自動的にボーンを描画してくれる<a href="https://sd-tech-blog-as3-library.googlecode.com/svn/trunk/doc/com/sdtech/kinect/users/KinectMultiUser.html#parseData()">parseData</a>というメソッドが実装されているので、ボーン描画部分はその一行で済んでいます。<br />内部的には、受け取ったデータをパースしてユーザーIDを取得し、まだ存在しなかったらユーザー追加、存在したらデータ更新、という何の変哲も無い処理になっています。<br /><br />肝心のボーン描画部分は一行で済んでしまっていますが(笑)、これでFlash上にスケルトンモデルを描画する事が出来ました。<br /><br />さて、ここから<a href="http://sd-tech-blog.blogspot.com/2010/12/kinectopenniflash.html">以前のように</a>オブジェクトを動かせるようにしていきます。<br /><br /><pre class="brush:as3" title="Main.as"><br />for(var i:int=0 ; i<kmu.users ; i++){<br /> //<br /> //ユーザーを取得<br /> var ku:KinectUser=kmu.getUserById(i);<br /> if(!ku)continue;<br /> //<br /> //両手を取得<br /> for(var n:int=0 ; n<2 ; n++){<br /> //<br /> //一意のIDを作成<br /> var pointer_id:int=int(String(i+1)+(n+1));<br /> //<br /> var parts:KinectUserParts;<br /> if(n==0){<br /> parts=ku.getPartsById(KinectUserParts.R_HAND);<br /> }else{<br /> parts=ku.getPartsById(KinectUserParts.L_HAND);<br /> }<br /> //<br /> if(!parts){<br /> mp.lost(0,0,pointer_id);<br /> continue;<br /> }<br /> //<br /> //グローバル座標に変換<br /> var p:Point=ku.local3DToGlobal(new Vector3D(parts.x , parts.y , parts.z));<br /> //<br /> //ポインタ認識<br /> mp.detect(p.x,p.y , pointer_id);<br /> //ポインタを動かす<br /> mp.move(p.x,p.y,pointer_id);<br /> if(parts.z<1500){<br /> mp.down(p.x,p.y,pointer_id);<br /> }else{<br /> mp.up(p.x,p.y,pointer_id);<br /> }<br /> //<br /> }<br /> //<br />}<br /></pre><br /><br />まず、<a href="https://sd-tech-blog-as3-library.googlecode.com/svn/trunk/doc/com/sdtech/kinect/users/KinectMultiUser.html#users">KinectMultiUserのusersプロパティ</a>で現在認識されている最大のユーザー数を取得し、各<a href="https://sd-tech-blog-as3-library.googlecode.com/svn/trunk/doc/com/sdtech/kinect/users/KinectUser.html">KinectUser</a>インスタンスへの参照を取得します。各ユーザーの両手を認識したいので、さらにfor文で両手分処理を繰り返します。繰り返し処理の中は<a href="http://sd-tech-blog.blogspot.com/2010/12/kinectopenniflashflash.html">以前のエントリ</a>とほぼ同じですが、x,y座標は各ユーザーの両手の座標を使用したいので、各パーツ(<a href="https://sd-tech-blog-as3-library.googlecode.com/svn/trunk/doc/com/sdtech/kinect/users/KinectUserParts.html">KinectUserParts</a>)の座標を使用します。また、今回はx,yに加えてz座標も加味する必要があるので、座標変換の時にlocalToGlobalでなくlocal3DToGlobaを使用しています。<br /><br />これで、スケルトンモデル+オブジェクト操作で、スケルトンがオブジェクトを操作しているようなデモができました。<br />オブジェクトの操作について、現在は奥行きでDOWN/UPを判断していますが、手のひらの開閉が取れればもっと自然で良いんですけどね。C++は専門外なので、解析するにしても時間がかかりそうです…<br /><br /><a href="https://sites.google.com/site/sdtechblog2010/home/blogdata/SD_KinectIO_Flash.zip">ソースをダウンロード</a>soumihttp://www.blogger.com/profile/13715617615138609870noreply@blogger.com0tag:blogger.com,1999:blog-9047895092362119203.post-41627886904284334902010-12-25T16:34:00.010+09:002011-03-25T18:34:08.075+09:00[Kinectハック] SD_KinectIO とりあえず公開<object height="385" width="640"><param name="movie" value="http://www.youtube.com/v/EHOOFXQYhjM?fs=1&hl=ja_JP"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/EHOOFXQYhjM?fs=1&hl=ja_JP" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object><br />
<br />
「<a href="http://sd-tech-blog.blogspot.com/2010/12/kinectopenniflash.html">[Kinectハック]OpenNI+Flashでマルチユーザー・マルチタッチ</a>」で使っていた<br />
OpenNI解析アプリがexe化できたので、<b>「SD_KinectIO」として公開します</b>。<br />
手の情報だけじゃなく、すべてのスケルトン情報を送るように改良しました。<br />
<b>ソケットサーバーの知識さえあれば、これを使って誰でもKinectで遊べますよ。</b><br />
<br />
<s><b>SD_KinectIO</b>:SD_KinectIO_v0_1.zip</s><br />
<div style="-webkit-text-decorations-in-effect: none; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><s>ソケット通信でクライアントにスケルトン情報を送ります。</s></div><div style="-webkit-text-decorations-in-effect: none; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><s>対応:Window XP 32bitのみ動作確認</s></div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="Apple-style-span" style="color: red;">[2011/1/6追記]</span></div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="Apple-style-span" style="color: red;">OpenNIのライセンスがLGPLなので、exeではなくソースを公開します。</span></div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="Apple-style-span" style="color: red;">OpenNIをインストールして、OpenNI/Samples/に下記のファイルを展開してください。</span></div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><b>source:</b> <a href="https://sites.google.com/site/sdtechblog2010/home/blogdata/SD_KinectIO_source_v0_1.zip">SD_KinectIO_source_v0_1.zip</a></div><br />
<b>■ソケット通信仕様</b><br />
クライアントからは下記に接続します。<br />
<b>IP: 127.0.0.1<br />
TCP Port: 3000</b><br />
<br />
<b>■通信内容</b><br />
内容はカンマ区切りで送っています。<br />
デリミタはFlashの通信仕様に合わせてNull文字にしています。<br />
<br />
<b> "ユーザーID","部位ID","状態","x座標","y座標","z座標" (Null) </b><br />
<br />
(例)<br />
1,1,add,100.223,600.032,1534,302<br />
1,1,update,140.344,632.323,1523,324<br />
1,1,remove,0,0,0<br />
<br />
ユーザーID:1~10<br />
部位ID:1~24<br />
状態:add,update,remove<br />
<br />
部位の対応リストはこんな感じ。<br />
<pre class="brush:cpp">HEAD = 1
NECK = 2
TORSO = 3
WAIST = 4
LEFT_COLLAR = 5
LEFT_SHOULDER = 6
LEFT_ELBOW = 7
LEFT_WRIST = 8
LEFT_HAND = 9
LEFT_FINGERTIP =10
RIGHT_COLLAR =11
RIGHT_SHOULDER =12
RIGHT_ELBOW =13
RIGHT_WRIST =14
RIGHT_HAND =15
RIGHT_FINGERTIP =16
LEFT_HIP =17
LEFT_KNEE =18
LEFT_ANKLE =19
LEFT_FOOT =20
RIGHT_HIP =21
RIGHT_KNEE =22
RIGHT_ANKLE =23
RIGHT_FOOT =24
</pre><br />
ただ、OpenNIから値が来ていない部位もあり、<br />
有効な部位だけをまとめるとこんな感じ。<br />
<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcteXpow4QrELTFaIFEShaE-AUc3-XlzwIiyhQOPCCz1Uzuap8s87i7rY3sVTmthPrLGUJBjN2J87YWjvVmXB7OzK1_U7_6fRESQDZg7lqPpeqU4lBoJKv5tVbwdyKCJp4-9FCRWSUEKF/s1600/OpenNI_SKEL_list.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="306" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhcteXpow4QrELTFaIFEShaE-AUc3-XlzwIiyhQOPCCz1Uzuap8s87i7rY3sVTmthPrLGUJBjN2J87YWjvVmXB7OzK1_U7_6fRESQDZg7lqPpeqU4lBoJKv5tVbwdyKCJp4-9FCRWSUEKF/s320/OpenNI_SKEL_list.jpg" width="320" /></a></div><br />
<br />
<b>■使い方</b><br />
<span class="Apple-style-span" style="color: red;">[注意] KinectドライバとOpenNIが必要です。</span><br />
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="Apple-style-span" style="color: red;">「<a href="http://sd-tech-blog.blogspot.com/2010/12/kinectopenniflash.html">[Kinectハック]OpenNI+Flashでマルチユーザー・マルチタッチ 解析編</a>」を参考に</span></div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="Apple-style-span" style="color: red;">KinectドライバとOpenNIをインストールして下さい。</span></div><br />
ダウンロードしたファイルから「SD_KinectIO_.exe」を起動します。<br />
<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-db8K3Mr3KPs_iuNLoQ_Li8OFd98cicRrLBrlrXIeLBb1MBn4pusclq5XdteVAlA89t58wzAGOoAKjC8ltdwWc5weFKtPDCcXALB7L_pWLf2ZghUsm47sGdHHUaXXXT20OA2Ph1ZNwxAH/s1600/sd_kinect_io_exe.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-db8K3Mr3KPs_iuNLoQ_Li8OFd98cicRrLBrlrXIeLBb1MBn4pusclq5XdteVAlA89t58wzAGOoAKjC8ltdwWc5weFKtPDCcXALB7L_pWLf2ZghUsm47sGdHHUaXXXT20OA2Ph1ZNwxAH/s320/sd_kinect_io_exe.jpg" width="259" /></a></div><br />
起動すると「クライアント接続」待機状態になります。<br />
<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXlA2g6zbF7zMFtHztX-9tcJJ024UQAeTpqSxgo-6LZTIa7ebwXJVb_wdtnfceD2cRWFY3S9b3XORVGz0cpLfUzqkQnRO77kCb8nQMqWFBHnETDBuNcIAhQaTqhC4DYG7hC_U6Ua5Dz61x/s1600/sd_kinect_io_server.jpg" imageanchor="1" style="float: left; left: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="233" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXlA2g6zbF7zMFtHztX-9tcJJ024UQAeTpqSxgo-6LZTIa7ebwXJVb_wdtnfceD2cRWFY3S9b3XORVGz0cpLfUzqkQnRO77kCb8nQMqWFBHnETDBuNcIAhQaTqhC4DYG7hC_U6Ua5Dz61x/s320/sd_kinect_io_server.jpg" width="320" /></a></div><br />
ファイアーウォールを有効にしている場合は、セキュリティ警告がでるので、<br />
「ブロックを解除する」を選択します。<br />
<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqUAvLBzTDq9AsQK8TnLPsUgv8K4I4X3tPRUFq0ThAtaoUrgOjo5eBAYd11TEA7wdhgsNrz3_vVOjiay-YdN0zOsIHjF7_sfo7RrdZubz5i1Oz-Oa291P25Q1fA7dveHCzEkRbMxpfihwk/s1600/sd_kinect_io_security.jpg" imageanchor="1" style="float: left; left: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="183" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqUAvLBzTDq9AsQK8TnLPsUgv8K4I4X3tPRUFq0ThAtaoUrgOjo5eBAYd11TEA7wdhgsNrz3_vVOjiay-YdN0zOsIHjF7_sfo7RrdZubz5i1Oz-Oa291P25Q1fA7dveHCzEkRbMxpfihwk/s320/sd_kinect_io_security.jpg" width="320" /></a></div><br />
クライアント側からSocket通信で上記のIP/ポートに接続します。<br />
接続テストだけなら<a href="http://www.ex-group.jp/">SocketDebugger</a>がオススメです。<br />
<br />
クライアント接続後、しばらくするとカメラウィンドウが開きます。<br />
Kinectの前に立って、手を90度に曲げながら上に上げるとキャリブレーションが始まります。<br />
<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiycVTUqMb6O4xzaohqOgUVFUNGZxxMOCBiYaknym3ExGGBkpTuHWWHdxwc0s_-lt1p2AiER6ytLMmxcI1SAT0XG_-Zf60XiNQ8YZbd9Yvkrs6yR_V_HvsIz2Y06nQdpKtY8Tt_S8DBPcWP/s1600/cal.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="125" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiycVTUqMb6O4xzaohqOgUVFUNGZxxMOCBiYaknym3ExGGBkpTuHWWHdxwc0s_-lt1p2AiER6ytLMmxcI1SAT0XG_-Zf60XiNQ8YZbd9Yvkrs6yR_V_HvsIz2Y06nQdpKtY8Tt_S8DBPcWP/s320/cal.JPG" width="228" /></a></div><br />
キャリブレーションが終わるとクライアントへスケルトン情報が送られます。<br />
<br />
<br />
Flash側の解説はまた今度。<br />
<br />
<a href="http://sd-tech-blog.blogspot.com/2011/01/kinect-sdkinectioflash.html">-> [Kinectハック] SD_KinectIOをFlashで受ける</a>fukusinhttp://www.blogger.com/profile/02654126877276758457noreply@blogger.com2tag:blogger.com,1999:blog-9047895092362119203.post-43121891250343574022010-12-21T21:34:00.007+09:002011-01-21T18:39:25.550+09:00SDLibrary公開しましたGoogle Codeにて、ブログ編集メンバーで作ったライブラリを公開中です。<br /><br />SDLibrary<br /><a href="http://code.google.com/p/sd-tech-blog-as3-library/">http://code.google.com/p/sd-tech-blog-as3-library/</a><br /><br />asdocも書き出していて、リポジトリ上のファイルがそのまま閲覧出来ます。<br /><a href="http://sd-tech-blog-as3-library.googlecode.com/svn/trunk/doc/index.html">http://sd-tech-blog-as3-library.googlecode.com/svn/trunk/doc/index.html</a><br /><br />今回は2つパッケージを公開していて、<br /><br />■「osc」パッケージ<br /><br />oscを用いてCCVやReactivisionとの通信を受け持つライブラリです。<br />以前のエントリ<a href="http://sd-tech-blog.blogspot.com/2010/12/blog-post_16.html">「自作マルチタッチシステムを作ってみた」</a>でもこのパッケージを使用しています。<br /><br />■「pointer」パッケージ<br /><br />Flash上でマルチユーザーマルチタッチを実装するライブラリです。<br />このライブラリも、<a href="http://sd-tech-blog.blogspot.com/2010/12/blog-post_16.html">「自作マルチタッチシステムを作ってみた」</a>や<a href="http://sd-tech-blog.blogspot.com/2010/12/kinectopenniflashflash.html">「Kinectハック」</a>で使用しています。<br /><br />今後も、公開出来そうな物ができたら更新していこうと思います。soumihttp://www.blogger.com/profile/13715617615138609870noreply@blogger.com0tag:blogger.com,1999:blog-9047895092362119203.post-75838790708488614742010-12-21T12:31:00.011+09:002011-01-21T18:40:22.355+09:00[Kinectハック]OpenNI+Flashでマルチユーザー・マルチタッチ Flashで実装編<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhESdibT-wNl5-dbs9aogYoNxMOJJi_IEiXxcc2XSLL3mAddLPS-o3nt1GFpXp6_foe5SI8oxxbHCnKAa2V7-BQvbq8YcS5TWAkCEalCkAQTgnDxLx93Q7gVG4vgzbgsxMzjgPBOHzUhYET/s1600/multitouch_image.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5552936470281553698" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhESdibT-wNl5-dbs9aogYoNxMOJJi_IEiXxcc2XSLL3mAddLPS-o3nt1GFpXp6_foe5SI8oxxbHCnKAa2V7-BQvbq8YcS5TWAkCEalCkAQTgnDxLx93Q7gVG4vgzbgsxMzjgPBOHzUhYET/s320/multitouch_image.png" style="cursor: hand; cursor: pointer; height: 233px; width: 320px;" /></a><br />
<br />
<span class="Apple-style-span" style="color: #444444; font-family: 'Trebuchet MS', sans-serif; font-size: 14px; line-height: 21px;"><a href="http://sd-tech-blog.blogspot.com/2010/12/kinectopenniflash.html" style="color: #3366cc; text-decoration: none;">[Kinectハック]OpenNI+Flashでマルチユーザー・マルチタッチ OpenNI解析編</a> の続き。</span><br />
<span class="Apple-style-span" style="color: #444444; font-family: 'Trebuchet MS', sans-serif; font-size: 14px; line-height: 21px;"><br />
</span><br />
fukusinさんがopenNIのサンプルを解析/改造してくれたおかげで、Kinectの信号をXMLSocketを利用してFlashでも受け取れるようになりました。現時点では各ユーザーの両手のみの検出になっていますが、信号的には頭、首、肩…と、ボーンを表示するのに必要な頂点は全て取れているようです。<br />
<br />
さて、今回は「Flashで実装編」として、Kinectから送られてきた信号を解析してFlashに組み込んでいきます。今回のデモでは、各ユーザーの両手が識別できるためマルチタッチのような操作が可能になりますが、正確には「マルチ」ですが「タッチ」ではないですね。空中操作になりますから。「マルチポインタ」と言った所でしょうか。重箱の隅をつつくみたいですが、これ、重要なんです。<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgr0zV8BqhgAcfkSEyf7zSSj4-uxp4AHZ4P5ThqASMKwaMT1vq4zT8PFl15ZphydRO8frCWWk8r6H2IMIxsiqD3MT45tdsD9z9gGNfOgK7I_CQ89PLuJKjISvQt503S7BsotSjJGDFnGR3L/s1600/capture_image.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5552937253770178690" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgr0zV8BqhgAcfkSEyf7zSSj4-uxp4AHZ4P5ThqASMKwaMT1vq4zT8PFl15ZphydRO8frCWWk8r6H2IMIxsiqD3MT45tdsD9z9gGNfOgK7I_CQ89PLuJKjISvQt503S7BsotSjJGDFnGR3L/s320/capture_image.png" style="cursor: hand; cursor: pointer; height: 244px; width: 320px;" /></a><br />
<br />
この場合、UI的にマルチタッチと全く同じ作法にするのは問題があるのです。タッチ操作であれば画面上のオブジェクトに触れる前にどこに触れるか分かりますが、空中操作、しかもKinectのように画面から離れて操作するものの場合は、<b>実際に手を出してみないとどこにカーソルが表示されるか分かりにくい</b>ですよね。<br />
<br />
普通タッチパネルでは触った=マウスダウンと同じ操作になり、ロールオーバーとダウン操作を共存させる事が出来ないのですが、前述の理由からKinectの場合はそれが必要になってきます。本家Microsoftは長押しの様な動作で決定(ダウン)操作としていますが、幸いにしてKinectは各ポイントのz値も取れるので、今回は各ポイントのz値がある閾値を下回ったら(手が前に突き出されたら)ダウン状態、閾値を越えたら(手が引っ込んだら)アップ状態として扱う事にします。<br />
<br />
今回のデモでは、自前の汎用マルチポインタライブラリを使用しています。ポインタが「認識」「ダウン」「移動」「アップ」「消失」した状態をそれぞれ持つ事が出来、さらにポインタの下にある各DisplayObjectがイベントを発行するように設計したため、MouseEventと同じ様に使う事が出来ます。また、Kinectのような特殊なシステムでない、普通のマルチタッチにも対応できるようになっています。以前のエントリにある<a href="http://sd-tech-blog.blogspot.com/2010/12/blog-post_16.html">「自作マルチタッチシステムを作ってみた」</a>でも、このクラスを使用してマルチタッチを実装しました。<br />
<br />
まず、コンストラクタでマルチタッチの用意をし、XMLSocketコネクトのための準備をします。<br />
<br />
<pre class="brush:as3" title="Main.as">//==========================
//コンストラクタ
//==========================
public function Main():void{
//
mp=new MultiPointer(-1 , false);
mp.simulate=true;
mp.registerDefaultCursor(HandCursor);
addChild(mp);
//
connect_btn.addEventListener(MouseEvent.CLICK , connectStart);
//
}
</pre><br />
<br />
マルチタッチに用いるクラスは<a href="http://sd-tech-blog-as3-library.googlecode.com/svn/trunk/doc/com/sdtech/pointer/MultiPointer.html">「MultiPointer」</a>クラスです。汎用クラスとして色々出来るように作ってあるのですが、ここでは詳しい説明は割愛します。<br />
詳細は<a href="http://sd-tech-blog-as3-library.googlecode.com/svn/trunk/doc/index.html">Google Codeにアップしたドキュメント</a>をご覧下さい。<br />
<br />
<pre class="brush:as3" title="Main.as">//==========================
//接続開始
//==========================
private function connectStart(e:MouseEvent):void{
//
socket=new XMLSocket();
socket.addEventListener(Event.CONNECT , connectComplete);
socket.addEventListener(DataEvent.DATA , receiveData);
socket.connect(ip.text , int(port.text));
//
}
//
//
//==========================
//接続完了
//==========================
private function connectComplete(e:Event):void{
//接続のためダミーデータを送信(サーバー仕様による)
socket.send("test");
}
</pre><br />
<br />
ステージ上にあるボタンを押したら接続を開始し、接続が完了したらサーバーにデータを送信します。これは今回作成したサーバー側の仕様で、一旦双方向に通信しないと接続が確立出来ないようになっているためです。<br />
<br />
<pre class="brush:as3" title="Main.as">//==========================
//データ受信
//==========================
private function receiveData(e:DataEvent):void{
//
//データ解析
var data:Array=e.data.split(",");
var id:int=data[0];
var parts:int=int(data[1]);
var x:Number=Number(data[2]);
var y:Number=Number(data[3]);
var z:Number=Number(data[4]);
//
//一意のIDを作成
var pointer_id:int=int(parts.toString()+id.toString());
//
//ポインタ認識
mp.detect(x,y,pointer_id);
//ポインタを動かす
mp.move(x,y,pointer_id);
if(z<1500){
mp.down(x,y,pointer_id);
}else{
mp.up(x,y,pointer_id);
}
//
}
</pre><br />
<br />
データを受信したら、受信したデータを解析してMultiPointerクラスに渡します。 今回、データは「,」区切りの文字列として送信されてくるので、splitで分割し、それぞれの変数に入れていきます。 サーバーから送られてくるデータの中身は <br />
<br />
<b>ユーザーID , パーツ名(左手9/右手15) , x座標 , y座標 , z座標</b><br />
<br />
というフォーマットになっています。<br />
このデータを受け、ポインタ生成部分は以下のようになっています。 <br />
<br />
<pre class="brush:as3" title="Main.as">//一意のIDを作成
var pointer_id:int=int(parts.toString()+id.toString());
//
//ポインタ認識
mp.detect(x,y,pointer_id);
//ポインタを動かす
mp.move(x,y,pointer_id);
if(z<1500){
mp.down(x,y,pointer_id);
}else{
mp.up(x,y,pointer_id);
}
</pre><br />
<br />
MultiPointer内に以下のメソッドがあり、それぞれ<br />
<br />
・ポインタ認識 - detect()<br />
・ポインタ移動 - move()<br />
・ポインタ押下 - down()<br />
・ポインタ押上 - up() <br />
<br />
そしてここでは出てきていないですが、<br />
<br />
・ポインタ消失 - lost()<br />
<br />
となっています。<br />
<br />
各関数にはx , y , idの引数を渡す必要があり、ここではマルチユーザーに対応するためパーツのIDとユーザーIDを一旦String形式で結合し、intに変換する事で一意のIDを生成しています。<br />
<br />
押下/押上の判定については、z値を使用しています。暫定的に閾値を1500と設定し、手の前後操作でdown/upをそれぞれ実行するようにしています。<br />
肝心のマルチタッチを受けてオブジェクトを操作する部分ですが、これは良く使う操作ですので、基本クラスとして用意しました。 ステージ上のオブジェクトの基本クラスに<a href="https://sd-tech-blog-as3-library.googlecode.com/svn/trunk/doc/com/sdtech/pointer/handling/PointerHandlingObject.html">「PointerHandlingObject」</a>というクラスを設定しています。このクラスは、マルチポイントによる操作と言えば王道な移動、拡縮、回転をサポートしています。<br />
<br />
これで、Kinectと接続してFlash上のオブジェクトを操作する簡単なデモが出来ました。<br />
Flashのソース: <a href="https://sites.google.com/site/sdtechblog2010/home/blogdata/KinectFlash_sdtech.zip">KinectFlash_sdtech.zip</a><br />
<br />
今回使用した「MultiPointer」クラスは<a href="http://sd-tech-blog.blogspot.com/2010/12/blog-post_16.html">「自作マルチタッチシステムを作ってみた」</a>でも使用しているのですが、その解説はまた今度ということで。soumihttp://www.blogger.com/profile/13715617615138609870noreply@blogger.com0tag:blogger.com,1999:blog-9047895092362119203.post-21804351561097145942010-12-20T23:36:00.278+09:002011-04-22T20:16:36.063+09:00[Kinectハック]OpenNI+Flashでマルチユーザー・マルチタッチ OpenNI解析編<object height="344" width="425"><param name="movie" value="http://www.youtube.com/v/kipvbVTAmWk?hl=ja&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/kipvbVTAmWk?hl=ja&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br />
<br />
少し乗り遅れ気味ですが、Kinectネタを。<br />
OpenNIの登場でKinectのユーザーのスケルトン情報が一通り取れるようになったので、<br />
それをFlashへの橋渡しをして、マルチユーザー・マルチタッチな環境を作りました。 <br />
<br />
これでFlashでもNaturalInterfaceコンテンツを作れるんダゼ!<br />
<br />
今回は「OpenNI解析編」ということで、<br />
Kinectを購入してから、OpenNIを解析、Flashへ信号を投げるまでの解説です。<br />
<br />
<br />
■開発環境<br />
kinect制御端末 : WinXP VisualC++ Express2010<br />
コンテンツ端末:MacOSX FlashCS4<br />
ソケット通信で Win→Macへユーザーの手の位置を送ります。 <br />
<br />
<br />
Kinectハックの手順は先人たちをお手本に。<br />
<br />
<b>WindowでKinectを繋ぐまでの手順:</b><br />
<a href="http://www.cyber.t.u-tokyo.ac.jp/~take/kinect/openni-windows-kinect.html">OpenNI: WindowsでKinectを使う</a><br />
<br />
<b>OpenNIをビルドするまで</b><b>の手順</b><b>:</b><br />
<a href="http://blog.goo.ne.jp/roboz80/e/f4299308eda1689ed8646238d61e3787">OpenNIをVisual C++ 2010 Expressでビルド&デバックするまでの手順。</a><br />
<br />
<br />
上記サイトを参考にOpenNIを改変できるようにしたら、<br />
OpenNIと一緒にインストールされたサンプルから改変しやすそうなのを探します。<br />
NiUserTracker.exeはスケルトン表示までできているので、<br />
今回はこれにソケット通信を追加しました。<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgr72L3NDh4vj9lcaRDwCT6Ao4aQojkETu3LbMWgCg0MhrQ9tQqjGL2k1zs2FrYe1uxonhvXQk-aRe7kSuI4iYai4vK6CNvtEoww5inPWAtWlVLRkTJ_SrMt7e_-NROwzbf7HcVITLukGOt/s1600/openNI_skelton.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgr72L3NDh4vj9lcaRDwCT6Ao4aQojkETu3LbMWgCg0MhrQ9tQqjGL2k1zs2FrYe1uxonhvXQk-aRe7kSuI4iYai4vK6CNvtEoww5inPWAtWlVLRkTJ_SrMt7e_-NROwzbf7HcVITLukGOt/s320/openNI_skelton.jpg" width="320" /></a></div>C++は初めてなので、ここから、かなり試行錯誤してます…。<br />
「<a href="http://blog.livedoor.jp/akf0/archives/51585502.html">【C++】ソケット通信</a>」を参考にして、SocketServerクラスを作りました。<br />
クラスファイル間のアクセス方法がわからなかったんですが、<br />
ハッシュファイルというのを作るんですね。ちょっと面倒です…。<br />
SocketServerクラスにconnectとsend関数を作り、<br />
send関数に送りたい信号を投げるとソケットで通信するようになりました。 <br />
<br />
<pre class="brush:cpp" title="SocketServer.cpp">#include <stdio.h>
#include <winsock2.h>
SOCKET s, s1; //ソケット
//
//connect
int connect(){
int result; //戻り値
//接続を許可するクライアント端末の情報
struct sockaddr_in source;
char buffer[1024]; //受信データのバッファ領域
char ans[] = "送信成功";
memset(&buffer, '\0', sizeof(buffer));
//送信元の端末情報を登録する
memset(&source, 0, sizeof(source));
source.sin_family = AF_INET;
//ポート番号はクライアントプログラムと共通
source.sin_port = htons(3000);
source.sin_addr.s_addr = htonl(INADDR_ANY);
//ソケット通信の開始準備
WSADATA data;
result = WSAStartup(MAKEWORD(2, 0), &data);
if (result < 0){
printf("%d\n", GetLastError());
printf("ソケット通信準備エラー\n");
}
//ソケットの生成
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (s < 0){
printf("%d\n", GetLastError());
printf("ソケット生成エラー\n");
}
//ソケットのバインド
result = bind(s, (struct sockaddr *)&source, sizeof(source));
if (result < 0){
printf("%d\n", GetLastError());
printf("バインドエラー\n");
}
//接続の許可
result = listen(s, 1);
if (result < 0){
printf("接続許可エラー\n");
}
printf("接続開始\n");
s1 = s;
//クライアントから通信があるまで待機
s1 = accept(s, NULL, NULL);
if (s1 < 0){
printf("待機エラー\n");
}
//クライアントから送信されたデータの受信
result = recv(s1, buffer, 10, 0);
if (result < 0){
printf("受信エラー\n");
}
printf("%sを受信しました\n", buffer);
return 0;
}
//
//send
int send(char id[],char part[] ,char px[],char py[],char pz[]){
int result; //戻り値
char str[50]= "";
//
sprintf_s(str,"%s,%s,%s,%s,%s",id,part,px,py,pz);
//
result = send(s1, str, strlen(str)+1, 0);
return result;
}
</winsock2.h></stdio.h></pre><br />
<br />
Flashには、ユーザーの手の情報を送りたいので、 スケルトンを描画しているクラスを解析します。 <br />
<b>SceneDrawer.cppの中のDrawLimb()</b>がそれです。<br />
<br />
<pre class="brush:cpp" title="SceneDrawer.cpp">void DrawLimb(XnUserID player, XnSkeletonJoint eJoint1, XnSkeletonJoint eJoint2)
{
if (!g_UserGenerator.GetSkeletonCap().IsTracking(player))
{
printf("not tracked!\n");
return;
}
XnSkeletonJointPosition joint1, joint2;
g_UserGenerator.GetSkeletonCap().GetSkeletonJointPosition(player, eJoint1, joint1);
g_UserGenerator.GetSkeletonCap().GetSkeletonJointPosition(player, eJoint2, joint2);
if (joint1.fConfidence < 0.5 || joint2.fConfidence < 0.5)
{
return;
}
XnPoint3D pt[2];
pt[0] = joint1.position;
pt[1] = joint2.position;
g_DepthGenerator.ConvertRealWorldToProjective(2, pt, pt);
glVertex3i(pt[0].X, pt[0].Y, 0);
glVertex3i(pt[1].X, pt[1].Y, 0);
}
</pre><br />
このコードから<b>GetSkeletonJointPosition()</b>がユーザーの部位の位置を返す関数だとわかります。<br />
<b>ユーザーIDと体の部位を指定するとx,y,z座標を返してくれます。 </b><br />
DrawLimb()を改変した関数SendPosition()を作り、SocketServerのsendに送ります。<br />
<br />
<pre class="brush:cpp" title="SceneDrawer.cpp">void SendPosition(XnUserID player,int id, XnSkeletonJoint part,char _part[2])
{
if (!g_UserGenerator.GetSkeletonCap().IsTracking(player))
{
printf("not tracked!\n");
return;
}
XnSkeletonJointPosition joint1;
g_UserGenerator.GetSkeletonCap().GetSkeletonJointPosition(player, part, joint1);
XnPoint3D pt[1];
pt[0] = joint1.position;
g_DepthGenerator.ConvertRealWorldToProjective(1, pt, pt);
//
char _id[2] = "";
sprintf( _id, "%d", id);
//
char _px[10] = "";
sprintf( _px, "%.3f", pt[0].X);
//
char _py[10] = "";
sprintf( _py, "%.3f", pt[0].Y);
//
char _pz[10] = "";
sprintf( _pz, "%.3f", pt[0].Z);
//
send(_id,_part,_px,_py,_pz);
}
</pre><br />
以上で、OpenNIにソケット通信を追加できました。 <br />
今回は手の位置だけですが、顔や胴、足の位置も同じ仕組みで取得できます。<br />
<br />
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">ここまでのソース: <a href="https://sites.google.com/site/sdtechblog2010/home/blogdata/NiUserTracker_sdtech.zip?attredirects=0&d=1">NiUserTracker_sdtech.zip</a><br />
<br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"></div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="Apple-style-span" style="background-color: white; color: red;"><s>※VS上のデバックビルドでは動きますが、exeだとソケット通信開始時に落ちてしまいます。</s></span></div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="Apple-style-span" style="background-color: white; color: red;"><s>いいところまで出来ているのに、なぜ…。</s></span><br />
<span class="Apple-style-span" style="background-color: white; color: red;">[追記 2010.12.22]</span><br />
<span class="Apple-style-span" style="color: red;">exeでも動くようになりました。</span><br />
<span class="Apple-style-span" style="color: red;">OpenNI/Data内の<b>「SamplesConfig.xml」</b>を読み込んでいたのですが、</span><br />
<span class="Apple-style-span" style="color: red;">開発環境とexeではパスが変わってしまうので、読めなくなっていたようです。</span><br />
<span class="Apple-style-span" style="color: red;"><br />
</span><br />
<span class="Apple-style-span" style="color: red;">main.cppの</span><br />
<span class="Apple-style-span" style="color: red;"><b>#define SAMPLE_XML_PATH "../../Data/SamplesConfig.xml"</b>を</span><br />
<span class="Apple-style-span" style="color: red;"></span><br />
<span class="Apple-style-span" style="color: red;"><b>#define SAMPLE_XML_PATH "SamplesConfig.xml"</b>として、</span><br />
<span class="Apple-style-span" style="color: red;">exeと同じディレクトリに<b>SamplesConfig.xml</b>をコピーすれば、</span><br />
<span class="Apple-style-span" style="color: red;">落ちなくになります。</span><br />
<br />
<br />
続きは<a href="http://sd-tech-blog.blogspot.com/2010/12/kinectopenniflashflash.html">Flash編</a>へ。</div><div></div><br />
<br />
<table style="border-collapse: collapse; border-spacing: 0; border-width: 0px; font-size: 12px; line-height: 1.5; margin: 0; padding: 5px;"><tbody>
<tr><td style="border-width: 0px; padding: 5px 5px 0 5px; text-align: center; vertical-align: top;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B003T9VDJQ/fksnstore-22/ref=nosim/"><img alt="Xbox 360 Kinect センサー" src="http://ecx.images-amazon.com/images/I/41Q%2BCtGuJcL._SL160_.jpg" style="border-style: none; margin: 0; padding: 0;" /></a></td><td style="border-width: 0px; padding: 5px 5px 0 0; text-align: left; vertical-align: top;"><div><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B003T9VDJQ/fksnstore-22/ref=nosim/">Xbox 360 Kinect センサー</a></div><div>定価:¥ 14,800</div><div>新品最安価格:<span style="color: black; font-weight: bold;">¥ 17,300</span> (2店出品)</div><div>売上ランク:62位</div><div>レビュー平均:<img alt="4.5" src="http://www.art-ing2.jp/amazon/parts/Rating45.png" style="border-style: none; margin: 0; padding: 0;" />4.5点 (127人がレビュー投稿)</div></td></tr>
<tr><td colspan="2" style="border-width: 0px; padding: 0 5px 5px 5px;"><div style="color: grey; font-size: 10px; text-align: right;">by <a href="http://www.art-ing2.jp/amazon/item.aspx?ii=B003T9VDJQ" style="color: grey;">amazon通販最速検索</a> at 2010/12/21</div></td></tr>
</tbody></table>fukusinhttp://www.blogger.com/profile/02654126877276758457noreply@blogger.com6tag:blogger.com,1999:blog-9047895092362119203.post-8843255080032594782010-12-20T00:37:00.014+09:002011-01-10T21:18:12.030+09:00Android(Galaxy Sのみ)でどの画面からでも画面の明るさを変更する方法 (追記あり)何となく携帯(Galaxy S)をいじっていたら、設定等開かずに画面の明るさを変更する方法を発見したのでご紹介します。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNXxM99TJ9-PsXAUXmxyjoJa_hLbUYs6YzP6WDV1s_ZsCEp2Nibyws0xCDgfhRv5uAFgkHFXCc_u27-UgU5R0TBsfO605SulWccVFyzvKLYLW_pnlxzOwtnazDLg9GNSfNrRIEYg6PjJQP/s1600/device.png"><img style="cursor:pointer; cursor:hand;width: 192px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNXxM99TJ9-PsXAUXmxyjoJa_hLbUYs6YzP6WDV1s_ZsCEp2Nibyws0xCDgfhRv5uAFgkHFXCc_u27-UgU5R0TBsfO605SulWccVFyzvKLYLW_pnlxzOwtnazDLg9GNSfNrRIEYg6PjJQP/s320/device.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5552418232240300082" /></a><br /><br />Androidにはウィジェットがあるので、Galaxy Sであれば「消費電力の調整」というウィジェットを配置すればホーム画面から直接画面の変更する事が可能です。<br />画像の右端のアイコンがそうで、off(ユーザー設定のまま)、on(明るさ中)、on(明るさ大)、autoが順番に切り替わります。<br />ただ、この方法だといちいちホームに戻って来なければいけません。設定まで行かなくて済む、という点では便利ですが…<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjanX4zq2vhVFeb9kYGYEC5okjZ2OAxGaoA0SLSs4L3wnGzU0Ow1MqHyQKwJpf3phyphenhypheniidTq8hzx1zHsDowH2Pso2cLi98fzkEpJMtElNb-n_lvj_r9stDyJlwS71TFG8bRJvwYJhm_tbGaK/s1600/device2.png"></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjanX4zq2vhVFeb9kYGYEC5okjZ2OAxGaoA0SLSs4L3wnGzU0Ow1MqHyQKwJpf3phyphenhypheniidTq8hzx1zHsDowH2Pso2cLi98fzkEpJMtElNb-n_lvj_r9stDyJlwS71TFG8bRJvwYJhm_tbGaK/s1600/device2.png"><img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 192px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjanX4zq2vhVFeb9kYGYEC5okjZ2OAxGaoA0SLSs4L3wnGzU0Ow1MqHyQKwJpf3phyphenhypheniidTq8hzx1zHsDowH2Pso2cLi98fzkEpJMtElNb-n_lvj_r9stDyJlwS71TFG8bRJvwYJhm_tbGaK/s320/device2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5552419590195471730" /></a><br />しかし、実はステータスバーを操作する事でどの画面からでも画面の輝度を変更可能です。操作方法は<br /><br /><b>1.ステータスバーを長押し<br />2.通知領域が消えたら左右にドラッグ</b><br /><br />です。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8pXkV_4HACPm7D9TjH5wOd42X3sbqs_bLm7zTA6yieRvHZ2TgxdNS97RNN7DpAXd9WsyUR-VmZ47qVVlkWwkWIA8NzxOHokysZW6cqXMmQSqThyphenhyphenmTJJKMF5MgEwWRyxEvKkT3Y7IlR4DZ/s1600/device3.png"><img style="cursor:pointer; cursor:hand;width: 192px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8pXkV_4HACPm7D9TjH5wOd42X3sbqs_bLm7zTA6yieRvHZ2TgxdNS97RNN7DpAXd9WsyUR-VmZ47qVVlkWwkWIA8NzxOHokysZW6cqXMmQSqThyphenhyphenmTJJKMF5MgEwWRyxEvKkT3Y7IlR4DZ/s320/device3.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5552422653576529346" /></a><br /><br />明るさは絶対値指定のようで、ステータスバーの左側に行くほど暗くなり、右側に行くほど明るくなります。<br /><br />今までも、何もしていないのに何故か突然画面の明るさが変わってしまうことがあって不思議に思っていたのですが、恐らくこの操作を行っていたのでしょう。<br /><br />説明書に書いてあるのかもしれませんが、買ってから一切読んでいないので見落としていたのかも…<br /><br /><font color="#FF0000">2011/1/6追記</font><br />店頭で試した所、どうやらこのワザはGalaxy Sでしか使えないようです。<br />Galaxy S / Xperia / HTC Desire HD / IS03で確認しましたが、Galaxy Sでのみ動作しました。<br /><br /><font color="#FF0000">2011/1/10追記</font><br />ヨドバシとドコモショップにて店頭に展示してある複数の端末(4台)で試した所、Galaxy Sでも使える物と使えない物があるようです…<br />ヨドバシにあった3台中2台、ドコモにあった1台では成功しました。<br />OSのバージョン等見てみたが、どれも一緒でした。ただ、使えなかった端末は通知領域の「Bluetooth」の文字が入りきっておらず、最後の「h」が改行されていました。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2TDzHVxKxQ1uyvtUjMqrOWZenOif9HCSjKo_djDc2wGqqcF3za82mylirqlJ7K6wUgzsmBInnYbjnKUOE6_hQSPvd9dtb4K2rI2XBu3FUYYw35OaMkWesjfHuwr5cwrB3s1QpusYwTLzw/s1600/device4.png"><img style="cursor:pointer; cursor:hand;width: 192px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2TDzHVxKxQ1uyvtUjMqrOWZenOif9HCSjKo_djDc2wGqqcF3za82mylirqlJ7K6wUgzsmBInnYbjnKUOE6_hQSPvd9dtb4K2rI2XBu3FUYYw35OaMkWesjfHuwr5cwrB3s1QpusYwTLzw/s320/device4.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5560469258126712722" /></a><br /><br />使えなかった端末は今回触った端末の中で1つだけだったので要確認ですが、この表示と挙動の違いに因果関係があるかは不明です…<br /><br /><font color="#FF0000">2011/1/10追記2</font><br />このブログを見てくれた友達が、自分の端末では出来なくて、Bluetoothの文字も全部入ってると教えてくれました。<br />ちょっと思い当たる所を探してみたのですが、「自動明るさ調整」が有効になっているとこのワザは無効になってしまうようです。なので、上の画像は見当違いな事言ってます(笑)でもまぁ、現に店頭でそういう端末個体差があったので、画像はこのままにしておきます。<br />自動調整とは共存できないですが、バッテリーの節約のため手動で!という方は<br /><br /><b>「設定」->「画面設定」->「明るさ」->「自動明るさ調整」のチェック</b><br /><br />を外す事でこのワザが使えるようになります。soumihttp://www.blogger.com/profile/13715617615138609870noreply@blogger.com0tag:blogger.com,1999:blog-9047895092362119203.post-67290990329937457522010-12-16T19:55:00.009+09:002010-12-17T13:36:58.585+09:00自作マルチタッチシステムを作ってみたいまさら感がありますが、「<a href="http://www.aivy.co.jp/BLOG_TEST/nagasawa/b/2008/05/5_1.html">5分で作れるマルチタッチパネルシステム</a>」を参考に<br />
マルチタッチシステムを作ってみました。<br />
上記のシステムは「<a href="http://www.nuigroup.com/touchlib/">Touchlib</a>」を使っていますが、<br />
今回は「<a href="http://ccv.nuigroup.com/">Community Core Vision v1.4 (CCV)</a>」を使って、Flashと連携させました。<br />
少し前まで「tbata」という名前だったんですが、いつの間にか「CCV」に変わってますね。<br />
<br />
<div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC_I_q2EAwcm-0EWC1wUbr7nGlcO4iS9smNhNTEOeHqLKD__XPANCD1Pu7jS4Wa_c64p1iUWn7qtHZwlLzXDog0NHQZ_v5L9lmgL6MHMaYabk3ZU6n4UdX84MiuIMoMGMQnS2SUgmleh3C/s1600/ccv_1.4.JPG" imageanchor="1"><img border="0" height="252" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC_I_q2EAwcm-0EWC1wUbr7nGlcO4iS9smNhNTEOeHqLKD__XPANCD1Pu7jS4Wa_c64p1iUWn7qtHZwlLzXDog0NHQZ_v5L9lmgL6MHMaYabk3ZU6n4UdX84MiuIMoMGMQnS2SUgmleh3C/s400/ccv_1.4.JPG" width="400" /></a></div><br />
この記事を書いた時点でのCCV最新版は1.3ですが、<br />
<a href="http://nuicode.com/projects/ccv/files">プロジェクトページ</a>ではv1.4βが配布されています。<br />
v1.4βではReacTable等で使われるFiducialsマーカーを認識できるようになっています。<br />
<br />
<br />
作る際に用意したものは、<br />
-----------------------------------<br />
・スチレンボードで作ったテーブル<br />
・トレーシングペーパーで作ったテーブル天板<br />
・赤外線カメラ<br />
・赤外線ライト<br />
-----------------------------------<br />
<br />
赤外線カメラはフレームレートの高いものを用意すると認識精度が上がります。<br />
100fps出るモーションキャプチャ用の<a href="http://www.mocap.jp/optitrack/product/flexv100r2.html">OptiTrack FLEX:V100R2カメラ</a>を用意できるのが理想ですが、<br />
<a href="http://www.jp.playstation.com/ps3/peripheral/cejh15007.html">PlayStationEye</a>でも十分精度が高いです。<br />
実はPSeye値段に似つかわしくない程ハイスペックで、なんと640x480の解像度で75fps出ます。<br />
数万円してもおかしくないのに3000円でお釣りがきちゃいます。<br />
このコストパフォーマンスの高さからなのか画像認識まわりではPSeyeを使うのが常套手段になっていますねー。<br />
<br />
今なら、PSeyeとMOVEコントローラがセットになった「<a href="http://www.amazon.co.jp/exec/obidos/external-search?tag=fksnstore-22&keyword=%E3%82%BD%E3%83%8B%E3%83%BC%E3%83%BB%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%82%A8%E3%83%B3%E3%82%BF%E3%83%86%E3%82%A4%E3%83%B3%E3%83%A1%E3%83%B3%E3%83%88&mode=blended" target="_blank">PlayStationMOVE スターターパック</a>」を<br />
買うのが賢いかも。<br />
MOVEコントローラみたいな赤外線ペンライトがあるとキャリブレーションがすごく楽です。<br />
<br />
<br />
PSeyeの赤外線カメラ化は<a href="http://nuigroup.com/forums/viewthread/4189/">ここ</a>と<a href="http://jyproduct.webhop.net/iphone/?p=316">ここ</a>を参考にしました。<br />
可視光をカットするIRフィルターは富士フイルムの「<a href="http://www.amazon.co.jp/IR-86-7-5X1-%E5%85%89%E5%90%B8%E5%8F%8E%E3%83%BB%E8%B5%A4%E5%A4%96%E7%B7%9A%E9%80%8F%E9%81%8E%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E3%83%BC/dp/B000BOZXNE">IR 86</a>」を使いました。<br />
ただ、このフィルターだと蛍光管の光も少し拾ってしまうので、<br />
どなたか最適なIRフィルターがあれば教えて下さい。<br />
<br />
<br />
PSeyeのドライバは<a href="http://codelaboratories.com/">Code Laboratories</a>の「<a href="http://codelaboratories.com/products/eye/driver/">CL Eye Platform DriverCL Eye Platform Driver</a>」を使います。<br />
このドライバにはノーマルモードとアドバンスモードがあって、<br />
「640x480/75fps」で使用するにはまずアドバンスモードにする必要があります。<br />
<br />
アドバンスモードにするには、下のコードをメモ帳にコピペして、「cleye.config」として保存します。<br />
<pre class="brush:xml"><cleye>
<item name="mode" value="advanced">
</item>
</cleye>
</pre>このファイルを「Community Core Vision.exe」と同じディレクトリに配置すると「640x480/75fps」が選べるようになります。<br />
<br />
<br />
立ち上げる度に設定するのは面倒なので、<br />
CCVの「data/config.xml」の一部を下のように書き換えて、自動的で「640x480/75fps」にします。<br />
<br />
<pre class="brush:xml"><camera_0>
<usecamera>1</usecamera>
<device>0</device>
<width>640</width>
<height>480</height>
<framerate>75</framerate>
</camera_0>
</pre><br />
これで運用時に楽になります。<br />
<br />
<br />
赤外線ライトはなんでもいいのですが、ケイヨーの「<a href="http://eb-keiyo.jp/shopdetail/026002000005/">K-Light</a>」あたりがオススメです。<br />
<br />
あとは、CCVを起動してFlash XMLにチェックを入れておくとCCV-Flash間でソケット通信してくれます。<br />
<br />
<br />
<table class="yztbl"><tbody>
<tr valign="top"><td class="yz-image"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B0036BA0KA/fksnstore-22/" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51hTD7LkFCL._SL160_.jpg" style="border: none;" /></a></td><td class="yz-info"><div class="yz-name"><a href="http://yasazon.com/asin/B0036BA0KA.html" target="_blank"><img align="left" border="0" src="http://images-jp.amazon.com/images/G/09/icons/icon-videogames.gif" /></a><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B0036BA0KA/fksnstore-22/" name="yzlink" target="_blank">PlayStation Move スターターパック</a></div><div class="yz-detail" style="font-size: small;"><a href="http://www.amazon.co.jp/exec/obidos/external-search?tag=fksnstore-22&keyword=%E3%82%BD%E3%83%8B%E3%83%BC%E3%83%BB%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%82%A8%E3%83%B3%E3%82%BF%E3%83%86%E3%82%A4%E3%83%B3%E3%83%A1%E3%83%B3%E3%83%88&mode=blended" target="_blank">ソニー・コンピュータエンタテインメント</a> </div></td></tr>
</tbody></table>fukusinhttp://www.blogger.com/profile/02654126877276758457noreply@blogger.com0tag:blogger.com,1999:blog-9047895092362119203.post-41177860981568876422010-12-16T13:21:00.030+09:002011-01-28T21:00:31.297+09:00タイムラインにMCを置いてgotoAndStopでフレームを移動するときの注意タイムライン上に画像等を配置して、フレームを動かす事によってMCの内容を切り替えるという手法、まだまだよく使います。しかし、フレームに配置されている要素がMCだった場合、少し注意が必要です。<br />
<br />
例えばA.asというクラスを持ったMCを1〜3フレームに配置します。<br />
各フレームにはキーフレームを切ってあり、MCの座標は各フレームで違い、各MCには60フレーム程のアニメーションが設定されているとします。<br />
<br />
<pre class="brush:as3">public function A():void{
addEventListener(Event.ADDED_TO_STAGE , init);
addEventListener(Event.REMOVED_FROM_STAGE , init);
trace("construct");
}
private function init(e:Event):void{
if(e.type==Event.ADDED_TO_STAGE){
trace("added");
gotoAndPlay(2);
}else{
trace("removed");
gotoAndStop(1);
}
}</pre><br />
<br />
のようにコードを書きます。<br />
すると、下記のような挙動になります。<br />
(マウスクリックで次のフレームに進みます)<br />
<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="500" height="460" id="test.swf" align="middle" style="color: rgb(51, 51, 51); font-family: 'trebuchet ms'; font-size: 13px; "> <param name="allowScriptAccess" value="sameDomain"><param name="movie" value="http://sdtech.fileave.com/20101216_test.swf"><param name="quality" value="high"><param name="bgcolor" value="#F1F1F1"><embed src="http://sdtech.fileave.com/20101216_test.swf" quality="high" bgcolor="#F1F1F1" width="500" height="460" name="test.swf" align="middle" allowscriptaccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed> </object><br />
<br />
各フレームに別のインスタンスを生成したつもりなのに、あたかも一つのインスタンスの座標が変わったかのようにアニメーション状態を引き継いでしまいます。<br />
これを回避するには、各MCに名前を付けると良いようです。<br />
下記は、各MCに名前を付けたものです。<br />
(マウスクリックで次のフレームに進みます)<br />
<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="500" height="460" id="test2" align="middle" style="color: rgb(51, 51, 51); font-family: 'trebuchet ms'; font-size: 13px; "> <param name="allowScriptAccess" value="sameDomain"><param name="movie" value="http://sdtech.fileave.com/20101216_test2.swf"><param name="quality" value="high"><param name="bgcolor" value="#F1F1F1"><embed src="http://sdtech.fileave.com/20101216_test2.swf" quality="high" bgcolor="#F1F1F1" width="500" height="460" name="test.swf" align="middle" allowscriptaccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed> </object><br />
<br />
タイムラインにMCを並べてレイアウト等を管理する時は、少しこの点に注意して作成した方が良いかもしれません。soumihttp://www.blogger.com/profile/13715617615138609870noreply@blogger.com0tag:blogger.com,1999:blog-9047895092362119203.post-70248058478879568162010-12-16T12:02:00.011+09:002011-03-25T19:45:41.507+09:00.svnファイルを削除するドロップレット<span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';">fukusinです。</span><br />
<span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';">バージョン管理にsubversionを使ってるんですが、</span><br />
<span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';">スクリプト使うグループワークでは必須ですね。</span><br />
<span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';">で、</span><span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';">subversionは</span><span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';">何かと便利なんですが、</span><br />
<span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';">データを人に渡す時にsubversionの管理ファイルが邪魔になります。</span><br />
<span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';">隠しファイルになっている「.svnファイル」ですね。結構、容量が大きい。</span><br />
<span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';"><br />
</span><br />
<span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';">そこで、フォルダ内の.svnファイルをすべて削除してくれるドロップレットを作りました。</span><br />
<span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';">winだとTortoiseSVNのexportで同じことができますが、</span><br />
<span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';">このドロップレットの方が手軽に使えると思います。</span><br />
<span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';">mac/win両方あります。</span><br />
<span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';"><br />
</span><br />
<div class="separator" style="clear: both; color: black; font-family: 'MS PGothic'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqqonNUbxPTkemwQzDR1QS1EXjDLEzczDZoG6OrHsKb3ZEwqGiNqgY11Zmm3ZmwIdNfyKhsNuBug_4Oawq8xrIUogCby00rxFpAam208x5NRxaqyOYhljouAXJk0SbQGIytnh84MlOrn7-/s1600/svn_cleaner_logo-thumb.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqqonNUbxPTkemwQzDR1QS1EXjDLEzczDZoG6OrHsKb3ZEwqGiNqgY11Zmm3ZmwIdNfyKhsNuBug_4Oawq8xrIUogCby00rxFpAam208x5NRxaqyOYhljouAXJk0SbQGIytnh84MlOrn7-/s320/svn_cleaner_logo-thumb.jpg" width="96" /></a></div><div style="color: black; font-family: 'MS PGothic'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">mac: <span class="Apple-style-span"><span class="Apple-style-span" style="outline-color: initial; outline-width: initial;"><u><a href="https://sites.google.com/site/sdtechblog2010/svn_cleaner_2_1_mac.zip?attredirects=0&d=1"><b>svn_cleaner_2_1_mac.zip</b></a></u></span></span></div><div style="color: black; font-family: 'MS PGothic'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">win: <b><span class="Apple-style-span"><span class="Apple-style-span" style="outline-color: initial; outline-width: initial;"><u><a href="https://sites.google.com/site/sdtechblog2010/svn_cleaner_2_1_win.zip?attredirects=0&d=1">svn_cleaner_</a></u></span></span><span class="Apple-style-span" style="color: #ab0404;"><u><a href="https://sites.google.com/site/sdtechblog2010/svn_cleaner_2_1_mac.zip?attredirects=0&d=1">2_1_</a></u></span><span class="Apple-style-span" style="color: #ab0404;"><u><a href="https://sites.google.com/site/sdtechblog2010/svn_cleaner_2_1_win.zip?attredirects=0&d=1">win.zip</a></u></span></b></div><div style="color: #333333; font-family: 'trebuchet ms'; margin-bottom: 0.75em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div></div><div style="color: #333333; font-family: 'trebuchet ms'; margin-bottom: 0.75em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">■使い方</div></div><div style="color: #333333; font-family: 'trebuchet ms'; margin-bottom: 0.75em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5551118186157919442" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm_zNLwPuPaXIJ9tcbtODohmfiPtUV9yV8f2mfUsd1EyetidfJ6Sy7zgfaWtPsCuS6tY0ElMyRpNa8aJIpkFs8zuLtSKHdoSLh0fjstMFiUvEEY78hpjBozPl-nYGXv9rnaXexhPiBMMNU/s400/svn_use.JPG" style="cursor: pointer; float: left; height: 91px; margin-bottom: 10px; margin-left: 0px; margin-right: 10px; margin-top: 0px; width: 229px;" /></div></div><div style="color: #333333; font-family: 'trebuchet ms'; margin-bottom: 0.75em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
<br />
<br />
<br />
<br />
フォルダをアイコンにドロップするだけです。</div></div><div style="margin-bottom: 0.75em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';">ドック、もしくはタスクバーに置いて使って下さい。</span><br />
<span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';"><br />
</span><br />
<span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';">■注意点</span><br />
<span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';">macは.svnファイルを削除してもチェックマークが残ります。</span><br />
<span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';">Finderを一旦終了させるとチェックマークが消えます。</span><br />
<span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';">ローカル以外のフォルダは失敗します。(いつか直したい…。)</span><br />
<span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';"><br />
</span><br />
<span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';">■対応OS</span><br />
<span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';">mac:Tiger/Leopardのみ動作確認済</span><br />
<span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';">win:XPのみ動作確認済</span><br />
<span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';">mac版はAppleScript、win版はC#とバッチファイルで作ってます。</span><br />
<span class="Apple-style-span" style="color: #333333; font-family: 'trebuchet ms';"><br />
</span></div></div><div style="color: #333333; font-family: 'trebuchet ms'; font-size: 13px; margin-bottom: 0.75em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"></div>fukusinhttp://www.blogger.com/profile/02654126877276758457noreply@blogger.com2tag:blogger.com,1999:blog-9047895092362119203.post-45707464155697660712010-12-05T02:04:00.010+09:002011-02-08T17:06:30.334+09:00iPhotoとAndroid (調査中)<b>2011.2.8追記</b><br />以下の症状、陥る条件が分かりました。以下にまとめましたので、どうぞ。(解決にはなっていませんが…)<br /><a href="http://www.sd-tech-blog.com/2011/02/mac-os-106iphotoandroid.html">Mac OS 10.6とiPhotoとAndroid</a><br /><br /><br />Android(Galaxy S)の写真をiPhotoに読み込ませようと思ったのですが、なぜかiPhoto上に表示されません。先代のフューチャーフォンで使っていたSDカードをそのまま使用していて、そちらで撮影した写真も入っているのですが、そちらの写真は表示されます。<br />いずれもSDカード直下にある「DCIM」フォルダ内にファイルがあり、それぞれ「100ANDRO」「100SHARP」というフォルダに写真が入っています。<br /><br />原因を色々調べてみた結果、どうやら画像ファイルの文字数とファイル名に含まれている文字に原因があるようです。<br />ファイル名を色々変更して何度か読み込み直してみた所、iPhotoは<b>「ファイル名が8文字ジャスト」</b>で<b>「ファイル名に"."や"-"を含まない」</b>画像ファイルのみ読み込むようです。先頭の文字は数字でもOKで、あまり調べてないですがとりあえずファイル名に"_"は使用できました。<br /><br />ちなみにAndroid純正カメラだとファイル名は<br />「2010-10-28 13.01.25.jpg」<br /><br />Vignetteでは<br />「2010-12-05-02-17-14-936.jpg」<br /><br />Camera360では<br />「C360_2010-11-23 10-19-37.jpg」<br /><br />…どれもアウト。<br /><br />他に良いカメラアプリがあるのかもしれないですが、メジャーどころはこんな所でしょうか。<br /><br />仕方ないので、写真管理にはiPhotoを使用しつつ、Androidの写真の取り込みにはPicasaを使用しています。<br /><br />PicasaはiPhotoのライブラリを読み込んで独自UIで一覧できるようになる上、顔認識機能があって、さらにそれをGoogleコンタクトと同期し、Picasaから顔写真を登録する事ができるのが魅力ですね。写真整理ついでにGoogleコンタクトが充実するのはスバラシイ。しかもタダ。<br /><br />ただ、この手順だとPicasaで取り込んだ後、D&DでiPhotoに取り込んで、それをさらにPicasaが読み込みにいくという手順になるので、大分回りくどいんですが…<br /><br />iPhoto側でもストレージから写真だけをピックアップする必要があり、試行錯誤があってこういう制約になっているのだとは思いますが、もっとうまい方法で写真をピックアップしてくれると嬉しいですね。<br /><br />現状では、Picasa等を経由するか、上記条件に当てはまるファイル名で出力するカメラアプリを探すのが良さそうです。<br /><br /><br /><b>2010.12.9追記</b><br />…と思ったら、会社のMac(iLife 09)では全部表示されました…(家のMacは11、アップグレード前の08でも不具合を確認)<br />端末固有の不具合なのかな?それともOSの違い等に左右されるのか…少し探ってみたいと思います。soumihttp://www.blogger.com/profile/13715617615138609870noreply@blogger.com0