(57)【要約】【解決手段】  分散型情報処理及び対話型用のシステムは、システム出力のそれぞれの出力部分を作り出すように配置されている複数の出力装置と、複数のアプリケーションプロセッサと、複数のアプリケーションプロセッサとデータ通信している状態サーバーと、を含んでいる。各それぞれの出力部分は、コンテキスト情報によって定義されている。各アプリケーションプロセッサは、１つ又は複数のそれぞれのアプリケーションプログラムを処理するように構成されており、コンテキスト情報に応答する。各アプリケーションプロセッサは、それぞれの出力部分を作る際に出力装置を制御するため、関係付けられたそれぞれの出力装置と連結されている。状態サーバーは、複数のアプリケーションプロセッサにコンテキスト情報を提供する。アーキテクチャは、出力装置が、装置の作動並びにビデオ表示を含む様々な出力を作り出し、様々な入力を受信する、もっと一般的なシステムに拡張されている。【選択図】          図１
2008519340.tif 000002
【特許請求の範囲】
【請求項１】
分散型情報処理及び対話型システムにおいて、
システム出力のそれぞれの出力部分を作るために配置されている複数の出力装置であって、各それぞれの出力部分はコンテキスト情報によって定義されている、出力装置と、
複数のアプリケーションプロセッサであって、各アプリケーションプロセッサは、１つ又は複数のそれぞれのアプリケーションプログラムを処理するように構成されており、前記コンテキスト情報に応えて、関連付けられたそれぞれの出力装置に連結され、前記それぞれの出力部分を作る際に、前記関係付けられたそれぞれの出力装置を制御するアプリケーションプロセッサと、
前記複数のアプリケーションプロセッサとデータ通信して、前記複数のアプリケーションプロセッサに前記コンテキスト情報を提供する状態サーバーと、を備えているシステム。
【請求項２】
前記複数の出力装置は、前記システムの出力ディスプレイのそれぞれの表示部分を表示するように配置されている１つ又は複数のディスプレイ装置を備えている、請求項１に記載のシステム。
【請求項３】
前記複数のアプリケーションプロセッサは、それぞれ、前記１つ又は複数のディスプレイ装置の内の１つと関係付けられており、前記システムのそれぞれの表示部分の画像を形成する際に、前記関係付けられているディスプレイ装置を制御する、請求項２に記載のシステム。
【請求項４】
１つ又は複数のユーザー活動を検出し、それに応えてユーザー活動信号を作る入力検出器と、
前記入力検出器及び前記状態サーバーとデータ通信して、前記状態サーバーによって処理するため、前記ユーザー活動信号に関する情報を伝える入力プロセッサと、を更に備えている、請求項１に記載のシステム。
【請求項５】
各アプリケーションプロセッサは、前記関係付けられているそれぞれの出力装置に変化を作り出す前記それぞれのアプリケーションプログラムの処理に応じて前記状態サーバーへ更新メッセージを急送するように構成されており、前記状態サーバーは、前記更新メッセージを他のアプリケーションプロセッサに反映する、請求項１に記載のシステム。
【請求項６】
前記状態サーバーは、システム情報を、前記複数のアプリケーションプロセッサのそれぞれで同期し、同じアプリケーションプログラムを処理するアプリケーションプロセッサが、実質的に同じプログラム状態を有するように構成されている、請求項１に記載のシステム。
【請求項７】
前記状態サーバーは、同期メッセージを前記複数のアプリケーションプロセッサに送って、前記複数のアプリケーションプロセッサのそれぞれで前記システム情報を更新する、請求項６に記載のシステム。
【請求項８】
前記状態サーバーは、前記システム情報の時刻同期を維持する、請求項６に記載のシステム。
【請求項９】
データ処理方法において、
個別のアプリケーションプロセッサで実質的に同じアプリケーションプログラムを処理する段階と、
前記アプリケーションプログラムの前記処理を同期装置で同期する段階であって、アプリケーションプロセッサの共通の状態を維持すると共に、前記共通の状態への変化に応じて、前記アプリケーションプロセッサに更新メッセージを提供する、同期する段階と、
前記個別のアプリケーションプロセッサのそれぞれにおいて、全体としてシステム出力を形成するそれぞれの出力を形成する段階であって、前記アプリケーションプロセッサは、前記同期装置から受信した更新メッセージに応えてローカル状態を更新し、あらゆるローカル状態の変化に応じて、前記同期装置に状態変化メッセージを提供する、それぞれの出力を作る段階と、から成るデータ処理方法。
【請求項１０】
前記同期する段階は、全てのアプリケーションプロセッサが共通の状態を有するように、前記同期装置で受信した前記状態変化メッセージに入っている情報を、前記アプリケーションプロセッサに反映させる段階を含んでいる、請求項９に記載のデータ処理方法。
【請求項１１】
前記同期する段階は、前記同期装置と前記アプリケーションプロセッサの間で、共通の時刻状態を維持する段階を含んでいる、請求項１０に記載のデータ処理方法。
【請求項１２】
前記同期する段階は、前記同期装置と前記アプリケーションプロセッサの間で、入力データ及びアプリケーション出力データの共通のデータ状態を維持する段階を含んでいる、請求項１０に記載のデータ処理方法。
【請求項１３】
前記それぞれの出力を作る段階は、各それぞれのアプリケーションプロセッサにおいて、それぞれのディスプレイ装置を制御して、それぞれのディスプレイ装置上に出力ディスプレイのそれぞれの表示部分を表示する段階を含んでいる、請求項９に記載のデータ処理方法。
【請求項１４】
前記それぞれのアプリケーションプロセッサで、
前記それぞれのアプリケーションプロセッサでそれぞれのアプリケーションプログラムとのユーザー対話を検出する段階と、
前記ユーザー対話に応えて、前記アプリケーションプログラムの前記それぞれの出力を更新する段階と、
前記ユーザー対話に関する情報を前記同期装置に伝える段階と、
前記ユーザー対話に関する前記同期情報を、前記同期装置から、前記他のそれぞれの表示部分と関係付けられている他のそれぞれのアプリケーションプロセッサへ伝える段階と、を更に含んでいる、請求項９に記載のデータ処理方法。
【請求項１５】
それぞれのアプリケーションプロセッサで、関係付けられているそれぞれのディスプレイ装置を制御して、出力ディスプレイのそれぞれの表示部分を前記それぞれのディスプレイ装置上に表示する段階と、
前記アプリケーションプロセッサで、前記ユーザー対話に応じて、前記ユーザー対話が、前記関係付けられているそれぞれの表示部分の前記それぞれの表示を変化させるべきか否かを判定する段階と、
変化させる場合は、前記それぞれの表示部分の前記表示を更新する段階と、を更に含んでいる、請求項１４に記載のデータ処理方法。
【請求項１６】
前記ユーザー対話を検出する段階は、複数の実質的に同時の、前記それぞれの表示部分とのユーザー対話を検出する段階を含んでいる、請求項１５に記載のデータ処理方法。
【請求項１７】
前記ユーザー対話を検出する段階は、
前記それぞれの表示部分のディスプレイ画面の前の手の動きを検出する段階と、
前記それぞれの表示部分の前記ディスプレイ画面のタッチ画面のユーザータッチを検出する段階と、
以前にユーザータッチがあったタッチ画面にユーザータッチが無いことを検出する段階と、の内の少なくとも１つを含んでいる、請求項１５に記載のデータ処理方法。
【請求項１８】
必要であれば、前記同期情報に基づいて、前記ユーザー対話に応えて、前記他のそれぞれの表示部分の内の１つ又はそれ以上で表示を更新する段階を更に含んでいる、請求項１５に記載のデータ処理方法。
【請求項１９】
前記同期情報を、別のそれぞれのアプリケーションプロセッサで受信する段階と、
前記ユーザー対話が、前記他のそれぞれのアプリケーションプロセッサと関係付けられている前記表示部分を変化させるべき場合は、前記表示部分を更新する段階と、を更に含んでいる、請求項１５に記載のデータ処理方法。
【請求項２０】
データ処理方法において、
実質的に同じアプリケーションプログラムを個別のアプリケーションプロセッサで処理する段階と、
個別のディスプレイ装置の所定の表示部分に、前記アプリケーションプログラムの出力表示を表示する段階であって、前記所定の表示部分は、各アプリケーションプログラムに割り当てられたそれぞれのコンテキストによって定義されており、前記それぞれのコンテキストは、各アプリケーションプログラムのローカル状態の一部である、表示する段階と、
前記個別のアプリケーションプロセッサのそれぞれが、同じシステム状態を維持することができるように、前記個別のアプリケーションプロセッサのそれぞれから受信される状態変化情報を前記他のアプリケーションプロセッサと共有して、前記アプリケーションプログラムの前記処理と、前記所定の表示部分の前記表示を、同期装置内で同期する段階と、から成るデータ処理方法。
【請求項２１】
分散型情報処理及び対話型システムにおいて、
複数の出力装置とアプリケーションプロセッサであって、
前記複数の出力装置は、一体となってシステム出力を作るように配置されており、
前記アプリケーションプロセッサは、それぞれ、１つ又は複数のそれぞれのローカルアプリケーションプログラムを処理し、それに応じて状態変化を作り出し、
各それぞれのアプリケーションプロセッサと出力装置は、組み合わされて、前記システム出力の指定された部分だけを作り、前記部分は、前記アプリケーションプロセッサには既知のコンテキスト情報によって定義されており、前記それぞれのアプリケーションプロセッサは、前記状態変化に関する情報を含んだメッセージを送る、複数の出力装置とアプリケーションプロセッサと、
前記アプリケーションプロセッサとデータ通信している同期サーバーであって、
前記同期サーバーは、それぞれのアプリケーションプロセッサから、前記アプリケーションプログラムのそれぞれのローカルコピー内の変化に依る、前記それぞれのアプリケーションプロセッサのローカル状態の状態変化を定義するメッセージを受信し、
前記受信したメッセージを他のそれぞれのアプリケーションプロセッサに反映させて、前記それぞれのローカルアプリケーションプログラムが前記状態変化を反映させるために更新され、必要であれば、前記システム出力の前記それぞれの指定された部分が更新されるようにする、同期サーバーと、を備えているシステム。
【請求項２２】
分散型情報処理及び対話型のためのシステムにおいて、
複数のディスプレイ装置とアプリケーションプロセッサであって、
前記複数のディスプレイ装置は、一体となってシステム出力表示を表示するように配置されており、
前記アプリケーションプロセッサは、それぞれ、共通のアプリケーションプログラムのそれぞれのローカルコピーを処理し、それに応じて、前記複数のディスプレイ装置上に形成される画像を含む前記システムの出力表示として表示するための情報を作り、
各それぞれのアプリケーションプロセッサとディスプレイ装置は、組み合わされて、前記システム出力表示の指定された部分だけを表示し、前記部分は、前記アプリケーションプロセッサには既知のコンテキスト情報によって定義されている、複数のディスプレイ装置とアプリケーションプロセッサと、
前記アプリケーションプロセッサとデータ通信している同期サーバーであって、
前記同期サーバーは、前記アプリケーションプログラムの前記それぞれのローカルコピー内の変化に依る、前記システム出力表示の変化を定義する、それぞれのアプリケーションプロセッサからのメッセージを受信し、
前記メッセージを他のそれぞれのアプリケーションプロセッサに反映させて、前記共通のアプリケーションプログラムの前記それぞれのローカルコピーが、前記変化を反映させるために更新され、必要であれば、前記システム出力表示の前記それぞれの指定された部分が更新されるようにする、同期サーバーと、を備えているシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概括的にはデータ処理システムに関する。具体的には、本発明は、分散型情報提示及び対話型システムに関する。
【背景技術】
【０００２】
本特許書類の開示には、著作権保護の対象となる資料を含んでいる部分がある。本特許書類又は特許開示は特許及び商標局の特許ファイル又は記録に掲載されているので、著作権の所有者は、これを誰かが複製することに対して異論を唱えるものではないが、そうでない場合は、如何なる著作権も全てこれを留保する。
【０００３】
分散型データ収集及び処理システムは、リアルタイムデータを含め大量のデータを回収、記憶、及び操作できるようにする。リアルタイムデータは、受信されるのと同じ速度で更新及び処理されるデータである。リアルタイムデータは、様々なソースで生まれる。例としては、監視されているシステム又は環境内のセンサーネットワークと、在庫又は資産管理のための無線ＩＣタグ（ＲＦＩＤ）追跡システムが挙げられる。以上及びその他の関連技術は、組織に、組織運営の全ての態様に関する大量のリアルタイム情報へのアクセスを与えた。これらの態様には、例えば、消費者の行動、競争相手の行動、従業員の生産性、サプライチェーン活動、製造、店内活動などが含まれる。
【０００４】
大きな組織の場合、この情報は、決定をくだしたり、又は洞察を展開させるのに非常に価値あるものと成り得る。集合体となれば、この情報は、これ以外では直ちに明白になることのないパターン又は傾向を示す場合がある。この情報は、時間を掛けて処理すると、将来の推測に用いることができる展開を提示する場合がある。大量のデータを収集し管理することにより、システムの状態又は作用の新しい視点を提供することができる。
【０００５】
しかしながら、膨大な量のデータと相互接続の密度のため、標準的なワークステーションでこの情報を容易に視覚化するのは困難である。従来のワークステーションは、パーソナルコンピューター型の技術に基づいており、一般的に、演算装置と、ディスプレイ画面、マウス又は他の入力装置を含むユーザーインターフェースを含んでいる。マルチメディアの能力は情報の提示を向上させることはできるが、小型で、機能が制限されている従来の装置では、情報の有意義な呈示が難しい。
【０００６】
更に、データの複雑さと決定を下すプロセスには、複数のエキスパートの間で共通の視点及び協力が必要となる。大型画面とマルチメディアの能力を使っても、数人のみが、従来のワークステーションを同時に見て対話できるだけである。マウス又はキーボードの操作が必要な場合、たった一人がワークステーションを制御できるだけで、その間、限られた数の他の参加者はその処理を眺めている。
【０００７】
両方の問題に対する１つの解決策は、エキスパートを没入型環境にアクセスさせ、それにより、彼らが情報を眺め、共有し、情報と物理的に対話できるようにすることである。或る例では、その様な環境は、タッチ可能画面、３−Ｄマウス、データグローブなどの様な代替的対話様式と共に、大型高解像度ディスプレイ、携帯情報端末（ＰＤＡ）、及び三次元（３−Ｄ）ディスプレイで作られている。
【０００８】
技術と形態要因の両方の制約のせいで、その様な環境は、１つの論理アプリケーションを複数のコンピューターに亘って分散させることのできるシステムと、没入型環境を作り上げる表示システムを必要とする。その様なシステムは、視覚的表示とユーザー対話の両方の分散を取り扱わなければならない。
【０００９】
必要な能力を提供する適切なシステムは、これまで利用可能になってない。現在は、複数且つ場合により異質のコンピューター、複数のディスプレイ、場合により異なる形態要因、及び複数の対話様式にまたがるアプリケーションを作るための標準的なアーキテクチャ、言語、又はプロトコルは無い。その様なアプリケーションは、複数のコンピューター、複数のディスプレイ、及び複数の対話様式の間の対話を管理するアプリケーション開発者による走り書きから作り出さなければならない。市販されている幾つかのシステムは、通常、情報と図形データを画面に表示できる高価なビデオプロセッサを使って作られるが、必ずしも結合性のあるアプリケーションとしてではない。ジュピター社から販売されている例があるが、数十万米国ドルの値が付いている。
【００１０】
従って、確認されているこれらの問題を解決する改善されたシステム及び方法が必要とされている。
【発明の開示】
【課題を解決するための手段】
【００１１】
導入に過ぎないが、ここに開示している実施形態は、分散型情報処理及び対話型のためのシステムと方法を提供している。或る一般的な実施形態では、アプリケーションプロセッサは、１つ又は複数のソフトウェアアプリケーションに応答して、各出力が一体になってシステム出力を形成するように出力を作り出す。個別のプロセッサ出力は、ディスプレイ装置上の表示か、電子ロックを解除する様なアクチュエータの働きか、データベース内の情報を変更することである。プロセッサ出力は、プロセッサからの出力データの変化と同じく簡単である。プロセッサにより生成される各変化又は出力は、各プロセッサのローカル状態の変化、並びに全体的システム状態の変化である。アプリケーションプロセッサの状態の各変化は、状態変化メッセージで状態サーバーへ報告される。
【００１２】
状態サーバーは、各プロセッサのローカル状態を同期させるように働く。状態サーバーは、１つのアプリケーションプロセッサから受信した状態変化メッセージを、システム内の他の全てのアプリケーションプロセッサに反映する。更に、どの様なシステム入力が状態サーバーに報告されても、状態サーバーは、状態の変化を再び全てのアプリケーションプロセッサに反映する。この様にして、アプリケーションプロセッサは、同期状態に維持される。他のプロセッサの出力に反映されるべき、１つのプロセッサでの出力の変化は、そのようになされ、自動的、且つ切れ目無く、変化を状態サーバーへ報告して、変化を他の全てのプロセッサに反映する。
【００１３】
或る特定の実施形態では、各アプリケーションプロセッサは、配列型出力ディスプレイの１つ又は複数の画像タイルを生成するディスプレイ装置を駆動する。各プロセッサは、ディスプレイの指定された部分しか表示する責任はないが、状態サーバーからの状態変化メッセージを使用して、ディスプレイ全体用の状態情報を更新する。ディスプレイの、割り当てられ、指定された部分は、プロセッサのコンテキストである。入力装置は、マウスの動き及びマウスのクリックと同様に、ユーザーのディスプレイとの対話を検出するが、或る実施形態では、ディスプレイの前の手の動きを検出する。検出されたユーザー対話は、状態サーバーに報告され、ユーザー対話に関する情報は、状態サーバーから、画像を生成するアプリケーションプロセッサに反映される。画像は、状態サーバーからの情報に基づいて更新される。
【発明を実施するための最良の形態】
【００１４】
本実施形態は、アプリケーション開発者が、没入型環境内にある複数のディスプレイとコンピューターに亘ってアプリケーションがどの様に分散されているかについて明確な懸念無しに、データ集約型の協調アプリケーション（collaborative applications）を作ることができる、ソフトウェアアーキテクチャと一様な抽象層（abstraction
layer）を提供している。このアーキテクチャは、（ａ）複数のマシン及び複数の形態要因に亘るアプリケーション又はアプリケーションのセットを分割し、（ｂ）異なるコンピューター及び／又はプロジェクターの様な異なる出力装置上のディスプレイ部分の様な出力部分を整列させるための機構を提供し、（ｃ）複数のマシンによって制御されている複数の入力装置からユーザー対話を収集して、アプリケーションがユーザー対話の同期された視点を有するようにするための手段を提供し、（ｄ）単一の演算環境内で複数のデータ集約型の協調アプリケーション（collaborative
applications）を実行し協働できるようにするため通信／同期化機構を提供し、（ｅ）アプリケーションの複数のユーザーが、没入型環境の中で互いに対話できるようにするユーザーインターフェース構造を提供する、という５つの機構から成る高レベルの基本要素を通して実施される。
【００１５】
これらの実施形態によるソフトウェアアーキテクチャは、没入型環境用のデータ集約型の協調アプリケーション（collaborative applications）を作るための一様な抽象層（abstraction layer）を提供する。一様な抽象層（abstraction
layer）は、アプリケーション開発者を、環境の低レベルの細部を管理することから解放するので、彼らの生産性とアプリケーションの質を劇的に上げる。この革新は、更に、アプリケーション開発者が、没入型環境用のデータ集約型の協調アプリケーション（collaborative
applications）を開発できるようにする。
【００１６】
本アーキテクチャは、分散没入型の複数ユーザーがいる環境内でアプリケーションをサポートするように作られており、環境は、通常のデスクトップ作動構造によってはサポートされていない。従って、アーキテクチャは、開発者を環境の複雑さから遮蔽し、彼等が、一様な抽象層（abstraction layer）を通して末端ユーザーのアプリケーションを書き込めるように作られている。その層は、どのアプリケーションも、２つ以上の物理的コンピューターに常駐していることを想定している。従って、それは、アプリケーションを区画に分け、その区画を同期させるための透過的サポートを提供する。開発者は、アプリケーションを、あたかも１つのコンピューター上の１つのプロセスであるかのように作る。本アーキテクチャは、更に、幾つかのアプリケーションが、１つの環境又は複数の場所の中で協働することも想定している。従って、それは、例え複数のプラットフォーム及び動作様式に亘ってでも、その全体環境を維持するのに必要なメッセージ送信及び同期機構を提供する。開発者に必要なのは、異なるアプリケーションそれぞれが、異なる状態であるのを理解することを確認することだけである。更に、本アーキテクチャは、幾つかの入力機構があり、入力機構の内の１つ又はそれ以上は、１人又は複数のユーザーからの複数の同時入力を許容するということを想定している。本アーキテクチャは、末端のアプリケーションに、全ての入力の共通の同期された視点を提供する。開発者に必要なのは、それらの入力を（アプリケーションのルールに基づいて）状態変化にマップすることだけで、その後それは、アーキテクチャによって同期される。最後に、本アーキテクチャは、幾つかの末端ディスプレイが複数の配列型プロジェクターで構成されると想定している。この場合、本アーキテクチャは、複数の配列のエッジを正確に整列させて混合するのに必要なソフトウェア機能を供給する。これは、実行時にユーザーによって行われなければならないが、この複雑さは、アプリケーション開発者には隠されている。各構成要素の詳細を、以下に列挙する。
【００１７】
ネットワーク型メッセージングコンポーネント：本アーキテクチャは、全てのアプリケーションを、同期及びメッセージングを制御する集中処理サーバー（centralized server）に自動的に接続する。ネットワーク化の複雑さは、開発者には隠されており、アーキテクチャは、メッセージを、アプリケーションに直接送る。結果として、ローカル型対話（例えば、取り付けられたキーボードから）とネットワーク型対話（例えば、ネットワーク型制御装置から）の間に違いは無い。更に、開発者は、ウィンドウズ（登録商標）の「メッセージマップ」と非常に良く似たやり方でメッセージを取り扱うが、本アーキテクチャは、メッセージマップの結果を全てのコンピューターに分散させるように取り扱う。メッセージは、アプリケーション、又はタッチ画面又はデータグローブの様な専用のユーザーインターフェース装置から生まれる。
【００１８】
ネットワーク型時刻同期：本アーキテクチャは、更に、全てのアプリケーション及び／又はアプリケーションのフラグメントが、共通の同期された時刻を有することを保証する。これは、動画及び状態管理には重要である。共通の時刻データに加えて、本アーキテクチャは、状態、動画、及びあらゆる他の時間ベースのデータを管理するのに用いられる「補間器」類を供給する。補間器オブジェクトには、開始及び終了時刻と、開始及び終了値と、数値が時間の経過に亘ってどのように変わるかを決める補間機能と、が割り当てられる。補間器は、一旦作られると、動画及び他の時刻感知機構に、時刻同期値を供給する。
【００１９】
アプリケーションのフラグメント化：アプリケーション開発者は、オブジェクトを１つの大きな仮想キャンバス上に配置して動画にする１つのアプリケーションを書き込むことができる。ホストコンピューター群は、それぞれ、それらが制御する仮想キャンバスの領域を指定する小さなデータファイルを有している。これは、一般に、コンピューターの能力と、画面の物理的配置によって決められる。アプリケーションが複数のマシンで実行されるとき、本アーキテクチャは、データファイルを使用してキャンバスの適切な部分を描く。先の２つの特徴は、全てのフラグメントが同期され、それら自体を１つの論理的なアプリケーションとして提示することを保証する。
【００２０】
アプリケーション調整：或る環境、特に異なるハードウェアプラットフォームを備えた環境では、幾つかの個別のアプリケーション（１つのフラグメント化されたアプリケーションとは対照的に）は、１つの作業環境を提供するために対話する必要があるかもしれない。これも、本アーキテクチャによってサポートされる。本アーキテクチャは、ネットワーク型メッセージ送信構成要素を使用して、環境状態の変化を、登録された全てのアプリケーションにメッセージ送信する。各アプリケーションは、固有の基準に従って応答することができる。
【００２１】
画面の整列：本アーキテクチャは、配列型投影画像を使用してディスプレイ出力を提示することをサポートする。配列型投影に付帯する１つの特有の問題は、単一の連続する表示空間を作るために、隣接するプロジェクターを注意深く整列させ、エッジ混合させなければならないことである。本アーキテクチャは、先に述べたデータファイル内の情報を使用して、画像を整列させなければならないか、どのように整列を行わなければならないか、を判断する。整列が必要であれば、本アーキテクチャは、ユーザーの供給した整列データをファイルに読み込み、アプリケーション出力で必要な画像ワーピングを実行する。この機能は、プロジェクター間の色補正にまで拡張することもできる。末端のディスプレイ装置の細部は、アプリケーション開発者には遮蔽されている。
【００２２】
高レベル基本要素：本アーキテクチャは、開発者を、基底にあるグラフィク技術の複雑さから、一式の共通の高レベル基本要素で遮蔽している。これらの基本要素は、２Ｄオブジェクト、３Ｄオブジェクト、線、ウェブキャム、ピクチャ、ビデオ、音、テキスト、グラフ、及びバイナリ・データオブジェクトの様な一般的なオブジェクトを表す。
【００２３】
場面のカプセル化：最終的に、アプリケーション開発者は、所与の「場面」の中の全てのオブジェクト、データ、及びロジックをカプセル化する「コントローラー」オブジェクトの例を作ることによって、上記各特徴を利用する。本アーキテクチャは、一回に１つのコントローラーの出力を表示し、コントローラーを、「アプリケーション」又は「エピソード」とほぼ同義語にする。しかしながら、コントローラーは、入れ子にしてもよく、そうでなければ、オブジェクトを個別のバッチに配置するのに用いられる。このことは、アプリケーション開発者が開発努力を数人に分配するのに役立つ。更に、必要があれば、異なるバッチは異なる周波数で更新することができるので、全体的グラフィック性能を上げるのにも役立つ。
【００２４】
さて、図１は、分散型情報処理及び対話型のためのシステム１００を示している。システム１００は、状態サーバー１０２、複数のアプリケーションプロセッサ又は出力装置１０４、及び複数の入力装置１０８を備えた入力／出力（Ｉ／Ｏ）コントローラー１０６を含んでいる。システム１００は、複数の異質なコンピューター装置、複数の出力装置、及び複数の様式を繋ぐアーキテクチャの実施形態である。システム１００は、入力装置１０８から受信した入力に応答して、出力装置１０４に影響を与える。与えられた影響は、１つ又は複数の出力装置に対して同じであってもよいし、影響と特定の出力装置に依っては、異なっていてもよい。以下に更に詳しく説明する様に、何れの出力装置に与えられる影響も、出力装置の性質と影響次第である。
【００２５】
概説すると、状態サーバー１０２は、システム１００の１つ又は複数の状態を維持し、出力装置１０４が同期されることを保証する。状態サーバー１０２は、望ましくは所定のメッセージプロトコルを使ってメッセージを送信することにより、出力装置１０４と通信する。状態サーバー１０２は、システム１００に関して受信した全てのメッセージを反映させ、システム内の全ての適切な装置、具体的には全ての出力装置１０４に戻す。状態サーバー１０２は、入力装置１０８から入力信号を受信し、適切な出力装置１０４にメッセージを送信して、出力装置の状態を以下に更に詳しく論じるやり方で同期させる。入力装置１０８は、どの様な種類のセンサー又はデータ収集装置を含んでいてもよい。出力装置１０４は、卓上ＰＣ、携帯情報端末（ＰＤＡ）、又はラップトップコンピューターの様なパーソナルコンピューター（ＰＣ）、又は他の専用の装置又はプロセッサを含め、どの様な種類の音声又はビデオ又は他の出力装置又はシステムを含んでいてもよい。出力装置１０４は、最も一般的には、対話を生み出すためのあらゆる型式のアクチュエータを含んでおり、又は結果的に環境となる。
【００２６】
図１の実施形態については、表示画像がディスプレイ表面１１０上でシステム１００によって制御される代表的なシステムのコンテキストで論じられる。表示画像は、複数のディスプレイ装置１１２で作られている。代表的なシステムでは、ディスプレイ装置１１２は、表示面１１２を形成するガラス壁１２０のパネル１１８上に表示を投影するために配置された、１つ又は複数の各アプリケーションプロセッサ１１６の制御を受けるビデオプロジェクター１１４である。表示画像を形成するのに、どの様な適した数のプロジェクター１１４とガラスパネル１１８を使ってもよい。図１の例では、２ｘ４列のプロジェクターが一体になって、同様の配列のガラスパネル１１８上に表示画像を形成している。別の実施形態では、異なる数のプロジェクターとガラスパネルが使用されるかもしれない。更に別の実施形態では、フラットパネルディスプレイ、プラズマディスプレイ、又はブラウン管の様な別の型式のビデオディスプレイ装置に置き換えられるかもしれない。ここに記載している原理は、何ら特定の技術によって限定されるものではなく、多種多様な装置に適用される。
【００２７】
図１の代表的な実施形態では、入力装置１０８は、１つ又は複数のカメラ１２２、データグローブ１２４、指示装置１２６、及び赤外線センサー１２８を含んでいる。図示の様に、これらと同様の又は他の型式の他の入力装置を、システム１００に加えてもよい。カメラ１２２は、ビデオ画像を捉える装置である。画像は、ｊｐｅｇ（Joint Photographic Experts Groupにより進化された標準的なデータフォーマットを指す）又はｇｉｆ（Graphics
Interchange Format）などの様なデジタルフォーマットを含むどの様な適したフォーマットの１つの画像であってもよいし、ビデオ画像は、Motion
Picture Experts Groupによって提唱されている様な標準（ＭＰＥＧ又はその変形の１つ）、又は他の標準に従ってコード化されたデータファイルの様な動画画像であってもよい。データグローブ１２４は、バーチャルリアリティ用の入力装置と、装着者の指の動きを測定してそれをデータ処理装置又はコンピューターに送るグローブの形をした他のデータ処理装置である。高度なデータグローブは、手首と肘の動きも測定するが、加えて他の身体部分の動きを測定できる場合がある。データグローブは、更に、中に制御ボタンを備えていてもよく、また、例えばコンピューターの制御を受けて振動する出力装置として作用してもよい。ユーザーは、通常、データグローブのバーチャル画像を見て、オブジェクトを指し、掴み、又はそれを押すことができる。位置指示装置１２６は、コンピューターマウス又はペンタブレットの様な、どの様なデータ入力及び操作装置でもよい。赤外線センサーは、装置からの熱、エネルギー、又は電波放出に応答し、画像を作成するどの様な感知装置でもよい。
【００２８】
Ｉ／Ｏコントローラー１０６は、システム１００と入力装置１０８の間のデータ収集インターフェースとして作用する。Ｉ／Ｏコントローラー１０６は、従って、各入力装置１０８から信号を受信し、あらゆる必要な信号を戻すように作られている。例えば、ｊｐｅｇフォーマットファイルをカメラ１２２から受け取るために、Ｉ／Ｏコントローラー１０６は、カメラ１２２からｊｐｅｇフォーマットのファイルを受け取り、ファイルを記憶し、適切なネットワークのハンドシェーク信号をカメラ１２２に提供する。別の例では、フォーマットは、別のカメラ１２０又はデータグローブ１２４からのストリーム式のデータであるかもしれない。Ｉ／Ｏコントローラー１０６は、必要なハンドシェーク信号を入力装置に提供し、受信したデータを閲覧に備えて記憶するか、又は直ちにデータを状態サーバー１０２に提供する。Ｉ／Ｏコントローラー１０６は、入力装置１０８からデータを、各入力装置によって提供されるフォーマットで受信し、データを、状態サーバー１０２及び出力装置１０４が要求するフォーマットにフォーマットする。
【００２９】
表示画像がディスプレイ表面１１０上でシステム１００によって制御されている代表的な実施形態では、入力装置１０８は、ディスプレイ表面に隣接するユーザーの手又は他の身体部分を検出し、画像の一部分を操作する指示装置として作用する感知装置を含んでいる。例えば、或る実施形態では、入力装置１０８は、ディスプレイ表面１１０に隣接して配置された一式のカメラを含んでおり、ユーザーの手の位置及び動きを検出し、Ｉ／Ｏプロセッサ１０６と協力して、ユーザーの手の位置と動きを示す信号を状態サーバー１０２に提供する。信号は、各アプリケーションプロセッサ１１６に伝えられ、適切な表示又は表示の変化を作り出すのに用いられる。例えば、手の動きが、ディスプレイ表面１１０上の表示の左クリック、右クリック、又は表示の他のマウス操作と解釈されれば、各アプリケーションプロセッサ１１６は、手の動きを処理することによって適切に応答し、適切であれば、各アプリケーションプロセッサによって制御される表示部分に手の動きを反映させる。
【００３０】
先に述べたとおり、この実施形態の出力装置１０４は、システムの出力ディスプレイの各表示部分を表示するために配置された１つ又は複数のディスプレイ装置を含んでいる。これを実現するために、ディスプレイ表面１２０のガラスパネル１１８と、それらに関係付けられたプロジェクター１１４は、それらが一体になって合成画像を形成するように配列されている。各プロジェクターによって作られる各画像は、唯一のものであり、ディスプレイ装置に関係付けられたアプリケーションプロセッサ１１６の制御の下に作られる。
【００３１】
一般に、アプリケーションプロセッサ１１６は、システム１００内で特定の機能を実行するために特定のアプリケーションソフトウェアによってカスタマイズされた汎用データ処理システムである。アプリケーションプロセッサ１１６は、データリンクによって状態サーバー１０２に連結されている。データリンクは、有線又は無線データリンクでも、何らかの適したデータ通信装置でもよい。アプリケーションプロセッサ１１６は、特定の出力動作を作り出すための特定のハードウェア構成要素を含んでいるか、又はそれと関係付けられている。汎用出力装置への１つの代表的な動作は、遠隔位置で電気的に制御されているロックを開くことである。その様なアプリケーションでは、アプリケーションプロセッサ１１６は、サーボモーター又は他の装置と協働してロックを機械的に開く。一般に、ここで、各アプリケーションプロセッサは、アプリケーションプログラムを処理するように構成されており、コンテキスト情報に応答する。各アプリケーションプロセッサは、システム出力の出力部分を提供する際に出力装置１０４を制御するための、関係付けられた各出力装置１０４とデータ通信している。システムの出力は、全ての出力装置１０４の出力部分の集合体である。
【００３２】
図１の特定の代表的な実施形態では、アプリケーションプロセッサ１１６は、システム１００の出力ディスプレイの各表示部分を処理するようにカスタマイズされている。従って、アプリケーションプロセッサは、状態プロセッサ１０２からメッセージの形でデータと命令を受信し、制御信号を１つ又は複数の関係付けられたプロジェクター１１４に提供する。図１は、アプリケーションプロセッサの代表的なソフトウェアアーキテクチャ１３０を示している。ソフトウェアアーキテクチャ１３０は、コア要素１３２とアプリケーション層１３４を含んでいる。コア要素１３２は、アプリケーションプロセッサ１１６用のソフトウェアアプリケーションを準備している全ての開発者が共有するソフトウェアアーキテクチャ１３０の態様である。例には、入力／出力ドライバ、記憶及び検索ルーチン、及び他のオペレーティングシステム構成要素が含まれる。アプリケーション層１３４は、アプリケーションプロセッサ１１６用のソフトウェアの各開発者によって、アプリケーションプロセッサに固有のアプリケーション行動を作り出すようにカスタマイズされた機能、ルーチン、及び他の構成要素を含んでいる。
【００３３】
アプリケーション層１３４は、メッセージハンドラ１３６と、１つ又は複数のオブジェクト１３８を含んでいる。メッセージハンドラ１３６は、状態サーバー１０２と通信している。特に、メッセージハンドラ１３６は、各アプリケーションサーバーによって処理するための、システム１００の変化を画定するメッセージ１４０を、状態サーバー１０２から受信する。更に、メッセージハンドラは、各アプリケーションサーバーで作られるシステムの変化を定義し且つ他のアプリケーションサーバー１１６に反映させなければならないメッセージ１４２を、状態サーバーに送る。例えば、ソース及び宛先アドレスを備えたヘッダーと、システム内の状態の変化を定義するデータを含むペイロードを含め、メッセージは、所定のデータ送信プロトコルに従ってフォーマットされるのが望ましい。しかしながら、適していればどの様なデータ送信フォーマットに置き換えてもよい。
【００３４】
オブジェクト１３８については、アプリケーション層１３４の開発者が事例を挙げて説明する。オブジェクトは、画面上の図形の様な、選択及び操縦可能な個々別々の品目である。オブジェクト指向プログラミングでは、オブジェクトは、データ及びデータを操作するのに必要な手順を含んでいる。アプリケーション層１３４の制御の下にアプリケーションプロセッサ１１６を作動させると、オブジェクトが生成され、作動する。図示の例では、オブジェクト１３８は、アプリケーション層の他の部分及び状態サーバー１０２と通信するため、各自のメッセージハンドラを含んでいる。オブジェクト１３８により通信されるメッセージは、個別のオブジェクトに影響を与えるシステム状態に対する更新を受信してもよいし、状態サーバー１０２によって他のアプリケーションプロセッサ１１６に反映しなければならない、オブジェクトによって検出又は生成された変化に関する情報を含んでいてもよい。
【００３５】
本発明によれば、図１で具現されているアーキテクチャは、アプリケーションプロセッサ１１６の様な複数のプロセッサと、アプリケーション層１３４の様な、プロセッサ１１６で稼動している複数のアプリケーションの間で共有されている状態をサポートする。状態サーバー１０２の作動は、アプリケーションプロセッサ１１６の状態が同期されるのを保証する。つまり、状態サーバー１０２は、全ての状態の変化が、全てのプロセッサ１１６に、できるだけ同時に反映されるのを保証するよう作動する。
【００３６】
本コンテキストにおける同期は、最も一般的には、各アプリケーションプロセッサの状態は、状態が同じ情報を含むほどに一致している、ということを意味している。同じアプリケーションプログラムの各ローカルコピーを実行している各アプリケーションプロセッサでは、アプリケーションの各コピーが同じデータを有している場合は、状態は同じである。各アプリケーションには変動があってもよい。例えば、ここに記載している特定の例では、２つ又はそれ以上のアプリケーションプロセッサは、ディスプレイ上の画像の各部分を生成する。各プロセッサは、画像全体の、ここではそのコンテキストとして言及される、指定された部分を表示するように割り当てられる。しかしながら、各プロセッサは、そのコンテキストだけではなく、画像全体を生成するのに必要なデータを維持する。コンテキストの部分ではないデータは、アプリケーションの処理と、状態サーバーから受信された同期情報に基づいて更新されるので、アプリケーションのローカルコピーは、同期されるか、又は他のコンテキストを有する他のコピーと同じデータを備えている。
【００３７】
本アプリケーションでは、同期は、時刻的な同期そのものではない。全ての同期は、共通のフレームワークに関与している。同期は、アプリケーションプロセッサの１つのローカルな状態、又は複数の状態に関係している。
【００３８】
第１の例では、例えば、サーバーが、時刻センサーと考えられるシステムクロックにアクセスしたので、時刻同期は、サーバーがメッセージを現在の時刻を指定する全てのアプリケーションに送信することを伴っている。このメッセージに応えて、或るアプリケーションプロセッサの或るアプリケーションは、単に動画を更新するかもしれない。又他のアプリケーションは、或るロジックを実行して、新しい時刻をより高いレベルの状態変化（例えば、列車が到着する時刻であることを示す）にマップし、本アーキテクチャを使用して、その新しい状態を別のアプリケーションに反映させるかもしれない。また他のプロセッサの他のアプリケーションには、時刻依存態様を全く有していないものもあり、その場合には、メッセージに応答しない。別のアプリケーションは、報告された状態変化に適切に応答する。
【００３９】
第２の例では、列車は、位置決めセンサーを形成する全地球位置把握システム（ＧＰＳ）受信器と、ここに説明する型式のアプリケーションプロセッサを有している。列車とそのアプリケーションプロセッサは、ＧＰＳ位置データを列車の新しい状態として報告するメッセージを送る。メッセージは、状態サーバーで受信され、幾つかの他の駅構内のアプリケーションに反映される。例えば、駅構内の指令センターでは、メッセージの情報は、列車位置の表示の変化に影響を及ぼす。データ処理装置を備えているコンピューター室では、メッセージは、データベース入力によって操作される。駅の構内では、別のプロセッサの別のアプリケーションが門を開く。
【００４０】
第３の例では、タッチ画面センサーが、タッチの場所を検出し、その場所を状態サーバーに報告する。サーバーは、状態変化に関する情報を、システム内の全てのアプリケーションに送る。１つのアプリケーションは、その状態変化を、より高いレベルの状態へマップし、「ボタンが押される」。別のアプリケーションは、タッチを、他の高いレベルの状態にマップし、「指令センター内に人間の活動がある」。ここでも、各アプリケーションは、同じ状態更新メッセージを受け取り、適切に応答する。
【００４１】
これらの例のそれぞれで、時刻は、概念的には他の全ての状態変化と同じやり方で扱われる。タッチ、動作、及び、カードリーダーに識別カードを通す、又は指紋リーダーを使う様な、システムへの何らかの他のセンサー入力は、状態サーバーに報告され、全て同じやり方で、システム内の各アプリケーションプロセッサに対して適切に扱われる。状態の変化は、必ずしも均一には扱われない。或るアプリケーションは、単に表示を更新するだけであるかもしれない。別のアプリケーションは、ロボットを始動させるかもしれない。
【００４２】
図１に戻るが、最も一般的なアプリケーションでは、状態変化は、様々なセンサー及び／又はプログラムロジックから影響を受け、ユーザー対話には限定されない。状態の変化に関するあらゆる情報が、状態サーバー１０２に送られ、状態サーバーは、情報を、アプリケーションプロセッサ１１６を含むシステム１００内の他のサーバーに反映させ又は再送信する。アプリケーションプロセッサ１１６又はあらゆる他の出力装置１０４は、状態サーバーから更新された状態の情報を受け取り、適切に応答する。応答は、出力装置１０４に記憶されているデータを更新することかもしれない。応答は、表示されている画像又はプログラム状態を変化させることかもしれない。応答は、幾つかの適した動作を提供することかもしれない。最も一般的な場合では、各出力装置の応答は、その作用又は機能の性質、及び更新された状態の情報に合わせて作られる。
【００４３】
図１に示している特定のアプリケーションでは、出力装置１０４がアプリケーションプロセッサ１１６の制御下にあるプロジェクター１１４を含んでおり、状態変化は、入力装置１０８、又はアプリケーションプロセッサ１１６で作動しているプログラムロジックから影響を受ける。Ｉ／Ｏプロセッサ１０６によって検出された入力信号に応えて、状態サーバー１０２は、その状態情報を更新し、その情報を、アプリケーションプロセッサ１１６を含め、システム１００内の他のサーバーに反映し又は再送信する。つまり、各アプリケーションプロセッサ１１６は、アプリケーションプログラムを処理してアプリケーションプロセッサによって生成された各表示部分を形成している画像の変化を作り出すのに応えて、更新メッセージを状態サーバー１０２に急送するように構成されている。状態サーバー１０２は、メッセージを、他のアプリケーションプロセッサ１１６に反映させる。アプリケーションプロセッサ１１６は、状態サーバー１０２から更新された状態情報を受け取り、適切に応答する。図１のこの特定のアプリケーションでは、各アプリケーションプロセッサ１１６の応答は、その関係付けられているディスプレイ画面１１８上に作り出される表示を変えることである。
【００４４】
この特定の実施形態では、ディスプレイ表面１２０に隣接して配置されているカメラ１２０は、ディスプレイパネル１１８によって形成されているディスプレイ装置の１つに隣接して起こるユーザーの活動を検出するために配置されている、入力検出器として作動する。検出されたユーザーの活動に応答して、入力検出器又はカメラは、ユーザー活動信号を生成する。例えば、信号は、ディスプレイパネル１１８の表面でユーザーの手が配置されている場所を、ｘ及びｙ座標で定義するデジタルデータである。Ｉ／Ｏプロセッサ１０６は、カメラ１２０と状態サーバー１０２によって形成されている入力検出器とデータ通信して、ユーザー活動信号に関する情報を伝える。例えば、Ｉ／Ｏプロセッサは、ｘ及びｙ座標データを提供するだけでもよいし、データは、他の情報で強化され、或いはフォーマットされていてもよい。
【００４５】
更に、ここで説明する特定の実施形態では、各アプリケーションプロセッサ１１６は、実質的に同じプログラム又は同一のアプリケーションプログラムを実行する。各アプリケーションプロセッサ１１６は、状態サーバー１０２から受信した状態メッセージに応じて更新されたシステム１００の状態のそれ自身のコピーを維持している。システム状態のローカルコピーに基づいて、各アプリケーションプロセッサ１１６は、個別のディスプレイ装置１１２上の所定の表示部分に、アプリケーションプログラムの出力表示を表示する。アプリケーションの処理は、同期装置として作動する状態サーバー１０２によって同期される。このシステムでは、各アプリケーションプロセッサ１１６は、出力ディスプレイの各表示部分を各ディスプレイ装置１１２上に表示するために、各ディスプレイ装置１１２を制御する。
【００４６】
（ディスプレイパネル付近の手の様な）ユーザー対話が検出されると、各ディスプレイ装置に関係付けられている各アプリケーションプロセッサで、各表示部分の表示が更新される。同期装置である状態サーバーは、ユーザー対話に関する情報を、それぞれ全てのシステムデータを有している各アプリケーションプロセッサに伝える。しかしながら、各アプリケーションプロセッサは、その各表示部分を表示することに責任を負っている。従って、アプリケーションプロセッサは、ユーザー対話がその表示部分に影響を与えた場合にだけ、その表示部分を更新する。例えば、各パネルがそのそれぞれのプロセッサによって制御されている２ｘ４のパネルディスプレイの最も左のパネル付近で、ユーザーが手を動かすと、手の動きによって表されるユーザー対話は、状態サーバーによって全てのプロセッサに報告される。しかしながら、最も左のパネルを制御しているプロセッサだけが、ユーザー対話を反映させるため、そのパネル上に作り出される表示を変化させる。他の全てのプロセッサは同一のデータマッチングを有しているが、他の全ての表示は変わらない。各プロセッサは、それ自身のコンテキストを維持し、コンテキストが変わり、更新を要求している場合にだけ、その表示を更新する。コンテキスト情報は、表示全体のどの表示部分がプロセッサによって作られているかを定義する。同様に、ユーザー対話が、２つ以上の表示パネルに表示の変化を要求している場合（例えば、新しいアプリケーションウインドウがディスプレイ上に開かれるため）は、システムの状態は、変化を、影響を受ける各アプリケーションプロセッサの各コンテキストに反映させる。アプリケーションプロセッサのコンテキスト内の変化のため、プロセッサの表示が更新される。
【００４７】
図２は、図１のシステム内のプロセスの流れを示す流れ図である。特に、図２は、個別の同期されたアプリケーションプロセッサのグループを使って情報が表示及び提示される図１のシステムの特定の実施形態を示している。図１のシステムを実行する別の方法を置き換えることもでき、この実施形態の変形は、容易に推定することができる。
【００４８】
図２では、プロセスは、この例ではＲＷＥｘｅｃｕｔａｂｌｅ．ｃｐｐという名のＣ＋＋コード部分２０２であるコンピューターコードとして実施される。コード部分２０２は、先ず、ブロック２０４で、ＣＲＷＡｐｐｌｉｃａｔｉｏｎと呼ばれるオブジェクトの例を作る。コード部分２０２は、次に、ブロック２０６で、新しく作られたオブジェクトを呼び出す。図２の線で示している様に、制御は、その後、ＣＲＷＡｐｐｌｉｃａｔｉｏｎの実例であるコード部分２１０に移る。コード部分２１０の処理後、ＣＲＷＡｐｐｌｉｃａｔｉｏｎの例は、ブロック２０８で、コード部分２０２によって破棄される。
【００４９】
コード部分２１０は、Ｃ＋＋オブジェクトＣＲＷＡｐｐｌｉｃａｔｉｏｎの実例である。このオブジェクトは、図１のシステムでアプリケーション用のグラフィック環境の設定を取り扱う。このオブジェクトは、以下でより詳しく述べるように、更にアプリケーションで定義される全てのＣＲＷＣｏｎｔｒｏｌｌｅｒを初期化し、そのリストを維持する。マルチプロジェクターシステムを通してアプリケーションを表示しなければならない場合、コンテンツは、ＣＲＷＳｃｒｅｅｎＡｌｉｇｎｍｅｎｔＯｂｊｅｃｔを含んでいる。
【００５０】
コード部分又はアプリケーション２１０は、図２に示している流れ図を実施する。ブロック２１２で、アプリケーション２１０は、マシン特有の設定が入っているあらゆるファイルを読み取る。その様な設定の例には、このマシンが処理を任されているのは、上記又は各表示部分のどのスライスか、を定義することが含まれる。広義には、マシン特有の設定は、どの出力装置がそのマシンによって制御されるか、を定義する。出力装置は、ディスプレイ装置、アクチュエーター、又は何らかの他の適切な装置であることがある。
【００５１】
ブロック２１４で、アプリケーション２１０は、あらゆる必要なグラフィック、ビデオ、ネットワーク又は音声機能用のＤｉｒｅｃｔＸの環境を設定する。ＤｉｒｅｃｔＸは、ネットワーク、グラフィック、入力、音声及びビデオの様な幾つかの低レベルの機能にアクセスするためのライブラリである。図示の実施形態のシステムは、グラフィックライブラリを最も広範に使用するが、ネットワークライブラリは、通信のために用いられる。
【００５２】
ブロック２１６で、アプリケーション２１０は、１つ又は複数のＣＲＷＣｏｎｔｒｏｌｌｅｒオブジェクトを作成し、初期化する。コントローラーオブジェクトは、オブジェクトのリストであり、それらからメッセージを送受信するためのロジックである。ブロック２１８で、アプリケーション２１０は、ＣＲＷＳｃｒｅｅｎＡｌｉｇｎｅｒと呼ばれるオブジェクトを作る。これは、アプリケーションの表示が多数の投影領域に亘って切れ目無く広がるマルチプロジェクターの配列システムを使用できるようにするオブジェクトである。プロジェクターに実際に送られる表示出力を歪ませることによって、このオブジェクトは、プロジェクターの歪みを補正し、投影領域の間の切れ目を最小にする。補正の正確な特性は、このオブジェクトを通してユーザーが完全に構成することができる。ブロック２２０で、アプリケーション２１０は、ネットワーク形成オブジェクトを初期化する。このオブジェクトは、アプリケーションプロセッサが、状態サーバーを含む他の装置とネットワークを介して通信できるようにする。
【００５３】
ブロック２２２で、アプリケーション２１０は、アプリケーションを終結しなければならないことを示す終了メッセージ又は他のデータを確認する。その様なメッセージが受信されていなければ、ブロック２２４で、あらゆる保留メッセージが、アプリケーションプロセッサから状態サーバーへ送信される。ブロック２２６で、Ｒｅｎｄｅｒと呼ばれるオブジェクトが呼び出されて、画像をディスプレイ上に描写する。制御は、終了メッセージが受信されるまで、ブロック２２２、２２４、２２６を含むループ内に留まっている。終了メッセージに応えて、制御は、ブロック２２８へ進み、そこでアプリケーション２１０が終了メッセージを状態サーバーへ送り、状態サーバーとの通信を切断する。ブロック２３０で、アプリケーションは、アプリケーションによって作られたＣＲＷＣｏｎｔｒｏｌｌｅｒオブジェクトの全ての例を破棄することによって掃除する。ブロック２３２で、全てのＤｉｒｅｃｔＸリソースが解放され、アプリケーションが終了する。
【００５４】
図３は、図１のシステムの或るソフトウェアの実施形態用のアーキテクチャ流れ図である。図３は、図２の流れ図で発生する活動から生まれる作用を示している。図２のブロック２１６に応えて、ブロック３０４で、コード部分３０２が呼び出され、Ｃｏｎｔｒｏｌｌｅｒオブジェクトに特有のあらゆるデータ構造体を初期化する。更に、ブロック２１６に応えて、ブロック３０８、３１０で、コード部分３０６が、アプリケーションに必要な全てのオブジェクトを作り初期化するために呼び出される。
【００５５】
ブロック３０８は、ＣＲＷＢａｓｅＣｏｎｔｒｏｌｌｅｒと呼ばれるインターフェース３１２を具体的に説明している。ＣＲＷＢａｓｅＣｏｎｔｒｏｌｌｅｒは、Ｃｏｎｔｒｏｌｌｅｒオブジェクトの基本的特性を定義するインターフェースである。Ｃｏｎｔｒｏｌｌｅｒには、ＣＲＷＢａｓｅＯｂｊｅｃｔから導き出されるオブジェクトのリストと、それらからのメッセージを送受信するためのロジックが入っている。ＣＲＷＢａｓｅＯｂｊｅｃｔは、一片のテキスト（ＣＲＷＳｉｍｐｌｅＴｅｘｔＯｂｊｅｃｔ）、ピクチャ（ＣＲＷＴｅｘｔｕｒｅｄ２ＤＯｂｊｅｃｔ）、又はウェブキャム送給（ＣＲＷＷｅｂｃａｍＯｂｊｅｃｔ）の様な一般的なオブジェクトの特性を定義するインターフェースである。オブジェクトは、Ｃｏｎｔｒｏｌｌｅｒによって作成され、維持される。各オブジェクトは、それら自身のコンテンツをフレーム毎に初期化し、描く能力を有しており、Ｃｏｎｔｒｏｌｌｅｒからのメッセージに応えて、システム内にアプリケーションを書き込むこともできる。開発者は、ＣＲＷＢａｓｅＣｏｎｔｒｏｌｌｅｒインターフェースから引き継いだクラスを書き込み、それを実行しなければならない。開発者は、Ｃｏｎｔｒｏｌｌｅｒをオブジェクトで満たし、オブジェクトのロジックを指定することによって、アプリケーションのコンテンツと行動が何であるかを定義する。具体的には、ＣＲＷＢａｓｅＣｏｎｔｒｏｌｌｅｒインターフェースは、ブロック３１４で、アプリケーションプロセッサが、全体的出力ディスプレイ又はアプリケーションジオメトリのサブ領域又は各表示部分の範囲を学習し、範囲データを設定して、この情報を記憶できるようにしている。これらの範囲は、ここでは、このアプリケーションプロセッサ用のコンテキストとも呼ばれる。更に、ブロック３１６で、ＣＲＷＢａｓｅＣｏｎｔｒｏｌｌｅｒインターフェースは、グラフィックテクスチャを作り、その上にコントローラーのコンテンツを描く。
【００５６】
ブロック３１０は、アプリケーション用の全てのオブジェクトを作り、初期化する。ブロック３１０に応えて、オブジェクト３１８は初期化される。ブロック３２０で、オブジェクトＣＲＷＢａｓｅＯｂｊｅｃｔ３２２が呼び出される。先に述べた様に、ＣＲＷＢａｓｅＯｂｊｅｃｔは、一般的なオブジェクトの機能性（例えば、オブジェクトが「レンダされる」という一般的な概念）を定義する。ピクチャ、ビデオなど（ＣＲＷＶｉｄｅｏＯｂｊｅｃｔと、ここに記載されている他のもの）は、基本のオブジェクトから継承され、それを拡張する（例えば、特定の型式のオブジェクトが、どの様にレンダされるかを定義する）。この様に、ＣＲＷＢａｓｅＯｂｊｅｃｔは、全てのオブジェクトが理解するコマンドの基本セット（初期化、レンダなど）を定義し、各オブジェクト型式は、それらのコマンドにオブジェクトがどの様に応答するかを定義する。これによって、コントローラーは、それらが何であるかを正確に理解することなく、オブジェクトにコマンドを送ることができるようになる。コントローラーは、ＣＲＷＢａｓｅＯｂｊｅｃｔに関して作動するが、特殊化された各オブジェクトは、特殊化された行動で応える。
【００５７】
オブジェクトは、ブロック３２２で作られ、初期化される。しかしながら、ブロック３２４で、このオブジェクトは、コピーが担当しているサブ領域又は各表示部分には決して示されないことをアプリケーション開発者が指示していた場合は、オブジェクトの作成が抑制される。
【００５８】
ブロック３１８に戻るが、ブロック３２０でのＣＲＷＢａｓｅＯｂｊｅｃｔの初期化に続いて、ブロック３２６で、現在のオブジェクトに固有のあらゆるリソースが初期化される。第１の例はＣＲＷＴｅｘｔｕｒｅｄ２ＤＯｂｊｅｃｔで、これは、２つのコーナーポイントによって定義される二次元空間内の長方形である。長方形は、単純な色を有することも、或る画像（テクスチャ）を保持することもできる。利用可能な選択肢には、オブジェクトの色値の設定、回転、サイズ変更、位置の設定、透明性の変更、が含まれる。他の同様の例には、以下のものが含まれる。
【００５９】
ＣＲＷＬｉｎｅＯｂｊｅｃｔ、これは、二次元空間内の線であり、２つの終点で定義される。ＣＲＷＴｅｘｔｕｒｅｄ２ＤＯｂｊｅｃｔに適用される全ての特性と設定に加えて、線の太さと型式を設定することができる。
【００６０】
ＣＲＷＭａｇＬｉｎｅ、これは、二次元空間内の多角形であり、４つの隅角点で定義される。これは、ＣＲＷＴｅｘｔｕｒｅｄ２ＤＯｂｊｅｃｔよりも柔軟性のあるジオメトリを可能にし、多くは、ズームされた領域をズームされていない領域に視覚的に接続するのに用いられる。
【００６１】
ＣＲＷＷｅｂＣａｍＯｂｊｅｃｔ、これは、二次元空間内の長方形であり、２つの隅角点で定義される。このオブジェクトは、サーバー又はウェブキャムから取り出された画像の連続した送給を表示する。
【００６２】
ＣＲＷＶｉｄｅｏＴｅｘｔｕｒｅ、これは、ファイルからビデオを取り出し、それをテクスチャに書き込むこと、及び解凍の様なそのファイルに関連する作業、を扱うオブジェクトである。
【００６３】
ＣＲＷＶｉｄｅｏＯｂｊｅｃｔ、これは、ＣＲＷＴｅｘｔｕｒｅｄ２ＤＯｂｊｅｃｔと同様であるが、静止画像ではなくビデオクリップ（ＣＲＷＶｉｄｅｏＴｅｘｔｕｒｅ参照）を保持する。
【００６４】
ＣＲＷＣｏｍｐｏｕｎｄＯｂｊｅｃｔ、これは、オブジェクトの集合体が入っており、それを管理し、その集合体を２Ｄテクスチャに描き、その後それを画面上に描くことのできるオブジェクトである。この様に組み合わせられると、集合体の中の各オブジェクトは、全て、グローバル座標系から切り離された座標系を共有することができる。組み合わせられたオブジェクトの場所、大きさ、回転、色などを変更すると、全てのサブオブジェクトに比例する変化が起こる。
【００６５】
ＣＲＷＳｉｍｐｌｅＴｅｘｔＯｂｊｅｃｔ、これは、テキストの塊である。設定には、境界を成す長方形の寸法形状、フォントの高さと幅、色と透明度、及び幾つかのフォーマット選択肢（例えば、左右の位置調整）が含まれている。
【００６６】
ＣＲＷＳｐｒｉｔｅＳｃａｔｔｅｒ、これは、地図上の押しピンの様な空間内の点の集合体である。集合体の大きさは、ユーザーが任意の値に設定することができる。集合体内の各点は、一定の大きさを有し、随意的に画像を保持することができる。全ての点が同じ画像を有しており、このコンテキストでは、画像は「スプライト」と呼ばれる。点の位置は、ビットマップ画像から読み取ることができるので、開発者は、それらを視覚的に位置決めすることができる。
【００６７】
ＣＲＷＶｉｄｅｏＳｐｒｉｔｅＳｃａｔｔｅｒ、これは、ＣＲＷＳｐｒｉｔｅＳｃａｔｔｅｒと同様であるが、各点は、静止画像ではなくビデオ画像を保持することができる。
【００６８】
ＣＲＷＳｔｅｎｃｉｌＣｏｎｔｒｏｌｌｅｒ。ステンシルは、オブジェクトが描かれる場所と描かれない場所を定義するのに用いられる。ＣＲＷＳｔｅｎｃｉｌＣｏｎｔｒｏｌｌｅｒは、ステンシルと、そのステンシルの対象となる様々なオブジェクトを定義するオブジェクトである。このオブジェクトは、ステンシルとして用いられるオブジェクトと、描かれるオブジェクトの２つのリストを備えている。
【００６９】
ＣＲＷ３ＤＯｂｊｅｃｔ、これは、ＣＲＷＴｅｘｔｕｒｅｄ２ＤＯｂｊｅｃｔと似ているが、その頂点は三次元空間内に生じ、多くが存在し得る。オブジェクトは、ファイルから頂点リストをどの様にロードするかを知っており、三次元の照明と変換を行う。
【００７０】
ＲＷ３ＤＲｅｎｄｅｒＯｂｊｅｃｔ、これは、場面内の三次元オブジェクトの集合体が入っていて、これを管理し、その場面を二次元のテクスチャに描き、次にそれを画面上に描くことのできるオブジェクトである。
【００７１】
ＲＷ３ＤＢｉｌｌＢｏａｒｄＯｂｊｅｃｔ、これは、二次元のオブジェクトを三次元の世界に作り、それが常に観察者に対面するように、その方位をダイナミックに更新するオブジェクトである。
【００７２】
ＣＲＷＳｏｕｎｄＰｌａｙｅｒ、これは、ディスク上の音声ファイルに結び付けられたオブジェクトである。方法は、再生、一時停止、停止などを含んでいる。
【００７３】
ＣＲＷＤａｔａＢｕｎｄｌｅ、これは、データを行と列のフォーマットに保持するためのオブジェクトである。データは、ユーザーによって機能的に挿入されるか、又は正しくフォーマットされたテキストファイルからロードすることができる。データのコンテンツを、フォーマットされたテキストファイルに書き込むこともできる。ＣＲＷＤａｔａＢｕｎｄｌｅは、（ＣＲＷＰｉｅＣｈａｒｔの様な）ＣＲＷＣｈａｒｔインターフェースの実装者による表示用の一式のデータを提供するのに用いられる。
【００７４】
ＣＲＷＣｈａｒｔ、これは、全てのチャートオブジェクトが、データの根拠を含め、共通して有している特性と方法を定義する抽象型クラス（又はインターフェース）である。
【００７５】
ＣＲＷＰｉｅＣｈａｒｔ、これは、ＣＲＷＣｈａｒｔインターフェースを実施するパイチャートオブジェクトである。データのコンテンツは、ＣＲＷＤａｔａＢｕｎｄｌｅによって定義される。
【００７６】
ＣＲＷＬｉｎｅＣｈａｒｔ、これは、ＣＲＷＣｈａｒｔインターフェースを実施するラインチャートオブジェクトである。データのコンテンツは、ＣＲＷＤａｔａＢｕｎｄｌｅによって定義される。
【００７７】
ＣＲＷＢａｒＣｈａｒｔ、これは、ＣＲＷＣｈａｒｔインターフェースを実施するバーチャートオブジェクトである。データのコンテンツは、ＣＲＷＤａｔａＢｕｎｄｌｅによって定義される。
【００７８】
ＣＲＷＳｃａｔｔｅｒＰｌｏｔＣｈａｒｔ、これは、ＣＲＷＣｈａｒｔインターフェースを実施する分散プロットチャートオブジェクトである。データのコンテンツは、ＣＲＷＤａｔａＢｕｎｄｌｅによって定義される。
【００７９】
ＣＲＷＴｏｇｇｌｅ、これは、タッチ画面メッセージ送信システムのコンテキストに配置されると、ボタンとして作用するオブジェクトである。このオブジェクトは、その境界線に対応する座標範囲内のタッチメッセージを聴き取り、始動されると、或る事前設定メッセージを提起し、それはサーバーに送られ、ネットワーク上の全マシンに再送信され、全員を状態変化に変更する。オブジェクトは、それ自身の状態を知っており、更に、どのくらいの頻度で始動できるかを制御する。
【００８０】
ＣＲＷＷｈｉｔｅｂｏａｒｄＯｂｊｅｃｔ、これは、二次元面上に配置された線又は点の集合体を保持するオブジェクトである。これらの線又は点は、ホワイトボード上の「マーク」を表す。マークは、オブジェクトのユーザーが、ホワイトボードに加え、又はホワイトボードから取り除くことができる。
【００８１】
ＣＲＷＶａｌｕｅＩｎｔｅｒｐｏｌａｔｏｒＯｂｊｅｃｔ、これは、ストップウォッチの様に作用するオブジェクトである。開始時間、持続時間、開始及び停止値によって初期化される。持続時間に亘って、開始値を取り、それを停止値に変える（即ち、値を「挿入する」）。オブジェクトとコントローラーは、このオブジェクトを使用して、それらが円滑に動画化するのを支援する。
【００８２】
ＣＲＷＢｅｚｉｅｒＩｎｔｅｒｐｏｌａｔｏｒＯｂｊｅｃｔ、これは、ＣＲＷＶａｌｕｅＩｎｔｅｒｐｏｌａｔｏｒＯｂｊｅｃｔと同様であるが、挿入するのに特殊なＢｅｚｉｅｒ機能を使用する。
【００８３】
図２では、ブロック２２６で、ルーチンレンダ（）は、全てのＣＲＷＣｏｎｔｒｏｌｌｅｒｓに呼び出された。この場合、制御は、図３のブロック３３０で、開発者のコードに進む。そこで、アプリケーションのコントローラーは、ブロック３３２で、フレームを正しく描くのに必要なコントローラーデータを更新し、ブロック３３４で、フレームをレンダするために、ＣＲＷＢａｓｅＣｏｎｔｒｏｌｌｅｒオブジェクトのインスタンスを作成する。ＣＲＷＢａｓｅＣｏｎｔｒｏｌｌｅｒのインスタンス化３３６は、コントローラー内の全オブジェクトで繰り返され、ブロック３３８で、各オブジェクトにＲｅｎｄｅｒ（）方法を呼び出す。これにより、全てのオブジェクトが描かれる。
【００８４】
図２では、ブロック２２４で、メッセージが、状態サーバーとコントローラーの間で送信された。このケースでは、制御は、開発者のコード３４０へ進む。コード３４０は、ＤｉｓｔｒｉｂｕｔｅＣｏｍｍａｎｄＭｅｓｓａｇｅ又はＤｉｓｔｒｉｂｕｔｅＫｅｙＭｅｓｓａｇｅを処理する。ブロック３４２で、メッセージ型のＣＲＷＢａｓｅＣｏｎｔｒｏｌｌｅｒ３４４が呼び出される。このオブジェクトは、コントローラー内の全てのオブジェクトを通して繰り返し、ブロック３４６で、各オブジェクトへのメッセージを取り扱うため、適切なオブジェクト３４８を呼び出す。この様に、ブロック３５０のオブジェクト３４８は、ブロック３５２で、対応するＣＲＷＢａｓｅＯｂｊｅｃｔ方法を呼び出し、ブロック３５４で、或る高レベルのオブジェクトに関係付けられた特殊な応答を処理する。
【００８５】
開発者のコード３４０がブロック３４２を処理した後に、ブロック３６０で、全てのメッセージは、システムの行動の詳細を作るために処理される。
【００８６】
以上のことから、ここに開示している実施形態は、分散型情報処理及び対話型のためのシステム及び方法を提供していることが分かる。或る一般的な実施形態では、アプリケーションプロセッサは、１つ又は複数のソフトウェアアプリケーションに応答し、出力を生成し、各出力は、一体となってシステム出力を形成する。アプリケーションプロセッサの状態の各変化は、状態変化メッセージで状態サーバーに報告され、状態サーバーは、そのメッセージを、システム内の他の全てのアプリケーションプロセッサに反映する。また、どの様なシステム入力でも状態サーバーに報告され、状態サーバーは、ここでも状態の変化を全てのアプリケーションプロセッサに反映する。この様にして、アプリケーションプロセッサは同期状態に維持される。或るプロセッサの、他のプロセッサの出力に反映しなければならない出力の変化は、自動的且つ切れ目無く、その様に反映される。
【００８７】
或る特定の実施形態では、各アプリケーションプロセッサは、配列型出力表示の１つの画像タイルを作る１つのディスプレイ装置を駆動する。各プロセッサは、表示の指定された部分だけを表示するように任されていても、状態サーバーからの状態変化メッセージを使用して、表示全体に関する状態情報を更新する。表示を割り当てられ指定された部分は、プロセッサのコンテキストである。入力装置は、ユーザーのディスプレイとの対話を、マウスの動き及びマウスのクリックと同様に検出するが、或る実施形態では、ディスプレイの前の手の動きを検出する。検出されたユーザー対話は、状態サーバーに報告され、ユーザー対話に関する情報は、状態サーバーから、画像を作るアプリケーションプロセッサに反映される。画像は、状態サーバーからの情報に基づいて更新される。
【００８８】
従って、以上の詳細な説明は、説明を目的としており、本発明に限定を加えるものではなく、本発明の精神と範囲を定義すると意図されるものは、特許請求の範囲の内容、並びのその全ての等価物であるものと理解頂きたい。
【図面の簡単な説明】
【００８９】
【図１】分散型情報提示及び対話のためのシステムのアーキテクチャを示すブロック図である。
【図２】図１のシステム内の処理の流れを示す流れ図である。
【図３】図１のシステムの或るソフトウェアの実施形態用のアーキテクチャ流れ図である。
【図１】
2008519340.tif 000003
【図２】
2008519340.tif 000004
【図３】
2008519340.tif 000005
【国際調査報告】
2008519340.tif 000006
2008519340.tif 000007
2008519340.tif 000008