説明

マルチポインティングデバイスの制御方法及びプログラム

【課題】
マルチポインティングデバイスなどの、複数のポイント位置において独立に指示を行えるユーザインターフェースを用いて、ユーザの意図した指示を簡便に行えるようにする
【解決手段】
表示領域にオブジェクトを表示させる方法であって、表示領域に対して複数のポインタの各々により、独立に指示情報を指定できるポインティングデバイスから、前記複数のポインタの各々に対応した指示情報を取得するステップと、第1のポインタに対応する指示情報の変化が、予め定められた閾値を超えない場合、前記第1のポインタに対応する指示情報を、前記第1のポインタに対応する指示情報とは異なる指示情報に置き換え、前記第1のポインタに対応付けるステップと、前記複数のポインタの各々に対応した前記指示情報に基づいて、前記表示領域に表示されるオブジェクトを変化させるステップと、を有する、方法が提供される。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、マルチポインティングデバイスの制御方法及びプログラムに関する。
【背景技術】
【0002】
コンピュータ上で動作しているアプリケーションに対して、オペレータが適切な指示を与えるために、様々なマンマシンインターフェスが用いられている。
【0003】
例えば、ディスプレイ上に表示された仮想空間上の三次元モデルとしての骨格モデル(スケルトンモデル)に対して、ユーザの意図したポーズ(姿勢、形状等)を取らせるために、ユーザが適切な指示を与える必要がある。このために、様々なインターフェースが利用されている。また、二次元グラフィックスの分野においても、二次元グラフィックスを移動させたり、変形させたりするためにユーザインターフェースが利用される。この場合、ユーザの要求を簡便に、しかも適切に指示できるユーザインターフェースが必要とされる。
【0004】
例えば、上述の骨格モデルに意図したポーズを取らせるためにオペレータが用いるインターフェースとしては、マウス、二次元タブレット、マルチポインティングデバイス等がある。これらのデバイスは二次元グラフィックスに対するユーザインターフェースとしても同様に用いられる。また、その他のアプリケーションプログラムのユーザインターフェースとしても、盛んに利用されている。
【0005】
上述のユーザインターフェースのうち、近年、画面上の複数の位置を独立にポイントして、コンピュータに指示を与えることができるマルチポインティングデバイスが用いられている。典型的なマルチポインティングデバイスとしては、ディスプレイの表面にタッチパネルを設置し、このタッチパネルに対し直接指を用いて複数箇所を同時にポイントできるもの(例えば、マルチタッチスクリーン)が挙げられる。
【0006】
このマルチポインティングデバイスを用いて、オペレータは、コンピュータに対して種々の入力指示を与えることができる。以下に、その例を挙げる。たとえば、「タップ」は、画面に触れてすぐに離す操作で、マウスで行うクリックに対応する。「ダブルタップ」は、短時間に連続して2回タップする操作で、マウスで行うダブルクリックに対応する。「ドラッグ」は、画面に触れたまま指を移動させる操作で、マウスのドラッグに対応する。また、「フリック」は、タップと同時に指をずらす動作を意味し、マウスでは対応する操作は存在しない。「スワイプ」は、画面を掃くような操作であり、ドラッグとフリックの中間に対応する操作である。この「スワイプ」は、スクロール等において、操作する指を離した後もスクロールを継続させる場合などに用いられている。「ピンチイン」や「ピンチアウト」は、二本の指をドラッグさせてそれぞれ近づける操作および遠ざける操作に対応する。「タッチアンドホールド」は、一本の指で一定時間タッチスクリーンをタッチしたままの状態を保つ操作を意味する。
【0007】
また、画面を1本の指でなぞり特定のジェスチャ(例えば、円を描く、直線を描く等)を行うことにより、複数の指示を入力できるインターフェースとしては、タッチFLOがある。
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかしながら、マルチポインティングデバイスや、その他の様々なユーザインターフェースを用いたとしても、オペレータが骨格モデルに対して、意図した通りの指示を与えるには、依然としてオペレータに対して繁雑な作業が要求される。例えばディスプレイ上の骨格モデルにユーザの意図したポーズ(姿勢、形状等)を取らせるには、固定すべき関節の指示、移動すべき関節の移動、固定した関節の固定解除、他の関節の固定の指示、更に動かすべき関節の移動の指示等、ユーザは、煩雑な繰り返し操作を行わなければならない。また、複数の関節を任意の方向に移動させる指示を、簡便に行うこともできない。
【0009】
このような状況に鑑み、本実施例に係る方法及びプログラムは、マルチポインティングデバイスなどの、複数のポイント位置において独立に指示を行えるユーザインターフェースを用いて、ユーザの意図した指示を簡便に行えるようにする方法及びプログラムを提供することを目的とする。なお、本発明の目的は、例示として取り上げた上述の骨格モデルへの適用に限定されない。
【課題を解決するための手段】
【0010】
本方法によれば、表示領域にオブジェクトを表示させる方法であって、表示領域に対して複数のポインタの各々により、独立に指示情報を指定できるポインティングデバイスから、前記複数のポインタの各々に対応した指示情報を取得するステップと、第1のポインタに対応する指示情報の変化が、予め定められた閾値を超えない場合、前記第1のポインタに対応する指示情報を、前記第1のポインタに対応する指示情報とは異なる指示情報に置き換え、前記第1のポインタに対応付けるステップと、前記複数のポインタの各々に対応した前記指示情報に基づいて、前記表示領域に表示されるオブジェクトを変化させるステップと、を有する、方法が提供される。
【0011】
また、本発明の他の方法によれば、表示領域に骨格モデルを表示させる方法であって、表示領域上の複数の位置を独立にポイントできるポインティングデバイスによる複数のポインタの各々に、前記骨格モデルの関節を対応付けるステップと、前記複数のポインタの各々と、前記複数のポインタ各々に対応する関節との距離が近づくよう、前記骨格モデルのポーズを計算するステップと、前記計算された骨格モデルのポーズを表示するステップと、を有する方法が提供される。
【発明の効果】
【0012】
マルチポインティングデバイスなどの、複数のポイント位置において独立に指示を行えるユーザインターフェースを用いて、ユーザの意図した指示を簡便に行うことができる。
【図面の簡単な説明】
【0013】
【図1】本発明の一実施例に従った、骨格モデルの姿勢の指示を示す図である。
【図2】一実施例に従った、骨格モデルの姿勢の指示を示す図である。
【図3】一実施例に従った、紙の仮想オブジェクトを変形させる図である。
【図4】骨格モデルを用いて、ポインタと、ポインタにより制御される対象との対応付けに関する一例を示した図である。
【図5】一実施例に従った、三次元オブジェクトの姿勢の指示を示す図である。
【図6】一実施例に従った、ハードウエア構成を示す図である。
【図7】一実施例に従った、方法のフローチャートを示す図である。
【図8】一実施例に従った、別の方法のフローチャートを示す図である。
【図9】骨格モデル、親骨、子骨、及び座標系を示す図である。
【図10】CCD法による骨格モデルの制御方法を示す図である。
【発明を実施するための形態】
【0014】
例えば、三次元仮想空間で人体,動物,構造物等の姿勢(ポーズ,動き等)をシミュレートする際に用いられる骨格モデルを制御する手法の一例として,逆運動学(Inverse Kinematics)がある。この、逆運動学においては,骨格モデルを複数の骨と関節で定義する。逆運動学に基づく骨格モデルの場合、各々の骨および関節の位置,角度,回転(曲げ,捻り)等を意図した通りに制御することが必要となる。例えば、図9(a)に示される人の骨格モデルでは,各々の骨は関節で結合されており,各々の骨の動きが他の骨の動きに影響を与える。逆運動学には、CCD(Cyclic−Coordinate−Descent)などの、種々の骨格モデルの制御方法が存在する。詳細は後述する。
【0015】
そして、骨格モデルの姿勢を制御するためには、少なくとも、固定すべき関節と、動かすべき関節を指定する。なお、指先などの骨の先端も、本明細書では関節として統一的に扱い、説明する。動かすべき関節については、動かす方向と量(距離)を指定することが必要である。なお、固定された関節と動かすべき関節以外の関節は、その骨格モデルに応じて、適切な位置に移動する。
【0016】
本明細書では、実施例の説明が不必要に複雑化することを避けるため、この逆運動学に関しては、後述するように、概略の原理の説明にとどめ、その詳細は説明しない。なお,本発明は、特定の骨格モデルへの適用に限定されるものではない。
【実施例】
【0017】
図1は、本発明の一実施例に従って、マルチポインティングデバイスを用いた骨格モデルのポーズの制御を示している。以下、オペレータの指がマルチポインティングデバイスをポイントしている位置をポインタ位置と呼ぶ。すなわち、ポインタとは、マルチポインティングデバイスにオペレータの指などが触れている部分を指す。
【0018】
図1(a)は、画面に表示された骨格モデルX100を示している。骨格モデルX100は、腕を水平に伸ばしており、こちらを向いており、右手先が位置a100、左手先が位置b100にある。また、右足先は位置α100、左足先は位置β100にある。以上が骨格モデルX100の初期状態の位置を示している。ここで、位置とは、画面上の位置を指す。
【0019】
そして、オペレータの右手R1のポインタは、位置b100に存在している。また、オペレータの左手L1のポインタは、位置α100に存在している。
【0020】
マルチポインティングデバイスは、右手R1のポインタ位置及び左手L1のポインタ位置を逐次測定しており、これらの測定結果から、各ポインタの位置を知ることができる。ポインタ位置の時間的な変化により、ポインタの速度が算出できる。算出された右手R1のポインタの速度をVR1、左手L1のポインタの速度をVL1とする。更に、予め定められた速度閾値Vkがメモリ内に保存されているものとする。
【0021】
図1(a)では、オペレータの右手R1のポインタは、ベクトルn100方向に、位置b100から位置b101まで移動している。また、オペレータの左手L1のポインタは、位置α100に止まっている。このため、オペレータの右手R1のポインタの速度VR1は、VR1>Vkとなり、オペレータの左手L1のポインタの速度VL1は、VL1≦Vkが成立しているものとする。
【0022】
この場合、左手L1のポインタの速度VL1が速度閾値Vkを超えないため、左手L1のポインタは、骨格モデルの右足先を移動させる指示ではなく、右足先の関節を固定する指示を、骨格モデルに与える。そして、右手R1のポインタの速度VR1は閾値Vkを超えているため、右手R1のポインタが、骨格モデルの左手先の関節を移動させる指示を、骨格モデルに与える。
【0023】
図1(b)は、上述の図1(a)の操作の結果得られた、新たな姿勢の骨格モデルX101を示している。骨格モデルX101の右足先の関節は、固定関節として位置α100に固定されている。骨格モデルX101の左手先の関節は、位置b101に移動している。骨格モデルは、この操作に基づき、その他の骨と関節を適切な位置に移動させる。右手先は位置a101に移動している。また、左足先は、位置β101に移動している。他の関節および骨の位置をどのように決定するかは、逆運動学の計算方法及び骨格モデルのモデリングによって異なる。逆運動学の計算方法や骨格モデルのモデリングをどのように設定するかは、当業者が決定すべき事項であり、必要に応じて、適切な計算方法、適切なモデル、設定値等を選択すればよい。
【0024】
図1(b)は、更に、左手L1のポインタをベクトルn101方向に位置α100から位置α101に移動させ、右手R1のポインタは位置b101に止まっていることを示している。
【0025】
図1(c)は、図1(b)の上述の操作を終えた状態の骨格モデルX103のポーズを示している。骨格モデルX103は、右足先の関節がドラッグされ位置α101に移動している。左手先の関節は、位置b101に止まっている。また、この操作によって、他の関節及び骨も移動し、右手先の関節は、位置a102に移動し、左足先の関節は、位置β102に移動している。
【0026】
以上の実施例では、マルチポインティングデバイスによって、複数のポインタの位置を独立して計測し、ポインタの速度を予め定められた速度閾値Vkと比較している。そして、ポインタの速度に依存して、ポインタの速度が閾値Vkを超えないポインタについては、対応する関節の移動の指示を、対応する関節の固定の指示に置き換えている。これに対して、ポインタの速度が閾値Vkを超えるポインタについては、対応する関節の移動の指示を与えている。この移動の指示は、ポインタによる本来の指示をそのまま、骨格モデルに与えていることになる。
【0027】
なお、ポインタの移動距離が一定の閾値を超えた場合には、ポインタの速度にかかわらず、骨格モデルの関節の固定の指示に置き換える処理を行わず、関節の移動の指示としてもよい。また、速度閾値Vkの代わりに、移動距離閾値を用いてもよい。例えばた骨格モデルが最後に描画し直された時刻におけるポインタの位置から現在のポインタの位置までの移動距離を測定し、この移動距離を移動距離閾値と比較してもよい。
【0028】
図7は、この操作を示したフロー図である。まず、ステップ702において、マルチポインティングデバイスから、N個の独立した位置情報を取得する。図1の実施例の場合には、N=2である。
【0029】
ステップ704において、1番目のポインタの移動速度が速度閾値Vkを超えているか否かを判断する。1番目のポインタの速度が閾値Vkを超えていない場合(「はい」の場合)、ステップ705に移動し、1番目のポインタの指示を関節の固定点指示情報に設定する。逆に1番目のポインタの移動速度が速度閾値Vkを超える場合(「いいえ」の場合)、2番目のポインタの判断ステップ706に移動する。
【0030】
ステップ706では、ステップ704と同様の判断を2番目のポインタについて行う。必要に応じて、ステップ707が実行される。
【0031】
同様の判断をN番目のポインタの判断ステップ708まで行う。必要に応じて、ステップ709が実行される。
【0032】
ステップ710において、N個のポインタの指示情報を用いて、骨格モデルのポーズを計算する。なお、上述の判断ステップで、ポインタの速度が速度閾値Vkを超えていない場合には、ポインタの指示情報が固定点指示情報に置き換えられているため、この固定点指示情報を骨格モデルの計算に適用する。それ以外の場合には、ポインタの指示情報は、本来の指示情報である移動指示として用いられる。
【0033】
ステップ712において、計算された骨格モデルを表示する。
【0034】
表示が終了したら、ステップ702に戻る。以上のステップを繰り返すことにより、骨格モデルに所望のポーズを取らせることが容易に行える。
【0035】
図1(a)ないし(c)の操作を、たとえばマウスを用いて行ったとすると以下のようになる。マウスの左ボタンによるドラッグを関節の移動指示と定義し、マウスの右クリックを、関節の固定指示、又は関節の固定の解除指示と定義する。
【0036】
まず、固定関節を指示するために、骨格モデルの右足先をマウスで右クリックする。これによって、骨格モデルの右足先の関節が固定関節であることが指示される。次に、マウスを、骨格モデルの左手先の関節に移動させ、位置b100から位置b101まで左ドラッグする。この操作によって、図1(b)の骨格モデルX101の状態となる。次に、骨格モデルの左手先の関節を、右クリックして、関節の固定指示を行う。次に、マウスのカーソルを骨格モデルの右足先に移動させ、右クリックを行い、固定関節の解除を指示する。そして、マウスの左ドラッグを、位置α100から位置α101まで行う。この操作によって、図1(c)の骨格モデルX103の状態になる。
【0037】
以上のように、マウスのような単一のポインタを持つポインティングデバイスを用いた場合には、図1に示した骨格モデルのポーズの制御が非常に煩雑になる。これに対して、マルチポインティングデバイスを用いた上述の実施例の場合には、骨格モデルの姿勢の指示を簡便に行える。
【0038】
なお、本明細書に示される実施例の操作は、矛盾のない限り、既に例示したようなマルチポインティングデバイスを用いた種々の操作と組み合わせてもよい。例えば、複数のポインタのうち1つのポインタが静止しており、ポインタの指示が関節の固定指示となった場合に、そのポインタの静止時間が一定時間を超えたときは、指を離しても固定指示を継続させてもよい。この操作は、上述の実施例の機能と、タッチアンドホールドの機能を併用した操作と捉えることもできる。
【0039】
図2は、他の実施例を示している。図2(a)に示されるように、両足先に位置する2つのポインタの移動速度は、閾値Vkを超えないため、骨格モデルの両足先の関節は、それぞれオペレータの左手L2の2つのポインタで固定として指示されている。また、図2(b)に示されるように、骨格モデルの両手先の関節は、それぞれオペレータの右手R2の二つのポインタにより移動させる指示を行っている。すなわち、オペレータの右手人差し指に対応するポインタは、位置a200からa201に、閾値Vkを超える速度で移動しており、オペレータの右手親指に対応するポインタは、位置b200から位置b201に、閾値Vkを超える速度で移動している。このため、オペレータの右手R2に対応する二つのポインタは、本来の指示である移動の指示を骨格モデルに与える。従って、骨格モデルの右手先の関節は、a200からa201に移動する。同様に、骨格モデルの左手先の関節は、b200からb201に移動する。骨格モデルの両足先の関節は、固定関節として指示されるため、左右の足先の関節は、それぞれ位置α200、位置β200に止まっている。
【0040】
上述のように、図2(a)から図2(b)への骨格モデルのポーズの変形は、図1及び図7に示した手法と同様の操作を行うことにより実現できる。
【0041】
なお、骨格モデルのポーズの変形は、速度閾値Vkを用いずに、図8に示す変形例の手法を用いて、骨格モデルのポーズを変化させてもよい。
【0042】
図8に、変形例の手法の処理フローを示す。
【0043】
ステップ804において、複数のポインタの各々と、骨格モデルの関節との対応関係を決定する。例えば、図2(a)の場合には、オペレータの4つの指が、画面に触れており、4つポインタが、それぞれ、位置a200、位置b200、位置α200、位置β200に存在している。そして、これらのポインタのそれぞれを、骨格モデルの右手先の関節、左手先の関節、右足先の関節、左足先の関節に対応づける。また、ポインタの総数Nは、N=4である。なお、ポインタと関節との対応付けについては、図4を用いて後述する。
【0044】
ステップ806で、繰り返しのアルゴリズムのための、変数nの初期化(n=1)を行う。
【0045】
ステップ810は、n番目のポインタの位置に、このポインタに対応する関節を移動させる(又は両者を近づける)ために、骨格モデルのポーズを計算する。
【0046】
ステップ812は、繰り返しアルゴリズムのための変数nが、n≧Nであるか否かを判断する。
【0047】
ステップ814は、ステップ812の判断が「はい」である場合に実行される。この場合、全てのN個のポインタについて、処理が終了したため、骨格モデルを表示させる。
【0048】
ステップ816は、ステップ812の判断が「いいえ」である場合に実行される。この場合には、全てのN個のポインタについて、処理が終了していないため、nをインクリメントし、ステップ810に戻る。
【0049】
なお、上述のフローでは、ポインタ毎に骨格モデルを計算しているが、全てのポインタの位置情報を与えて、一度に骨格モデルの計算を実行させてもよい。いずれの計算方法を実行するかは、採用する骨格モデル、計算にかかる時間等を勘案して決定すればよい。
【0050】
ステップ818は、消滅したポインタや、新たに発生したポインタがあれば、ポインタと、関節との対応付けを更新する。また、ポインタの数が、増減した場合には、ポインタ数Nを適切に更新する。そして、ステップ806に戻る。
【0051】
以上の処理は、例えば図2の例の場合、骨格モデルの右手先の関節、及び左手先の関節が、それぞれ、位置a200から位置a201に、位置b200から位置b201に、移動する際に、図8に示す処理ステップの繰り返しが複数回行われることになる。なお、距離閾値Lpを設定し、ポインタと、対応する関節との距離がこの閾値Lpよりも大きい場合にだけ、骨格モデルを計算させるようにしてもよい。この場合には、Lpが小さいほど、骨格モデルの再表示は滑らかになる。なお、骨格モデルの複雑度、処理マシンの計算能力に応じて、適切な距離閾値Lpを設定してもよい。距離閾値Lpはユーザが設定できるようにしてもよい。あるいは、骨格モデルの複雑度に応じて、予め定められた閾値の値Lpを自動的に設定するようにしてもよい。骨格モデルの複雑度は、骨の数、関節の数、骨格モデルの周囲に貼り付けるポリゴンの数、ポリゴンにテクスチャマッピングをするか否か、骨格モデルの関節の曲がり角度に制限を設けるか否か、骨格モデルのレンダリングの所要時間等に基づき判断してもよい。
【0052】
なお、図8の繰り返し処理の途中で、ポインタが消滅したり、新たに発生したりした場合には、繰り返し処理を中断して、ステップ814の骨格モデルの表示、または、ステップ818に、強制的にジャンプしてもよい。
【0053】
図3は、他の実施例として、仮想的に表示された紙を折る操作を示した図である。
【0054】
図3(a)に示されるように、画面上に紙P301が示されている。そして、左手L3のポインタは、位置α300をポイントしており、その速度は、速度閾値Vkを超えていない。また、右手R3のポインタは、位置β300をポイントしており、ベクトルn5方向に、移動している。その速度は、速度閾値Vkを超えている。
【0055】
この場合、左手L3のポインタは、直線m300を折り目とする指示を仮想的な紙のモデルに与える。図3(a)の例の場合には、「点α300を通り、ベクトルn5との角度が直角となる直線」として折り目m300を決定してもよい。あるいは、直角ではなく、予め定められた角度を設定しておいてもよい。その他、折り目m300の方向は、紙が四辺形であれば、その対角線に対して平行にしてもよく、ユーザ又はシステム設計者が、適切な値を予め定めておいてもよい。
【0056】
図3(b)は、右手R3のポインタをベクトルn5方向に動かして、紙の角が位置β301に移動した紙P302を示している。
【0057】
図3(c)は、折り目m300で、紙が完全に折り返され、紙の角が位置β302に達した紙P303の状態を示している。
【0058】
図3に示した実施例では、ポインタの速度が速度閾値Vk超えていれば、ポインタの本来の指示であるドラッグを移動指示情報として、仮想的な紙のモデルに変形処理に適用する。そして、ポインタの速度が速度閾値Vkを超えない場合には、そのポインタの移動指示に代えて、紙の折り目を設定する指示を、仮想的な紙のモデルの変形処理に適用している。
【0059】
図4は、骨格モデルを用いて、ポインタと、ポインタにより制御される対象との対応付けに関する一例を示したものである。図4(a)には、骨401ないし403が関節411及び412で接続された、骨格モデルの一部が示されている。そして、ポインタ400が、骨格モデルの近くに存在している。ここで、ポインタ400は、関節411からL450だけ離れた位置に存在している。また、ポインタ400は、関節412とはL460だけ離れた位置に存在している。そして、L450<L460となっている。この場合には、ポインタ400に一番近い関節411が、ポインタ400に関連付けられるようにすればよい。なお、一定の閾値Laを設けて、ポインタ400から一番近い関節までの距離
が、閾値Laを超える場合には、ポインタ400と関節との関連づけを行わないようにしてもよい。
【0060】
図4(b)は、ポインタ400が関節411と関連づけされた後に、ポインタ400から関節411及び412までの距離が、それぞれL451、L461(L451>L461)となった場合を示している。この場合、ポインタ400から一番近い関節は、関節412となっている。しかしながら、既に図4(a)において、ポインタ400は、関節411と関連付けられているため、この関連付けを維持し、関連づけの変更は行わないようにしてもよい。
【0061】
このように、一旦関連付けされたポインタと関節とのペアを維持することによって、骨格モデルの変形を、より安定した形で行わせることが可能となる。ポインタと関節との関連づけを途中で変更すると、ユーザの意図しない関節がポインタに吸い寄せられるような挙動を示すことになる場合があるからである。
【0062】
なお、上述の対応付けは、一例を示したものであり、本発明はこれに限定されるものではない。
【0063】
図5は、他の実施例を示している。例示として、携帯電話の仮想的なオブジェクトが表示されている。
【0064】
図5(a)において、オペレータの左手L5のポインタは、携帯電話の上部の位置α500に存在している。そして、オペレータの右手R5のポインタは、携帯電話の横腹の部分の位置β500に存在している。そして、左手L5のポインタの速度は、速度閾値Vkを超えておらず、右手R5のポインタは、速度閾値Vkを超える速度でベクトルn500方向に、移動している。この実施例の場合には、左手L5のポインタは、携帯電話表面上の位置α500を通り、例えば、携帯電話の重心を通る直線s500を携帯電話の回転中心軸として設定する指示を与える。そして、オペレータが右手R5のポインタを、ベクトルn500方向に動かすに連れて、回転軸s500を中心に携帯電話が回転する。
【0065】
図5(b)は、上述の操作を行って、右手R5のポインタが位置β501まで移動し、携帯電話が、これに伴って、回転軸s500を中心に回転した状態を示している。
【0066】
図5(b)は更に、この状態において、右手R5のポインタの移動速度が、速度閾値Vkを超えなくなり、逆に、左手L5のポインタの移動速度が、速度閾値Vkを超え、ベクトルn501方向に移動し始めた様子を示している。この場合、回転中心は、右手R5のポインタを通り、携帯電話の重心を通過する直線s501(直線s501は、紙面にほぼ垂直である直線)を中心に、携帯電話が回転するようになる。
【0067】
図5(c)は、左手L5のポインタが位置α501まで移動した様子を示している。図示されているように、携帯電話は、回転中心軸として直線s501を中心として回転している。
【0068】
なお、上述の実施例では、回転中心として、閾値速度Vkを超えないポインタ位置であって、携帯電話の表面にある点から、携帯電話の重心を通る直線を回転軸として採用したが、重心以外の、予め定められた点を決めておいてもよい。あるいは、軸を中心とする回転ではなく。ポインタ位置を回転の中心点とする回転を行わせてもよい。回転の設定のしかたは、予め定めておけばよい。
【0069】
上記実施例では、二つのポインタを用いて、仮想的なオブジェクトを簡単な操作で所望の方向に回転させることが容易に行える。
【0070】
図6は、本明細書において説明した各種の実施例をインプリメントするシステム600のハードウエアの構成例を示している。システム600は、CPU601、ディスプレイ602、タッチスクリーン604、キーボード606、マウス608、ROM610、RAM612、外部メモリ媒体615を読み書きする外部メモリインターフェース614、ネットワークとの通信を行う通信インターフェース616、及び各ハードウエアを接続するバス620を含む。
【0071】
図9及び図10を用いて、骨格モデルにて関して以下説明する。
【0072】
三次元仮想空間で人体モデル,動物,構造物等の姿勢(ポーズ,動き等)を制御する際に用いられるこのような骨格モデルにおいては,図9(a)に示す各々の骨および関節の位置,角度,回転(曲げ,捻り)等を意図したとおりに制御することが必要となる。図9(a)に示される骨格モデルでは,各々の骨は関節で結合されており,各々の骨の動きが他の骨の動きに影響を与える。
【0073】
骨格モデルを制御する手法の一例として,逆運動学(Inverse Kinematics)のうちのCCD(Cyclic−Coordinate−Descent)法について以下に説明する。なお,本発明はこの手法への適用に限定されるものではない。
【0074】
図10に示すように,複数の関節J乃至Jと複数の骨B乃至Bを有する骨格モデルを例にして説明する。関節Jの位置が固定されている場合において,骨格モデルの骨Bの点Aを目標点である点Dに移動させる場合のCCD法の操作を以下に示す。CCD法は,1回の計算ステップで1つの関節(J)の角度のみを動かして,点Aと点Dとの距離を最小化し,順次この操作を全ての関節(J乃至J)について計算する。この操作によって,順次点Aと点Dとの距離が小さくなる。この計算を繰り返す。具体的な計算方法を以下に示す。
(1)図10(b)に示すように,まず,関節Jの回転角度だけを操作して点Aと点Dとの距離が最短になるようにする。このためには,関節Jを中心として骨Bを角度θだけ回転させ,関節Jと目標Dとを結んだ直線h上に,点Aを移動させる。これによって,点Aは,直線h上に位置するため,点Aと点Dとの距離が最短になる。
(2)図10(c)に示すように,次に関節Jの回転角度だけを操作して点Aと点Dとの距離が最短になるようにする。このためには,関節Jを中心として骨Bを角度θだけ回転させ,関節Jと目標Dとを結んだ直線h上に,点Aを移動させる。これによって,点Aと点Dとの距離が最短になる。
(3)図10(d)に示すように,次に関節Jの回転角度だけを操作して点Aと点Dとの距離が最短になるようにする。このためには,関節Jを中心として骨Bを角度θだけ回転させ,関節Jと目標Dとを結んだ直線h上に,点Aを移動させる。これによって,点Aと点Dとの距離が最短になる。
(4)同じ操作を上記(1)から再度繰り返す。
【0075】
点Aと点Dの距離が閾値e以下になること,及び反復回数が上限回数を超えたこと,の少なくともいずれか一方が満たされたときに計算を打ち切ることとしてもよい。
【0076】
上記の例では,点Aは,端点であったが,一般には,骨格の関節である場合もある。
【0077】
以上、本発明の各種実施例について説明したが、本発明は、上述のマルチポインティングデバイスへの適用に限定されるものではなく、その他の様々なユーザインターフェースに適用できることは言うまでもない(例えば、単一のポインタを持つポインティングデバイスであっても、複数のオペレータがネットワーク等を介して接続され、同一のオブジェクトに対して変形を行わせる場合にも適用できる)。また、本発明は、コンピュータグラフィックスの分野への適用に限られるものではなく、携帯電話、タブレットコンピュータ、プロジェクタ、テレビジョン等を用いて表示を行うコンピュータアプリケーションに対する、ユーザからの指示にも適用し得る。加えて、アプリケーションプログラムに対する単独のオペレータによる指示ばかりでなく、複数のオペレータによる複数の独立した指示に対し用いてもよい。
【0078】
なお、通常、マルチポインティングデバイスは、オペレータの複数の指をタッチパネルに接触させて、それぞれの接触位置がポインタとしての機能を果たすが、本発明では、タッチパネルに触れるものとしは、オペレータの指以外のもの(例えばペン等)であってもよい。また、タッチパネルに触れる指は、両手の指を用いてもよく、また、片手の複数の指を用いてもよい。加えて、マルチポインティングデバイスは、タッチパネルに限定されるものではなく、複数の独立した指示を与えることができるあらゆる入力用ユーザインターフェースであってもよい。更に、ユーザインターフェースは、接触を伴わないインターフェースであってもよい。たとえば、音声、光等を用いたものであってもよい。また、複数のオペレータによる指示であってもよい。この場合、複数のオペレータは、ネットワークを介して遠隔地に存在してもよい。
【0079】
ポインタは、マウスのカーソルのように画面上に表示させてもよいし、非表示であってもよい。非表示であったとしても、画面上に指が触れていれば、ユーザはポインタの位置を認知できるからである。
【0080】
なお、上述の実施例では、ポインタが、二次元の表示画面上をポイントできる例を示した。したがって、例えば、上述の実施例での関節とポインタの距離は、画面に投影された関節とポインタとの画面上での距離を指す。しかしながら、上述の各種実施例は、ポインタが三次元空間上を移動しポイントできるマルチポインティングデバイスに対しても、同様に適用できることは言うまでもない。この場合には、例えば関節とポインタの距離は、三次元の仮想空間上の距離を指す。
【0081】
上述の各実施例の処理ステップは、矛盾のない限り、順番を入れ替えて実行してもよい。また、請求項に係る方法のステップを入れ替えた方法も、その請求項の技術的範囲に含まれることは言うまでもない。

【特許請求の範囲】
【請求項1】
表示領域にオブジェクトを表示させる方法であって、
表示領域に対して複数のポインタの各々により、独立に指示情報を指定できるポインティングデバイスから、前記複数のポインタの各々に対応した指示情報を取得するステップと、
第1のポインタに対応する指示情報の変化が、予め定められた閾値を超えない場合、前記第1のポインタに対応する指示情報を、前記第1のポインタに対応する指示情報とは異なる指示情報に置き換え、前記第1のポインタに対応付けるステップと、
前記複数のポインタの各々に対応した前記指示情報に基づいて、前記表示領域に表示されるオブジェクトを変化させるステップと、
を有する、方法。
【請求項2】
前記指示情報は、前記表示領域における前記ポインタの位置であり、
前記閾値は、前記表示領域における前記ポインタの速度、又は移動距離である、
請求項1記載の方法。
【請求項3】
前記オブジェクトは、骨と骨を関節で接続した骨格モデルであり、
前記指示情報は、関節の位置であり、
前記異なる指示情報は、関節を固定する指示である、
請求項1又は2記載の方法。
【請求項4】
前記ポインティングデバイスは、前記オブジェクトを表示すためのディスプレイを有するタッチパネルである、請求項1ないし3のうちいずれか1項記載の方法。
【請求項5】
前記ポインタは、表示領域において不可視である、請求項1ないし4のうちいずれか1項記載の方法。
【請求項6】
表示領域に骨格モデルを表示させる方法であって、
表示領域上の複数の位置を独立にポイントできるポインティングデバイスによる複数のポインタの各々に、前記骨格モデルの関節を対応付けるステップと、
前記複数のポインタの各々と、前記複数のポインタ各々に対応する関節との距離が近づくよう、前記骨格モデルのポーズを計算するステップと、
前記計算された骨格モデルのポーズを表示するステップと、
を有する方法。
【請求項7】
前記対応付けるステップは、
第1のポインタに、いずれの関節も対応付けられていない場合は、前記第1のポインタに一番近い第1の関節を、前記第1のポインタに対応する関節とし、前記第1のポインタに、既に第2の関節が対応付けられている場合には、前記第1のポインタに一番近い第3の関節が存在する場合であっても、前記第1のポインタと、前記第2の関節との対応関係を維持する、ステップ、
を含む、請求項6記載の方法。
【請求項8】
請求項1ないし7のうちいずれか1項記載の方法をコンピュータに実行させる命令を有するプログラム。




【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2013−20446(P2013−20446A)
【公開日】平成25年1月31日(2013.1.31)
【国際特許分類】
【出願番号】特願2011−153251(P2011−153251)
【出願日】平成23年7月11日(2011.7.11)
【出願人】(596021562)株式会社セルシス (22)
【Fターム(参考)】