(57)【特許請求の範囲】
【請求項１】
表示領域にオブジェクトを表示させる方法であって、
表示領域に対して複数のポインタの各々によりポイントされた前記オブジェクトの部分に対して、独立に指示情報を指定できるポインティングデバイスから、前記複数のポインタの各々に対応した指示情報を取得するステップと、
所定のポインタに対応する指示情報の変化が、予め定められた閾値を超えない場合、前記所定のポインタに対応する指示情報を、前記所定のポインタに対応する指示情報とは性質の異なる特定の指示情報に置き換え、前記所定のポインタに対応付けるステップと、
前記複数のポインタの各々に対応した前記指示情報又は置き換えられた前記特定の指示情報に基づいて、前記表示領域に表示されるオブジェクトを変化させるステップと、
を有し、
前記指示情報は、ポイントされた前記オブジェクトの部分の位置であり、前記特定の指示情報は、ポイントされた前記オブジェクトの部分を固定させる指示である、
方法。
【請求項２】
前記閾値は、前記指示情報が示す位置の移動速度、又は移動距離である、
請求項１記載の方法。
【請求項３】
前記オブジェクトは、骨と骨を関節で接続した骨格モデルであり、
前記指示情報は、関節の位置であり、
前記特定の指示情報は、関節を固定する指示である、
請求項１又は２記載の方法。
【請求項４】
前記ポインティングデバイスは、前記オブジェクトを表示すためのディスプレイを有するタッチパネルである、請求項１ないし３のうちいずれか１項記載の方法。
【請求項５】
前記ポインタは、表示領域において不可視である、請求項１ないし４のうちいずれか1項記載の方法。
【請求項６】
表示領域に骨格モデルを表示させる方法であって、
表示領域上の複数の位置を独立にポイントできるポインティングデバイスによる複数のポインタの各々に、前記骨格モデルの関節を対応付けるステップと、
前記複数のポインタの各々と、前記複数のポインタの各々に対応する関節との距離が近づくよう、前記骨格モデルのポーズを計算するステップと、
前記計算された骨格モデルのポーズを表示するステップと、
を有し、
前記対応付けるステップは、
所定のポインタに、いずれの関節も対応付けられていない場合は、前記所定のポインタに一番近い第１の関節を、前記所定のポインタに対応する関節とし、前記所定のポインタに、既に第２の関節が対応付けられている場合には、前記所定のポインタに一番近い第３の関節が存在する場合であっても、前記所定のポインタと、前記第２の関節との対応関係を維持する、ステップ、
を含む、方法。
【請求項７】
請求項１ないし６のうちいずれか１項記載の方法をコンピュータに実行させる命令を有するプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチポインティングデバイスの制御方法及びプログラムに関する。
【背景技術】
【０００２】
コンピュータ上で動作しているアプリケーションに対して、オペレータが適切な指示を与えるために、様々なマンマシンインターフェスが用いられている。
【０００３】
例えば、ディスプレイ上に表示された仮想空間上の三次元モデルとしての骨格モデル（スケルトンモデル）に対して、ユーザの意図したポーズ（姿勢、形状等）を取らせるために、ユーザが適切な指示を与える必要がある。このために、様々なインターフェースが利用されている。また、二次元グラフィックスの分野においても、二次元グラフィックスを移動させたり、変形させたりするためにユーザインターフェースが利用される。この場合、ユーザの要求を簡便に、しかも適切に指示できるユーザインターフェースが必要とされる。
【０００４】
例えば、上述の骨格モデルに意図したポーズを取らせるためにオペレータが用いるインターフェースとしては、マウス、二次元タブレット、マルチポインティングデバイス等がある。これらのデバイスは二次元グラフィックスに対するユーザインターフェースとしても同様に用いられる。また、その他のアプリケーションプログラムのユーザインターフェースとしても、盛んに利用されている。
【０００５】
上述のユーザインターフェースのうち、近年、画面上の複数の位置を独立にポイントして、コンピュータに指示を与えることができるマルチポインティングデバイスが用いられている。典型的なマルチポインティングデバイスとしては、ディスプレイの表面にタッチパネルを設置し、このタッチパネルに対し直接指を用いて複数箇所を同時にポイントできるもの（例えば、マルチタッチスクリーン）が挙げられる。
【０００６】
このマルチポインティングデバイスを用いて、オペレータは、コンピュータに対して種々の入力指示を与えることができる。以下に、その例を挙げる。たとえば、「タップ」は、画面に触れてすぐに離す操作で、マウスで行うクリックに対応する。「ダブルタップ」は、短時間に連続して２回タップする操作で、マウスで行うダブルクリックに対応する。「ドラッグ」は、画面に触れたまま指を移動させる操作で、マウスのドラッグに対応する。また、「フリック」は、タップと同時に指をずらす動作を意味し、マウスでは対応する操作は存在しない。「スワイプ」は、画面を掃くような操作であり、ドラッグとフリックの中間に対応する操作である。この「スワイプ」は、スクロール等において、操作する指を離した後もスクロールを継続させる場合などに用いられている。「ピンチイン」や「ピンチアウト」は、二本の指をドラッグさせてそれぞれ近づける操作および遠ざける操作に対応する。「タッチアンドホールド」は、一本の指で一定時間タッチスクリーンをタッチしたままの状態を保つ操作を意味する。
【０００７】
また、画面を１本の指でなぞり特定のジェスチャ（例えば、円を描く、直線を描く等）を行うことにより、複数の指示を入力できるインターフェースとしては、タッチＦＬＯがある。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、マルチポインティングデバイスや、その他の様々なユーザインターフェースを用いたとしても、オペレータが骨格モデルに対して、意図した通りの指示を与えるには、依然としてオペレータに対して繁雑な作業が要求される。例えばディスプレイ上の骨格モデルにユーザの意図したポーズ（姿勢、形状等）を取らせるには、固定すべき関節の指示、移動すべき関節の移動、固定した関節の固定解除、他の関節の固定の指示、更に動かすべき関節の移動の指示等、ユーザは、煩雑な繰り返し操作を行わなければならない。また、複数の関節を任意の方向に移動させる指示を、簡便に行うこともできない。
【０００９】
このような状況に鑑み、本実施例に係る方法及びプログラムは、マルチポインティングデバイスなどの、複数のポイント位置において独立に指示を行えるユーザインターフェースを用いて、ユーザの意図した指示を簡便に行えるようにする方法及びプログラムを提供することを目的とする。なお、本発明の目的は、例示として取り上げた上述の骨格モデルへの適用に限定されない。
【課題を解決するための手段】
【００１０】
本方法によれば、表示領域にオブジェクトを表示させる方法であって、表示領域に対して複数のポインタの各々により、独立に指示情報を指定できるポインティングデバイスから、前記複数のポインタの各々に対応した指示情報を取得するステップと、第１のポインタに対応する指示情報の変化が、予め定められた閾値を超えない場合、前記第１のポインタに対応する指示情報を、前記第１のポインタに対応する指示情報とは異なる指示情報に置き換え、前記第１のポインタに対応付けるステップと、前記複数のポインタの各々に対応した前記指示情報に基づいて、前記表示領域に表示されるオブジェクトを変化させるステップと、を有する、方法が提供される。
【００１１】
また、本発明の他の方法によれば、表示領域に骨格モデルを表示させる方法であって、表示領域上の複数の位置を独立にポイントできるポインティングデバイスによる複数のポインタの各々に、前記骨格モデルの関節を対応付けるステップと、前記複数のポインタの各々と、前記複数のポインタ各々に対応する関節との距離が近づくよう、前記骨格モデルのポーズを計算するステップと、前記計算された骨格モデルのポーズを表示するステップと、を有する方法が提供される。
【発明の効果】
【００１２】
マルチポインティングデバイスなどの、複数のポイント位置において独立に指示を行えるユーザインターフェースを用いて、ユーザの意図した指示を簡便に行うことができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の一実施例に従った、骨格モデルの姿勢の指示を示す図である。
【図２】一実施例に従った、骨格モデルの姿勢の指示を示す図である。
【図３】一実施例に従った、紙の仮想オブジェクトを変形させる図である。
【図４】骨格モデルを用いて、ポインタと、ポインタにより制御される対象との対応付けに関する一例を示した図である。
【図５】一実施例に従った、三次元オブジェクトの姿勢の指示を示す図である。
【図６】一実施例に従った、ハードウエア構成を示す図である。
【図７】一実施例に従った、方法のフローチャートを示す図である。
【図８】一実施例に従った、別の方法のフローチャートを示す図である。
【図９】骨格モデル、親骨、子骨、及び座標系を示す図である。
【図１０】ＣＣＤ法による骨格モデルの制御方法を示す図である。
【発明を実施するための形態】
【００１４】
例えば、三次元仮想空間で人体，動物，構造物等の姿勢（ポーズ，動き等）をシミュレートする際に用いられる骨格モデルを制御する手法の一例として，逆運動学（Ｉｎｖｅｒｓｅ  Ｋｉｎｅｍａｔｉｃｓ）がある。この、逆運動学においては，骨格モデルを複数の骨と関節で定義する。逆運動学に基づく骨格モデルの場合、各々の骨および関節の位置，角度，回転（曲げ，捻り）等を意図した通りに制御することが必要となる。例えば、図９（ａ）に示される人の骨格モデルでは，各々の骨は関節で結合されており，各々の骨の動きが他の骨の動きに影響を与える。逆運動学には、ＣＣＤ（Ｃｙｃｌｉｃ−Ｃｏｏｒｄｉｎａｔｅ−Ｄｅｓｃｅｎｔ）などの、種々の骨格モデルの制御方法が存在する。詳細は後述する。
【００１５】
そして、骨格モデルの姿勢を制御するためには、少なくとも、固定すべき関節と、動かすべき関節を指定する。なお、指先などの骨の先端も、本明細書では関節として統一的に扱い、説明する。動かすべき関節については、動かす方向と量（距離）を指定することが必要である。なお、固定された関節と動かすべき関節以外の関節は、その骨格モデルに応じて、適切な位置に移動する。
【００１６】
本明細書では、実施例の説明が不必要に複雑化することを避けるため、この逆運動学に関しては、後述するように、概略の原理の説明にとどめ、その詳細は説明しない。なお，本発明は、特定の骨格モデルへの適用に限定されるものではない。
【実施例】
【００１７】
図１は、本発明の一実施例に従って、マルチポインティングデバイスを用いた骨格モデルのポーズの制御を示している。以下、オペレータの指がマルチポインティングデバイスをポイントしている位置をポインタ位置と呼ぶ。すなわち、ポインタとは、マルチポインティングデバイスにオペレータの指などが触れている部分を指す。
【００１８】
図１（ａ）は、画面に表示された骨格モデルＸ１００を示している。骨格モデルＸ１００は、腕を水平に伸ばしており、こちらを向いており、右手先が位置ａ１００、左手先が位置ｂ１００にある。また、右足先は位置α１００、左足先は位置β１００にある。以上が骨格モデルＸ１００の初期状態の位置を示している。ここで、位置とは、画面上の位置を指す。
【００１９】
そして、オペレータの右手Ｒ１のポインタは、位置ｂ１００に存在している。また、オペレータの左手Ｌ１のポインタは、位置α１００に存在している。
【００２０】
マルチポインティングデバイスは、右手Ｒ１のポインタ位置及び左手Ｌ１のポインタ位置を逐次測定しており、これらの測定結果から、各ポインタの位置を知ることができる。ポインタ位置の時間的な変化により、ポインタの速度が算出できる。算出された右手Ｒ１のポインタの速度をＶＲ１、左手Ｌ１のポインタの速度をＶＬ１とする。更に、予め定められた速度閾値Ｖｋがメモリ内に保存されているものとする。
【００２１】
図１（ａ）では、オペレータの右手Ｒ１のポインタは、ベクトルｎ１００方向に、位置ｂ１００から位置ｂ１０１まで移動している。また、オペレータの左手Ｌ１のポインタは、位置α１００に止まっている。このため、オペレータの右手Ｒ１のポインタの速度ＶＲ１は、ＶＲ１＞Ｖｋとなり、オペレータの左手Ｌ１のポインタの速度ＶＬ１は、ＶＬ１≦Ｖｋが成立しているものとする。
【００２２】
この場合、左手Ｌ１のポインタの速度ＶＬ１が速度閾値Ｖｋを超えないため、左手Ｌ１のポインタは、骨格モデルの右足先を移動させる指示ではなく、右足先の関節を固定する指示を、骨格モデルに与える。そして、右手Ｒ１のポインタの速度ＶＲ１は閾値Ｖｋを超えているため、右手Ｒ１のポインタが、骨格モデルの左手先の関節を移動させる指示を、骨格モデルに与える。
【００２３】
図１（ｂ）は、上述の図１（ａ）の操作の結果得られた、新たな姿勢の骨格モデルＸ１０１を示している。骨格モデルＸ１０１の右足先の関節は、固定関節として位置α１００に固定されている。骨格モデルＸ１０１の左手先の関節は、位置ｂ１０１に移動している。骨格モデルは、この操作に基づき、その他の骨と関節を適切な位置に移動させる。右手先は位置ａ１０１に移動している。また、左足先は、位置β１０１に移動している。他の関節および骨の位置をどのように決定するかは、逆運動学の計算方法及び骨格モデルのモデリングによって異なる。逆運動学の計算方法や骨格モデルのモデリングをどのように設定するかは、当業者が決定すべき事項であり、必要に応じて、適切な計算方法、適切なモデル、設定値等を選択すればよい。
【００２４】
図１（ｂ）は、更に、左手Ｌ１のポインタをベクトルｎ１０１方向に位置α１００から位置α１０１に移動させ、右手Ｒ１のポインタは位置ｂ１０１に止まっていることを示している。
【００２５】
図１（ｃ）は、図１（ｂ）の上述の操作を終えた状態の骨格モデルＸ１０３のポーズを示している。骨格モデルＸ１０３は、右足先の関節がドラッグされ位置α１０１に移動している。左手先の関節は、位置ｂ１０１に止まっている。また、この操作によって、他の関節及び骨も移動し、右手先の関節は、位置ａ１０２に移動し、左足先の関節は、位置β１０２に移動している。
【００２６】
以上の実施例では、マルチポインティングデバイスによって、複数のポインタの位置を独立して計測し、ポインタの速度を予め定められた速度閾値Ｖｋと比較している。そして、ポインタの速度に依存して、ポインタの速度が閾値Ｖｋを超えないポインタについては、対応する関節の移動の指示を、対応する関節の固定の指示に置き換えている。これに対して、ポインタの速度が閾値Ｖｋを超えるポインタについては、対応する関節の移動の指示を与えている。この移動の指示は、ポインタによる本来の指示をそのまま、骨格モデルに与えていることになる。
【００２７】
なお、ポインタの移動距離が一定の閾値を超えた場合には、ポインタの速度にかかわらず、骨格モデルの関節の固定の指示に置き換える処理を行わず、関節の移動の指示としてもよい。また、速度閾値Ｖｋの代わりに、移動距離閾値を用いてもよい。例えばた骨格モデルが最後に描画し直された時刻におけるポインタの位置から現在のポインタの位置までの移動距離を測定し、この移動距離を移動距離閾値と比較してもよい。
【００２８】
図７は、この操作を示したフロー図である。まず、ステップ７０２において、マルチポインティングデバイスから、Ｎ個の独立した位置情報を取得する。図１の実施例の場合には、Ｎ＝２である。
【００２９】
ステップ７０４において、１番目のポインタの移動速度が速度閾値Ｖｋを超えているか否かを判断する。１番目のポインタの速度が閾値Ｖｋを超えていない場合（「はい」の場合）、ステップ７０５に移動し、１番目のポインタの指示を関節の固定点指示情報に設定する。逆に１番目のポインタの移動速度が速度閾値Ｖｋを超える場合（「いいえ」の場合）、２番目のポインタの判断ステップ７０６に移動する。
【００３０】
ステップ７０６では、ステップ７０４と同様の判断を２番目のポインタについて行う。必要に応じて、ステップ７０７が実行される。
【００３１】
同様の判断をＮ番目のポインタの判断ステップ７０８まで行う。必要に応じて、ステップ７０９が実行される。
【００３２】
ステップ７１０において、Ｎ個のポインタの指示情報を用いて、骨格モデルのポーズを計算する。なお、上述の判断ステップで、ポインタの速度が速度閾値Ｖｋを超えていない場合には、ポインタの指示情報が固定点指示情報に置き換えられているため、この固定点指示情報を骨格モデルの計算に適用する。それ以外の場合には、ポインタの指示情報は、本来の指示情報である移動指示として用いられる。
【００３３】
ステップ７１２において、計算された骨格モデルを表示する。
【００３４】
表示が終了したら、ステップ７０２に戻る。以上のステップを繰り返すことにより、骨格モデルに所望のポーズを取らせることが容易に行える。
【００３５】
図１（ａ）ないし（ｃ）の操作を、たとえばマウスを用いて行ったとすると以下のようになる。マウスの左ボタンによるドラッグを関節の移動指示と定義し、マウスの右クリックを、関節の固定指示、又は関節の固定の解除指示と定義する。
【００３６】
まず、固定関節を指示するために、骨格モデルの右足先をマウスで右クリックする。これによって、骨格モデルの右足先の関節が固定関節であることが指示される。次に、マウスを、骨格モデルの左手先の関節に移動させ、位置ｂ１００から位置ｂ１０１まで左ドラッグする。この操作によって、図１（ｂ）の骨格モデルＸ１０１の状態となる。次に、骨格モデルの左手先の関節を、右クリックして、関節の固定指示を行う。次に、マウスのカーソルを骨格モデルの右足先に移動させ、右クリックを行い、固定関節の解除を指示する。そして、マウスの左ドラッグを、位置α１００から位置α１０１まで行う。この操作によって、図１（ｃ）の骨格モデルＸ１０３の状態になる。
【００３７】
以上のように、マウスのような単一のポインタを持つポインティングデバイスを用いた場合には、図１に示した骨格モデルのポーズの制御が非常に煩雑になる。これに対して、マルチポインティングデバイスを用いた上述の実施例の場合には、骨格モデルの姿勢の指示を簡便に行える。
【００３８】
なお、本明細書に示される実施例の操作は、矛盾のない限り、既に例示したようなマルチポインティングデバイスを用いた種々の操作と組み合わせてもよい。例えば、複数のポインタのうち１つのポインタが静止しており、ポインタの指示が関節の固定指示となった場合に、そのポインタの静止時間が一定時間を超えたときは、指を離しても固定指示を継続させてもよい。この操作は、上述の実施例の機能と、タッチアンドホールドの機能を併用した操作と捉えることもできる。
【００３９】
図２は、他の実施例を示している。図２（ａ）に示されるように、両足先に位置する２つのポインタの移動速度は、閾値Ｖｋを超えないため、骨格モデルの両足先の関節は、それぞれオペレータの左手Ｌ２の２つのポインタで固定として指示されている。また、図２（ｂ）に示されるように、骨格モデルの両手先の関節は、それぞれオペレータの右手Ｒ２の二つのポインタにより移動させる指示を行っている。すなわち、オペレータの右手人差し指に対応するポインタは、位置ａ２００からａ２０１に、閾値Ｖｋを超える速度で移動しており、オペレータの右手親指に対応するポインタは、位置ｂ２００から位置ｂ２０１に、閾値Ｖｋを超える速度で移動している。このため、オペレータの右手Ｒ２に対応する二つのポインタは、本来の指示である移動の指示を骨格モデルに与える。従って、骨格モデルの右手先の関節は、ａ２００からａ２０１に移動する。同様に、骨格モデルの左手先の関節は、ｂ２００からｂ２０１に移動する。骨格モデルの両足先の関節は、固定関節として指示されるため、左右の足先の関節は、それぞれ位置α２００、位置β２００に止まっている。
【００４０】
上述のように、図２（ａ）から図２（ｂ）への骨格モデルのポーズの変形は、図１及び図７に示した手法と同様の操作を行うことにより実現できる。
【００４１】
なお、骨格モデルのポーズの変形は、速度閾値Ｖｋを用いずに、図８に示す変形例の手法を用いて、骨格モデルのポーズを変化させてもよい。
【００４２】
図８に、変形例の手法の処理フローを示す。
【００４３】
ステップ８０４において、複数のポインタの各々と、骨格モデルの関節との対応関係を決定する。例えば、図２（ａ）の場合には、オペレータの４つの指が、画面に触れており、４つポインタが、それぞれ、位置ａ２００、位置ｂ２００、位置α２００、位置β２００に存在している。そして、これらのポインタのそれぞれを、骨格モデルの右手先の関節、左手先の関節、右足先の関節、左足先の関節に対応づける。また、ポインタの総数Ｎは、Ｎ＝４である。なお、ポインタと関節との対応付けについては、図４を用いて後述する。
【００４４】
ステップ８０６で、繰り返しのアルゴリズムのための、変数ｎの初期化（ｎ＝１）を行う。
【００４５】
ステップ８１０は、ｎ番目のポインタの位置に、このポインタに対応する関節を移動させる（又は両者を近づける）ために、骨格モデルのポーズを計算する。
【００４６】
ステップ８１２は、繰り返しアルゴリズムのための変数ｎが、ｎ≧Ｎであるか否かを判断する。
【００４７】
ステップ８１４は、ステップ８１２の判断が「はい」である場合に実行される。この場合、全てのＮ個のポインタについて、処理が終了したため、骨格モデルを表示させる。
【００４８】
ステップ８１６は、ステップ８１２の判断が「いいえ」である場合に実行される。この場合には、全てのＮ個のポインタについて、処理が終了していないため、ｎをインクリメントし、ステップ８１０に戻る。
【００４９】
なお、上述のフローでは、ポインタ毎に骨格モデルを計算しているが、全てのポインタの位置情報を与えて、一度に骨格モデルの計算を実行させてもよい。いずれの計算方法を実行するかは、採用する骨格モデル、計算にかかる時間等を勘案して決定すればよい。
【００５０】
ステップ８１８は、消滅したポインタや、新たに発生したポインタがあれば、ポインタと、関節との対応付けを更新する。また、ポインタの数が、増減した場合には、ポインタ数Ｎを適切に更新する。そして、ステップ８０６に戻る。
【００５１】
以上の処理は、例えば図２の例の場合、骨格モデルの右手先の関節、及び左手先の関節が、それぞれ、位置ａ２００から位置ａ２０１に、位置ｂ２００から位置ｂ２０１に、移動する際に、図８に示す処理ステップの繰り返しが複数回行われることになる。なお、距離閾値Ｌｐを設定し、ポインタと、対応する関節との距離がこの閾値Ｌｐよりも大きい場合にだけ、骨格モデルを計算させるようにしてもよい。この場合には、Ｌｐが小さいほど、骨格モデルの再表示は滑らかになる。なお、骨格モデルの複雑度、処理マシンの計算能力に応じて、適切な距離閾値Ｌｐを設定してもよい。距離閾値Ｌｐはユーザが設定できるようにしてもよい。あるいは、骨格モデルの複雑度に応じて、予め定められた閾値の値Ｌｐを自動的に設定するようにしてもよい。骨格モデルの複雑度は、骨の数、関節の数、骨格モデルの周囲に貼り付けるポリゴンの数、ポリゴンにテクスチャマッピングをするか否か、骨格モデルの関節の曲がり角度に制限を設けるか否か、骨格モデルのレンダリングの所要時間等に基づき判断してもよい。
【００５２】
なお、図８の繰り返し処理の途中で、ポインタが消滅したり、新たに発生したりした場合には、繰り返し処理を中断して、ステップ８１４の骨格モデルの表示、または、ステップ８１８に、強制的にジャンプしてもよい。
【００５３】
図３は、他の実施例として、仮想的に表示された紙を折る操作を示した図である。
【００５４】
図３（ａ）に示されるように、画面上に紙Ｐ３０１が示されている。そして、左手Ｌ３のポインタは、位置α３００をポイントしており、その速度は、速度閾値Ｖｋを超えていない。また、右手Ｒ３のポインタは、位置β３００をポイントしており、ベクトルｎ５方向に、移動している。その速度は、速度閾値Ｖｋを超えている。
【００５５】
この場合、左手Ｌ３のポインタは、直線ｍ３００を折り目とする指示を仮想的な紙のモデルに与える。図３（ａ）の例の場合には、「点α３００を通り、ベクトルｎ５との角度が直角となる直線」として折り目ｍ３００を決定してもよい。あるいは、直角ではなく、予め定められた角度を設定しておいてもよい。その他、折り目ｍ３００の方向は、紙が四辺形であれば、その対角線に対して平行にしてもよく、ユーザ又はシステム設計者が、適切な値を予め定めておいてもよい。
【００５６】
図３（ｂ）は、右手Ｒ３のポインタをベクトルｎ５方向に動かして、紙の角が位置β３０１に移動した紙Ｐ３０２を示している。
【００５７】
図３（ｃ）は、折り目ｍ３００で、紙が完全に折り返され、紙の角が位置β３０２に達した紙Ｐ３０３の状態を示している。
【００５８】
図３に示した実施例では、ポインタの速度が速度閾値Ｖｋ超えていれば、ポインタの本来の指示であるドラッグを移動指示情報として、仮想的な紙のモデルに変形処理に適用する。そして、ポインタの速度が速度閾値Ｖｋを超えない場合には、そのポインタの移動指示に代えて、紙の折り目を設定する指示を、仮想的な紙のモデルの変形処理に適用している。
【００５９】
図４は、骨格モデルを用いて、ポインタと、ポインタにより制御される対象との対応付けに関する一例を示したものである。図４（ａ）には、骨４０１ないし４０３が関節４１１及び４１２で接続された、骨格モデルの一部が示されている。そして、ポインタ４００が、骨格モデルの近くに存在している。ここで、ポインタ４００は、関節４１１からＬ４５０だけ離れた位置に存在している。また、ポインタ４００は、関節４１２とはＬ４６０だけ離れた位置に存在している。そして、Ｌ４５０＜Ｌ４６０となっている。この場合には、ポインタ４００に一番近い関節４１１が、ポインタ４００に関連付けられるようにすればよい。なお、一定の閾値Ｌａを設けて、ポインタ４００から一番近い関節までの距離
が、閾値Ｌａを超える場合には、ポインタ４００と関節との関連づけを行わないようにしてもよい。
【００６０】
図４（ｂ）は、ポインタ４００が関節４１１と関連づけされた後に、ポインタ４００から関節４１１及び４１２までの距離が、それぞれＬ４５１、Ｌ４６１（Ｌ４５１＞Ｌ４６１）となった場合を示している。この場合、ポインタ４００から一番近い関節は、関節４１２となっている。しかしながら、既に図４（ａ）において、ポインタ４００は、関節４１１と関連付けられているため、この関連付けを維持し、関連づけの変更は行わないようにしてもよい。
【００６１】
このように、一旦関連付けされたポインタと関節とのペアを維持することによって、骨格モデルの変形を、より安定した形で行わせることが可能となる。ポインタと関節との関連づけを途中で変更すると、ユーザの意図しない関節がポインタに吸い寄せられるような挙動を示すことになる場合があるからである。
【００６２】
なお、上述の対応付けは、一例を示したものであり、本発明はこれに限定されるものではない。
【００６３】
図５は、他の実施例を示している。例示として、携帯電話の仮想的なオブジェクトが表示されている。
【００６４】
図５（ａ）において、オペレータの左手Ｌ５のポインタは、携帯電話の上部の位置α５００に存在している。そして、オペレータの右手Ｒ５のポインタは、携帯電話の横腹の部分の位置β５００に存在している。そして、左手Ｌ５のポインタの速度は、速度閾値Ｖｋを超えておらず、右手Ｒ５のポインタは、速度閾値Ｖｋを超える速度でベクトルｎ５００方向に、移動している。この実施例の場合には、左手Ｌ５のポインタは、携帯電話表面上の位置α５００を通り、例えば、携帯電話の重心を通る直線ｓ５００を携帯電話の回転中心軸として設定する指示を与える。そして、オペレータが右手Ｒ５のポインタを、ベクトルｎ５００方向に動かすに連れて、回転軸ｓ５００を中心に携帯電話が回転する。
【００６５】
図５（ｂ）は、上述の操作を行って、右手Ｒ５のポインタが位置β５０１まで移動し、携帯電話が、これに伴って、回転軸ｓ５００を中心に回転した状態を示している。
【００６６】
図５（ｂ）は更に、この状態において、右手Ｒ５のポインタの移動速度が、速度閾値Ｖｋを超えなくなり、逆に、左手Ｌ５のポインタの移動速度が、速度閾値Ｖｋを超え、ベクトルｎ５０１方向に移動し始めた様子を示している。この場合、回転中心は、右手Ｒ５のポインタを通り、携帯電話の重心を通過する直線ｓ５０１（直線ｓ５０１は、紙面にほぼ垂直である直線）を中心に、携帯電話が回転するようになる。
【００６７】
図５（ｃ）は、左手Ｌ５のポインタが位置α５０１まで移動した様子を示している。図示されているように、携帯電話は、回転中心軸として直線ｓ５０１を中心として回転している。
【００６８】
なお、上述の実施例では、回転中心として、閾値速度Ｖｋを超えないポインタ位置であって、携帯電話の表面にある点から、携帯電話の重心を通る直線を回転軸として採用したが、重心以外の、予め定められた点を決めておいてもよい。あるいは、軸を中心とする回転ではなく。ポインタ位置を回転の中心点とする回転を行わせてもよい。回転の設定のしかたは、予め定めておけばよい。
【００６９】
上記実施例では、二つのポインタを用いて、仮想的なオブジェクトを簡単な操作で所望の方向に回転させることが容易に行える。
【００７０】
図６は、本明細書において説明した各種の実施例をインプリメントするシステム６００のハードウエアの構成例を示している。システム６００は、ＣＰＵ６０１、ディスプレイ６０２、タッチスクリーン６０４、キーボード６０６、マウス６０８、ＲＯＭ６１０、ＲＡＭ６１２、外部メモリ媒体６１５を読み書きする外部メモリインターフェース６１４、ネットワークとの通信を行う通信インターフェース６１６、及び各ハードウエアを接続するバス６２０を含む。
【００７１】
図９及び図１０を用いて、骨格モデルにて関して以下説明する。
【００７２】
三次元仮想空間で人体モデル，動物，構造物等の姿勢（ポーズ，動き等）を制御する際に用いられるこのような骨格モデルにおいては，図９（ａ）に示す各々の骨および関節の位置，角度，回転（曲げ，捻り）等を意図したとおりに制御することが必要となる。図９（ａ）に示される骨格モデルでは，各々の骨は関節で結合されており，各々の骨の動きが他の骨の動きに影響を与える。
【００７３】
骨格モデルを制御する手法の一例として，逆運動学（Ｉｎｖｅｒｓｅ  Ｋｉｎｅｍａｔｉｃｓ）のうちのＣＣＤ（Ｃｙｃｌｉｃ−Ｃｏｏｒｄｉｎａｔｅ−Ｄｅｓｃｅｎｔ）法について以下に説明する。なお，本発明はこの手法への適用に限定されるものではない。
【００７４】
図１０に示すように，複数の関節Ｊ１乃至Ｊ３と複数の骨Ｂ１乃至Ｂ３を有する骨格モデルを例にして説明する。関節Ｊ３の位置が固定されている場合において，骨格モデルの骨Ｂ１の点Ａを目標点である点Ｄに移動させる場合のＣＣＤ法の操作を以下に示す。ＣＣＤ法は，１回の計算ステップで１つの関節（Ｊ１）の角度のみを動かして，点Ａと点Ｄとの距離を最小化し，順次この操作を全ての関節（Ｊ１乃至Ｊ３）について計算する。この操作によって，順次点Ａと点Ｄとの距離が小さくなる。この計算を繰り返す。具体的な計算方法を以下に示す。
（１）図１０（ｂ）に示すように，まず，関節Ｊ１の回転角度だけを操作して点Ａと点Ｄとの距離が最短になるようにする。このためには，関節Ｊ１を中心として骨Ｂ１を角度θ１だけ回転させ，関節Ｊ１と目標Ｄとを結んだ直線ｈ１上に，点Ａを移動させる。これによって，点Ａは，直線ｈ１上に位置するため，点Ａと点Ｄとの距離が最短になる。
（２）図１０（ｃ）に示すように，次に関節Ｊ２の回転角度だけを操作して点Ａと点Ｄとの距離が最短になるようにする。このためには，関節Ｊ２を中心として骨Ｂ２を角度θ２だけ回転させ，関節Ｊ２と目標Ｄとを結んだ直線ｈ２上に，点Ａを移動させる。これによって，点Ａと点Ｄとの距離が最短になる。
（３）図１０（ｄ）に示すように，次に関節Ｊ３の回転角度だけを操作して点Ａと点Ｄとの距離が最短になるようにする。このためには，関節Ｊ３を中心として骨Ｂ３を角度θ３だけ回転させ，関節Ｊ３と目標Ｄとを結んだ直線ｈ３上に，点Ａを移動させる。これによって，点Ａと点Ｄとの距離が最短になる。
（４）同じ操作を上記（１）から再度繰り返す。
【００７５】
点Ａと点Ｄの距離が閾値ｅ以下になること，及び反復回数が上限回数を超えたこと，の少なくともいずれか一方が満たされたときに計算を打ち切ることとしてもよい。
【００７６】
上記の例では，点Ａは，端点であったが，一般には，骨格の関節である場合もある。
【００７７】
以上、本発明の各種実施例について説明したが、本発明は、上述のマルチポインティングデバイスへの適用に限定されるものではなく、その他の様々なユーザインターフェースに適用できることは言うまでもない（例えば、単一のポインタを持つポインティングデバイスであっても、複数のオペレータがネットワーク等を介して接続され、同一のオブジェクトに対して変形を行わせる場合にも適用できる）。また、本発明は、コンピュータグラフィックスの分野への適用に限られるものではなく、携帯電話、タブレットコンピュータ、プロジェクタ、テレビジョン等を用いて表示を行うコンピュータアプリケーションに対する、ユーザからの指示にも適用し得る。加えて、アプリケーションプログラムに対する単独のオペレータによる指示ばかりでなく、複数のオペレータによる複数の独立した指示に対し用いてもよい。
【００７８】
なお、通常、マルチポインティングデバイスは、オペレータの複数の指をタッチパネルに接触させて、それぞれの接触位置がポインタとしての機能を果たすが、本発明では、タッチパネルに触れるものとしは、オペレータの指以外のもの（例えばペン等）であってもよい。また、タッチパネルに触れる指は、両手の指を用いてもよく、また、片手の複数の指を用いてもよい。加えて、マルチポインティングデバイスは、タッチパネルに限定されるものではなく、複数の独立した指示を与えることができるあらゆる入力用ユーザインターフェースであってもよい。更に、ユーザインターフェースは、接触を伴わないインターフェースであってもよい。たとえば、音声、光等を用いたものであってもよい。また、複数のオペレータによる指示であってもよい。この場合、複数のオペレータは、ネットワークを介して遠隔地に存在してもよい。
【００７９】
ポインタは、マウスのカーソルのように画面上に表示させてもよいし、非表示であってもよい。非表示であったとしても、画面上に指が触れていれば、ユーザはポインタの位置を認知できるからである。
【００８０】
なお、上述の実施例では、ポインタが、二次元の表示画面上をポイントできる例を示した。したがって、例えば、上述の実施例での関節とポインタの距離は、画面に投影された関節とポインタとの画面上での距離を指す。しかしながら、上述の各種実施例は、ポインタが三次元空間上を移動しポイントできるマルチポインティングデバイスに対しても、同様に適用できることは言うまでもない。この場合には、例えば関節とポインタの距離は、三次元の仮想空間上の距離を指す。
【００８１】
上述の各実施例の処理ステップは、矛盾のない限り、順番を入れ替えて実行してもよい。また、請求項に係る方法のステップを入れ替えた方法も、その請求項の技術的範囲に含まれることは言うまでもない。
【図１】
0005618926.tif 000002
【図２】
0005618926.tif 000003
【図３】
0005618926.tif 000004
【図４】
0005618926.tif 000005
【図５】
0005618926.tif 000006
【図６】
0005618926.tif 000007
【図７】
0005618926.tif 000008
【図８】
0005618926.tif 000009
【図９】
0005618926.tif 000010
【図１０】
0005618926.tif 000011