2016年11月26日土曜日

快適なVR体験のために視力矯正手術ICL手術を受けてきました。(感想:2日目)

今日はICL手術の2日目ということで翌日検査に行ってきました。

眼圧チェック問題なし、視力両目1.5、炎症やレンズのズレなどもなく、全く問題なしとのことです!

検査は15分くらいで終了して帰宅しました。


実際、左目はほぼ完璧、右目は少し充血して視界がぼやけていますが、時間が経てば治るそうです。
手術後は目に触れてはいけないため、保護メガネを付けているので裸眼の感じが薄いのですが、それでもこんなによく見えるのかとびっくりします。

ただ、まだ眼が乾くと瞬きの際に痛いので、なるべく目薬をさすようにしています。


目の保護でめんどくさいのは寝る時は眼帯を付けて寝る必要があることです。
これが結構鬱陶しい。

寝返りをしようとすると、眼に眼帯がぶつかって「やべ、仰向けにならなきゃ」って目が覚めるので熟睡できません。


保護メガネもサイズがあっていないのか、ズレ下がってきたり、しっかり装着するとまぶたにメガネが当たって痛いです。

1週間はこれを続けないといけないそうなのでゲンナリしますね・・・


眼に水などが入ってはいけないので、洗顔ができません。
そのため、目が覚めて目やにを取るのが大変です。
大量に目薬をさして、ティッシュで拭き取っています。(あんまりいい方法じゃない気がする・・・)

お風呂も首から下しか洗えないので、顔はレンチンした濡れタオルで軽く拭く程度です。
もっと、ガシガシ洗いたい・・・

やっぱり手術後が一番めんどくさいですね。



手術後はどんな感じかというと、コンタクトを付けたような感じです。
メガネをかけなくてもよく見えますが、少しゴロゴロする感じがあります。(傷口のせいかもしれません。)

後、夜間の見え方ですが、やはりハロ・グレアが発生しています。
以前からメガネのときでも電灯を見ると、周りにBloomがかかったような光の拡散が見えましたが、その大きさが倍くらいになった気がします。
右目はまだ視界がぼやけているせいもあり、左目より大きくなっています。

まあ、光で周りが見えなかったり眩しく感じるということは無いので問題はなさそうです。
また、視力が安定すれば、ハロ・グレアも小さくなるそうです。


あと、気になったのは強い光を見るとICL特有のリングが見えることですね。

ホール型ICLは眼内の液体の循環を行うために穴を開けているのですが、これにより強い光を見ると輪っかが見えるそうです。

日中、太陽の下や、夜の電灯や車のヘッドライトが当たると、視界の中心から視界の半分くらいの半径のリングが見えます。
レンズフレアの輪っかのイメージです。

光が多いところだとリングが視界の端に大量に見えるのでわりと鬱陶しいです。
これはICLのレンズ上、しょうがないですね。
慣れるしかなさそうです。

強い光を見たイメージはこんな感じです。
 
手術前        →        手術後



それでは、次回は明日の2日後検診です。


-----------
新宿近くで視力矯正に興味のある方は友達紹介制度で割引できます!
私も紹介料がもらえるので嬉しいです
もしご興味がありましたらお声がけください!

ICL以外にもレーシック、オルソケラトロジーなど他の手術でも紹介制度がつかえるそうです。

ご連絡はTwitterのDMにてどうぞ!

2016年11月25日金曜日

快適なVR体験のために視力矯正手術ICL手術を受けてきました。(感想:手術当日)

2016/11/25(金)有給を取り、ICL手術を受けに行きました!

10時半に病院へ着き、受付。
手術に関する誓約書を提出し、支払いを行いました。

60万円の手術ですが、資料請求をした際に割引3万円のチケットが入っていたので57万円で済みました。

事前の検査時に予約を行い、その場でレンズ代30万円を支払っていたので当日の支払いは27万円。
クレジットカードで支払いを行ったところいつも使っているカードが上限で使えなかったので、めったに使わない2枚目のカードで支払いを行いました。
危ないw


11時45分くらいから瞳孔を開く目薬や麻酔の目薬を入れていきました。
1時間くらいかけて何度も入れるため待合室に流れているハウルの動く城をずっと見て時間を潰していました。懐かしい・・・。

その後、眼の検査をして別室へ。
カーテンが閉められた狭い部屋で座り心地の良い椅子で再度30分ほどかけて目薬を何度も入れていきました。

一通り目薬を入れ終わった後は手術後1週間やらないといけない事や気をつけないといけない事の説明を聞きました。
日中は3~4時間に1度目薬をさすこと。寝る時は眼帯を付けて寝ること。体は洗ってもいいけど顔はNG。濡れたタオルで洗うなどはOKなど。

その時もらった資料はこんな感じです。


そしていざ、手術台へ
メガネを外したまま案内されたので、手術室の様子はよくわかりませんでした・・・


4,5人のお医者さんが周りにいましたが、主に手術をするのは2人。

初めに麻酔の注射をうった後、手術する眼だけを出すマスクのようなのを被せられ、シールで固定。
そして、眼が閉じないように固定する器具でまぶたを固定されました。
(アニメとかの拷問シーンで出て来るやつだ・・・って何故かドキドキしました。)

眼の中を消毒液で洗い流したり、眼の周りを筆?のようなもので消毒していきました。


そしていざレンズ注入!

手術中は洗浄液で目の前はほぼ何も見えず、光がキラキラしている感じでした。
手術台の照明をまっすぐ見るように言われるのですが、眩しすぎて直視するのが難しいw
瞳孔開いてるからかすごい眩しいし、反射的に眼が別のところ見てしまう。
しばらく見ているとだんだん眩しさが麻痺してくるのでどうにかまっすぐ見れました。

まっすぐ見るように言われているのですが、目の横を切開しているのかレンズを押し込んでいるのか、無理やり眼が別の方向に向かされてしまうのでちょっと怖いですね。

麻酔のおかげで、痛みはほとんどありませんでした。
普段生活していて間違えて眼に指を突っ込んだときのほうが全然痛いです。

ただ、ここで間違えて眼を変な方向を向いてしまうとレンズの位置がズレたり切り口がひどいことになりそうですごく怖いです。
眩しい光や時々くる痛みで反射的に動かさないように必死で、緊張しすぎて肩凝りましたw


右目にレンズを入れた後は左目。
どちらも順調に進み、特に問題なく終わりました。
大体片目で15分くらいでしょうか。

終わってみればあっという間でしたが、手術中はかなり長く感じます。
お医者さんの「あ」とか「もうちょっと・・・」というようなつぶやきがすごく不安になりますw


手術後は、前にいた個室で目薬を指して1時間ほど目を閉じて安静。
寝ててもいいですよと言われましたが、さっきまであんなことされた後だったのでとても寝れず、ずっと眼を閉じてVRゲームの仕様を考えてました。

1時間たった後は眼の検査を行いました。
眼圧チェックや多分、レンズがズレていないか、出血がひどくないかなど見てもらいました。

検査の結果、眼圧は平常。レンズもOK.。手術後は結構充血する人が多いそうですが、私はそのあたりも大丈夫そうでした。
途中、自分で鏡を見た時は少し右目の一部が赤くなっていまいたが、たしかにそれほどひどくない様子。

問題なし!ということで無事手術は終了しました。


その後は帰ってよいとのことだったのですが、やはり手術後は視力が安定せず待合室でゆっくりしました。

イメージとしては朝ひどい目やにがついているかのように視界がボケた感じです。
実際、目薬を入れまくったためか目やにが多く、鏡をみると黒目の上に目やにがいくつも浮いていました。
目薬を入れてティッシュで拭いて洗い流そうとしましたが流れず・・・

しばらくしても改善しなかったので帰りました。

病院を出たのが14時だったので、大体手術に3時間半くらいで終了という感じですね。


帰ってからは取りためたアニメを見てぼーっと過ごしていましたが、視界の曇がなかなか晴れず、目が疲れてきたので仮眠を取りました。

20時ごろに起きて、せっかくなので手術のことをメモしようとブログに書いてみました。


左目はだいたい曇りが晴れてきたのですが右目はまだわずかに曇って異物感があります。右目は少し充血しているので治るまでに時間がかかりそうですね。

手術後には定期検診があり
1日、2日、1週間、2週間、1ヶ月、3ヶ月、6ヶ月、1年と検診を行います。

ここで問題が起きていなければOKということですね!

レンズのズレや眼の中に細菌が入るとめんどくさいようなので、問題が起きないかすごく心配です・・・


また、検診のたびにブログに術後の様子を書いてみますね。

それでは次回は翌日検診にて。

-----------
新宿近くで視力矯正に興味のある方は友達紹介制度で割引できます!
私も紹介料がもらえるので嬉しいです
もしご興味がありましたらお声がけください!

ICL以外にもレーシック、オルソケラトロジーなど他の手術でも紹介制度がつかえるそうです。

ご連絡はTwitterのDMにてどうぞ!

快適なVR体験のために視力矯正手術ICL手術を受けてきました。(感想:前日談)

VR元年となり、様々なVR機器が発売された2016年
いろんなVRを遊んでいるうちにメガネがすごく鬱陶しく感じ始めました。

そこで夏頃にICL(有水晶体眼内レンズ)手術というものを知り、興味を持ちました。
ICL参考:https://jp.discovericl.com/

そして今日(2016/11/25)、思い切ってICLの手術を受けて来ました!

せっかくなのでICL手術の感想を残しておこうと思います!


■はじめに
私の眼の悪さは小学1年生ごろにゲームのしすぎで0.3まで落ちてしまい、その頃からずっとメガネ生活でした。
高校に入ってからはコンタクトを入れていましたが、PC作業をしていると目がシバシバしたりズレて見えづらかったりとストレスになるので、大学の途中からは付けなくなりました。
手術する前は目の前10cm以下しか見えないくらいの視力で、検査時に計ったときは-7.7Dとのことでした。

Oculus DK1が発売されたとき、大学・大学院でもVRを研究していたので3万円の価格と視野角の広さに感動して色々開発したり遊んでいました。

ただ、そこで一番のストレスはメガネがぶつかって痛いことでした。

その頃からメガネが邪魔だなと思いつつ、きっと将来はVR HMDには度数調整機能がつくだろうと期待して待っていたのですが、その機能を持って発売されたのはGear VRだけでした・・・(細かくいうとOSVRなどもありますが)
Gear VRの度数調整は神機能だと思ったのですが、一番VRを楽しむにはPC,PS4のようなHD系VRコンテンツなので、すごくがっかりしました。Gear VRにもあったんだから、Riftには確実につくと期待していたのですが・・・
まだ、HTC ViveとPSVRはメガネが入りやすい作りなので我慢できましたが、Riftは入りづらくメガネを付けているとHMDの装着自体が結構大変です。HMDを被る事自体が億劫になってしまいます。




そして、視力矯正を決意したのは夏頃に東京ジョイポリスのゼロレイテンシーでした。オープンした時に直ぐに予約して行ったのですが、そこで装着したOSVRがメガネが全く入らない作りでした・・・
度数調整機能がありましたが、私の視力だと全く足りず、結局ぼやけた視界で敵なのか味方なのかわからないオブジェクトを狙うという経験をして、視力をどうにかしないと今後もVRが楽しめないぞと思い、視力矯正を調べ始めました。


■視力矯正の種類
視力矯正を調べると有名なレーシック以外にもいろいろあることがわかりました。

・レーシック
眼球の表面にある角膜をエキシマレーザーで削り、形状を変えることによって近視や乱視などを矯正する術式
参考URL:https://sightcure.jp/recovery/lasik01.html

・ReLEx(リレックス)
レーシックもリレックスも、「角膜のカーブを変えて視力を矯正する」点は同じ。ただし、カーブを変える方法はレーシックとリレックスで異なり、レーシックは「フタを開けて角膜を削る」のに対し、リレックスは「小さな穴から角膜を抜き取る」方法で角膜のカーブを変化させる。

レーシックよりも手術の傷口が小さいため、痛みが少なく、術後の視力回復も早い。また、手術時間も短くすむ。

・オルソケラトロジー
歯の矯正のように、特殊なハードコンタクトレンズをはめることによって角膜にクセをつけ、光の屈折率を調節して視力を回復する術式。
視力回復の効果が永続的でない反面、コンタクトの使用をやめるだけで角膜を元に戻すことができるため、その分、リスクも少なくすむ
参考URL:https://sightcure.jp/recovery/orthokeratology/orthokeratology01.html

・ICLホールタイプ(眼内コンタクトレンズ)
水晶体と虹彩の間に入れるレンズを挿入する術式。
目への負担が少なく、術後の視力の安定度が高い。また、レンズを取り出せば、眼を元の状態に戻せる。
参考URL:https://sightcure.jp/recovery/icl.html


レーシックは前から興味がありましたが、レーシック難民の話を聞いて怖くてできませんでした。
(今回の検査でレーシックは適応外だったことがわかったので、そもそも無理だったんですけどw)

一番安全そうなのはオルソケラトロジーのようですが、効果が永続的でないのと、毎晩コンタクトを入れる手間、自分のようなものぐさはハードコンタクトをちゃんと管理できる気がしなかったのでなし。

ICLは説明を読む限り安心そうだったので、ICLに興味を持ち手術を考えました。

しかし、手術代が60万円を超えるとのことだったので、なかなか決心がつかず1ヶ月ほど下調べしてましたw


■ICLとは
眼にレンズを入れて視力を矯正する術式。
費用が50万円~100万するらしく非常に高いです!
しかし、レーザーで切り取る非可逆式のレーシックと比べてレンズを入れるICLはレンズを取れば戻せるという点で安全そうです。

といっても完璧な手術というわけではないようで、メリットとデメリットを調べてみました。

・メリット
1.後遺症リスクが低い
レーシックのようにドライアイやハロ・グレアが起こりづらいそうです。
ただ、絶対に起こらないわけではありません。
レンズの大きさが正しくないと、ハロ・グレアが発生するそうです。

2.レーシック適応外の人でも受けられる
角膜が薄い人はレーシックが受けれられないようですが、ICLなら角膜を削らないため可能だそうです。

3.再近視化が起こりづらい
レーシックでは視力が再度悪くなることがある(再近視化)ようですが、ICLは起こりずらいそうです。

4.何か問題があればレンズを取り出すことができる
レーシックは削ってしまうので戻せませんが、ICLはレンズを取り出せば元に戻ります。
まあ、レンズを取り出す事態になれば相当まずい状況な気もしますが・・・


・デメリット
1.費用が高い
50万円~100万するので、軽い気持ちではできないですね・・・

2.手術ができるまで時間がかかる
レンズはその人にあったものを作るので、だいたい1ヶ月くらいかかります。
乱視が入ると2ヶ月~3ヶ月かかるそうですね。

3.合併症のリスク
・白内障のリスク
レンズの大きさがあっていないと、レンズがズレて水晶体にぶつかり白内障になってしまう可能性があるらしいです。手術後の検診であっていないことがわかればレンズを取り出すそうです。
また、手術中にミスって水晶体を傷つけると白内障になってしまうそうです。
めったにないそうですが、これが一番危ないリスクですね・・・

・感染
手術後は眼に切り込みが入っている状態なので、眼の中に細菌が入ると炎症を起こして治りづらいそうです。
最悪レンズを取る羽目になるので気をつけないといけません。
そのため手術前と手術後には細菌を抑制する目薬と炎症を抑える目薬を3時間に1度使います。
また、日中は保護メガネ、睡眠時は眼帯をして絶対に眼に触れないようにします。


■レンズの種類
角膜と虹彩の間に入れる「前房型レンズ」と水晶体と虹彩の間に入れる「後房型レンズ」の2種類があるようです。

「後房型レンズ」にはレンズに穴の開いているホールICLというのがあるようです。
どうやら穴が空いていないと目の中の水の循環が妨げられ眼圧があがり、緑内障になる可能性gあるため、穴を開けているそうです。

サイトによると、「後房型レンズ」のホールICLほうが安全そうですね。
私も後房型レンズにしました。

前房型レンズ後房型レンズ
前房型レンズ               後房型レンズ



こんな感じで1ヶ月ほどICLの解説サイトと感想サイトを回った結果
白内障のリスクは怖いけど大丈夫そう!という気分になってきたので、家の近くにある病院に無料カウンセリングを予約してきました。

10月頃にカウンセリングと検査を行った結果、ICL適用可だったためその場で予約!

手術代は60万円かかったのですが、レンズ代として前金30万円をその場で支払い、手術当日に30万円を支払いました。

いざ、手術です!

手術当日の様子は次の記事にて!




-----------
新宿近くで視力矯正に興味のある方は友達紹介制度で割引できます!
私も紹介料がもらえるので嬉しいです
もしご興味がありましたらお声がけください!

ICL以外にもレーシック、オルソケラトロジーなど他の手術でも紹介制度がつかえるそうです。

ご連絡はTwitterのDMにてどうぞ!

2012年7月22日日曜日

【code.9leap】画面遷移の基礎!【自作チュートリアルチャレンジ!】

いつも9leapで楽しませてもらってる株式会社ユビキタスエンターテインメントがcode.9leapというサービスを開始しました。
ブラウザ上でゲーム開発を行える「Code.9leap.net」,β版サービスが始まる


これにあたり、「code.9leapカスタム・チュートリアルチャレンジ!」というコンテストが開催されました。

っということで、私もチャレンジしてみようと思います!


私がenchant.jsで最初に悩んだところは画面遷移でした。
ということで、そのあたりのチュートリアルを作ってみました 。


ゲームの基本「タイトル画面 → プレイ画面 → エンド画面」の流れを簡単に説明しています。

 




ゲームの流れを学ぼう1「タイトル画面」



 


 


 

ゲームの流れを学ぼう2「プレイ画面への遷移」

 

 

 

ゲームの流れを学ぼう3「タイトルへ戻る」

 

 

 

ゲームの流れを学ぼう4「ゲーム終了」

 

 

 

ゲームの流れを学ぼう5「1からやってみよう!」

 

 

 

 画面遷移が出来れば、ゲームの見栄えも良くなるでしょう。

これをベースにゲーム作りができるはずです!

 

ちょっとcode.9leapの仕様で変な書き方しているところはありますが・・・

2012年4月1日日曜日

Kinect for Windows SDKによる3次元ポイントクラウド

以前、OpenNIを用いたポイントクラウドの方法を紹介していました
 Kinect OpenNIによる3次元ポイントクラウド - 3次元描画 高速化

今回はマイクロソフトが公式で公開しているKinect for Windows SDKを使ってポイントクラウドを行ってみます。

描画にはいつもどおりOpenGLを使い、その過程でOpenCVを使っています。




まず初めにKinect SDKでRGB画像とDepth画像の取得方法について簡単に説明します。

細かい説明なんてどうでもいいんだよ!って人は 下のほうでサンプルプログラムがダウンロードできるので、下の方へスクロールしてってください。


では、プログラムの初期化処理は以下のようになる



初期化処理では
HRESULT NuiInitialize(
         DWORD dwFlags
)

で初期化します。

引数はRGB画像、Depth画像、骨格情報を得る場合
 NUI_INITIALIZE_FLAG_USES_COLOR | NUI_INITIALIZE_FLAG_USES_DEPTH_AND_PLAYER_INDEX | NUI_INITIALIZE_FLAG_USES_SKELETON
とします 次に画像取得のイベントハンドルを設定します。

Depth画像の大きさによって使用するNuiImageStreamOpen関数の引数が違うので
KINECT_DEPTH_WIDTHを#defineで事前に定義して、ここで条件分岐しています。
 
KinectSDKはBetaの時はDepth画像の解像度を320x240しか設定できなかったのですが
v1.0になり、640x480に設定することが可能となりました。

上記で設定したイベントで以下のようにしてRGB画像とDepth画像を取得します

扱いやすい形にするため、OpenCVのMatに格納します
また、その処理を関数化します


ここではGetImage(cv::Mat &image,HANDLE frameEvent,HANDLE streamHandle)
という関数を作りました。

この関数は以下のように用います。

関数の戻り値が-1の時は取得失敗ということです。

Kinect SDKではOpenNIを違い、Matへの格納が少しめんどうですね。

 次にポイントクラウドを行う上で、画像のピクセルが現実座標ではどこにあるのかを知る必要があります。

OpenNIではConvertProjectiveToRealWorldという関数がありました。

Kinect SDKでは以下の関数を用います

Vector4 NuiTransformDepthImageToSkeleton(
         LONG lDepthX,
         LONG lDepthY,
         USHORT usDepthValue
)


この関数はDepth画像のピクセルの位置(x,y)とその場所の値を与えることで現実座標系で帰ってきます。

では、Depth画像から現実座標配列を格納する関数を以下のように作ります。

NuiTransformDepthImageToSkeletonはDepth画像の解像度により引数を追加します。

これはbetaの時にDepth画像が640x480に対応していなかったからかなぁっと思います。


で、最後にポイントクラウドで描画します。

drawPointCloudではRGB画像とretrievePointCloudMapで取得した三次元位置を渡し、描画します。

また、この関数内でRGBとDepthのズレを補正しています。
OpepNIでいう
DepthGenerator.GetAlternativeViewPointCap().SetViewPoint は

KinectSDKでは
NuiImageGetColorPixelCoordinatesFromDepthPixel
または
NuiImageGetColorPixelCoordinatesFromDepthPixelAtResolution
を使います

これも、Depthの解像度により関数を変える必要があります。

まあ、NuiImageGetColorPixelCoordinatesFromDepthPixelのなかでNuiImageGetColorPixelCoordinatesFromDepthPixelAtResolutionが呼ばれてるんですけどね





これまで長く説明してきましたけど、まあ、こんな説明読むよりサンプルプログラムを見たほうが早いかな?

全体のプログラムはこんな感じです。


github
サンプルダウンロード

2012年3月31日土曜日

PhySprite.enchant.jsに多角形とジョイントを追加しました。

PhySprite.enchant.jsに機能を追加しました。

PhySprite.enchant.jsのダウンロード
ダウンロード
リファレンス

今までのPhySprite.enchant.jsには円形と四角形しか物理オブジェクトをサポートしていませんでした。

今回は多角形を追加し、さらにオブジェクトにImageを設定しなくても形がわかるDebugDraw機能をつけました。

これで多角形の物体のように画像が用意しずらいオブジェクトでもわかりやすくなりました。


・多角形
ではまず、多角形の説明からします。

多角形のオブジェクトを生成するには以下の関数を用いる
   
enchant.PhyPolygonSprite(width, height, vertexs, type, density, friction, restitution, awake)
多角形の物理シミュレーション用Sprite

引数は以下の通り
Parameters:
{Number} width Optional
Spriteの横幅.
{Number} height Optional
Spriteの高さ.
{b2Vec2[]} vertexs
多角形の頂点配列
{Boolean} type Optional
静的,動的,キネマティック
{Number} density Optional
Spriteの密度.
{Number} friction Optional
Spriteの摩擦.
{Number} restitution Optional
Spriteの反発.
{Boolean} awake Optional
Spriteが初めから物理演算を行うか.

ここで新しく追加されたvertexsですが、これは多角形の頂点配列です。

どういうものかというと、例えば四角形の場合のvertexsは
   
var width = 20;
var height = 50;
var vertexs = new Array(
    new b2Vec2(-width / 2, -height / 2),
    new b2Vec2(width / 2, -height / 2),
    new b2Vec2(width / 2, height / 2),
    new b2Vec2(-width / 2, height / 2));
var phyPolygonSprite = new PhyPolygonSprite(width, height, vertexs, DYNAMIC_SPRITE, 1.0, 0.1, 0.2, true);
game.rootScene.addChild(phyPolygonSprite); // シーンに追加


このように四角形を作る
vertexsはSpriteの中心座標を(0,0)として時計回り・または反時計回りに宣言していく。



では次に五角形を生成してみます。
次は簡略化のためfor文を使います。
 
var vertexCount = 5;
var radius = 20;
var vertexs = new Array();
for (var i = 0; i < vertexCount; i++) {
vertexs[i] = new b2Vec2(radius * Math.cos(2 * Math.PI / vertexCount * i), radius * Math.sin(2 * Math.PI / vertexCount * i));
}
var phyPolygonSprite = new PhyPolygonSprite(radius * 2, radius * 2, vertexs, DYNAMIC_SPRITE, 1.0, 0.1, 0.2, true);
game.rootScene.addChild(phyPolygonSprite); // シーンに追加


これで五角形を作ることができました。
vertexCountを変更することで三角形でも七角形でも百角形でも可能です。


ここで注意することは、頂点と頂点と間に交点ができてしまうとうまく当たり判定がおかしくなるので気をつけて下さい。



・ジョイント
では次はジョイントの説明

ジョイントは複数のタイプがあります。

enchant.PhyDistanceJoint(sprite1, sprite2)
距離ジョイント

enchant.PhyRevoluteJoint(axis, sprite)
物体と物体のモーター付きジョイント
enchant.PhyPrismaticJoint(sprite1, sprite2, anchor1, anchor2, ratio)
スライドジョイント
 
enchant.PhyPulleyJoint(sprite1, sprite2, anchor1, anchor2, ratio)
滑車ジョイント
1つ1つ説明していきます。

enchant.PhyDistanceJoint(sprite1, sprite2)
距離ジョイント
Parameters:
{enchant.PhySprite} sprite1 Optional
繋げるスプライト1
{enchant.PhySprite} sprite2 Optional
繋げるスプライト2
 これは最も単純なジョイントです。
 引数の2つのスプライトをジョイントで繋げます。
例
   
//軸
var axis = new PhyCircleSprite(8, STATIC_SPRITE);
axis.position = { x: 160, y: 160 };
game.rootScene.addChild(axis); // シーンに追加
//ボール生成
var ball = new PhyCircleSprite(8, DYNAMIC_SPRITE);
ball.position = { x: 100, y: 250 };
game.rootScene.addChild(ball); // シーンに追加
//距離ジョイント
var joint = new PhyDistanceJoint(axis, ball);

ここでは簡略化のため、物理オブジェクトのパラメータを書いていません。
この場合、 density=1.0,friction=0.5,restitution=0.3,awake=trueがデフォルトの値となります。

未定義でもいいってのはここで初めて説明したのかな?
で、この例ではaxisという静止オブジェクトにballがぶら下がっています。


では次

 
enchant.PhyRevoluteJoint(axis, sprite)
物体と物体のモーター付きジョイント
Parameters:
{enchant.PhySprite} axis Optional
軸となるスプライト
{enchant.PhySprite} sprite Optional
繋げるスプライト
これは軸(axis)にモーターを設けることができるジョイントです。

例
   
//軸
var axis = new PhyCircleSprite(8, STATIC_SPRITE);
axis.position = { x: 160, y: 160 };
game.rootScene.addChild(axis); // シーンに追加
//ボール生成
var ball = new PhyCircleSprite(8, DYNAMIC_SPRITE);
ball.position = { x: 100, y: 250 };
game.rootScene.addChild(ball); // シーンに追加
//距離ジョイント
var joint = new PhyRevoluteJoint(axis, ball);
joint.enableMotor = true;
joint.maxMotorTorque = 100;
joint.motorSpeed = 90;

PhyDistanceJointとの違いはenableMotorでモーターを有効化しなければいけないことと
maxMotorTorqueでモーターのトルクを設定します。
 トルクとは
そしてmotorSpeedでモーターの速度を設定することで、axisに接続されたballが動き出します。

モーター機能を有効にしていないとPhyDistanceJointと変わりません。




enchant.PhyPrismaticJoint(sprite1, axis)
スライドジョイント
Parameters:
{enchant.PhySprite} sprite1 Optional
繋げるスプライト1
{b2Vec} axis Optional
軸

スライドオブジェクトは文字どおりスプライトをスライドさせます。

例
var box = new PhyBoxSprite(16, 8, DYNAMIC_SPRITE, 1.0, 0.5, 0.2, true);
box.position = { x: game.width * 2 / 3, y: game.height / 2 };
var prismaticAxis = new b2Vec2(1.0, 0);   //x軸にスライドを設定(右が正の値)
//スライドジョイント
var prismaticJoint = new PhyPrismaticJoint(box, prismaticAxis);
//スライドオブジェクトにモーター機能を持たせる場合
//prismaticJoint.enableMotor = true;      //モータの有効化
//prismaticJoint.maxMotorForce = 100.0;   //モータの最大力を設定
//prismaticJoint.motorSpeed = 50;         //モータの速度を設定


引数のaxisはスライドさせる軸です。

右方向を正としてx軸にスライドさせる場合はaxis = new b2Vec2(1.0, 0);とします。

また、このジョイントにはモーター機能が備わっており、 モータを有効化し最大力を設定することでモータ機能を使うことができます。



enchant.PhyPulleyJoint(sprite1, sprite2, anchor1, anchor2, ratio)
滑車ジョイント
Parameters:
{enchant.PhySprite} sprite1 Optional
繋げるスプライト1
{enchant.PhySprite} sprite2 Optional
繋げるスプライト2
{b2Vec2} anchor1 Optional
アンカー1の位置
{b2Vec2} anchor2 Optional
アンカー2の位置
{Number} ratio Optional
左右のバランス

滑車オブジェクトはアンカーを2つ設定し、スプライトを吊り下げることができます。

例
var ball1 = new PhyCircleSprite(8, DYNAMIC_SPRITE);
ball1.position = { x: 80, y: 160 };
var ball2 = new PhyCircleSprite(8, DYNAMIC_SPRITE);
ball2.position = { x: 240, y: 160 };
//滑車ジョイント
var pulleyJoint = new PhyPulleyJoint(ball1, ball2, new b2Vec2(80, 100), new b2Vec2(240, 100), 1);





以上で簡単な説明を終わります。

正直、文字で読むよりプログラムを読んだほうがわかりやすいような気がするので、サンプルプログラムをダウンロードして読んでみてください。(説明書くのがめんどくさいわけじゃないんだからね)

 多角形,ジョイントサンプル - PhySprite.enchant.js

サンプルダウンロード






2012年2月12日日曜日

OpenGLのウィンドウを動画でキャプチャするクラスを作ってみた - GLCapture

OpenGLのウィンドウを動画でキャプチャするクラスを作ってみました。

研究で、OpenGLを使っていますが
プレゼンを作るときにいつもキャプチャソフトを起動、設定して動画を撮るのが面倒でした。

そこで、プログラムの方から動画を書きだすプログラムを書きました。

動画サンプル



こんな感じで録画できます。




ダウンロード



使い方はこんな感じです。

   
GLCapture glCapture;
void init(){
    //glCaptureの設定
    glCapture.setWriteFile("output.avi");
}
void display(){
    glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); 
    //~描画するプログラム~
  
    glFlush();
    glutSwapBuffers();

    //動画ファイルに書き込み
    glCapture.write();
}
と、こんな感じです。

流れとしては

GLCapture glCapture;
でクラスの宣言行い。

glCapture.setWriteFile();
でインスタンスの設定を行う

その後描画関数内で
glCapture.write();
により、現在の描画された内容を動画に書き出す処理です。  


プログラム全体のサンプルはgithubに上げてます。


注意としては、このクラスは中でOpenCVを使っているので OpenCV2.0以降をインストールしてください。
github    


これでキャプチャソフトいらず\(^o^)/

キャプチャソフトよりこっちのほうがきれいだしね。