(57)【特許請求の範囲】
【請求項１】
レンダリングサーバにより実行される第１のアプリケーションによりレンダリングされる１または複数のオブジェクトを、プロセッサにより、第１のウィンドウに表示する段階と、
前記プロセッサにより、第１のユーザ入力を受信する段階と、
前記第１のユーザ入力に応答して、前記第１のアプリケーションによって前記第１のウィンドウにレンダリングされた前記１または複数のオブジェクトの少なくとも１つを、前記プロセッサにより選択する段階であって、前記少なくとも１つのオブジェクトを選択する段階が前記第１のアプリケーションから複数の描画コマンドを傍受する段階を有する、選択する段階と、
受信された複数のユーザ入力を監視するエンジンを介して、前記第１のアプリケーションから、前記選択された少なくとも１つのオブジェクトを、前記プロセッサにより抽出する段階であって、前記選択された少なくとも１つのオブジェクトを抽出する段階が前記傍受された複数の描画コマンドを前記エンジンへ迂回させる段階を有する、抽出する段階と、
前記第１のウィンドウから、第２のウィンドウにレンダリングされた第２のアプリケーションへと前記選択された少なくとも１つオブジェクトをドラッグするための第２のユーザ入力を、前記プロセッサにより、受信する段階と、
前記第２のユーザ入力に応答して、前記プロセッサにより、ディスプレイ上で前記第１のウィンドウから前記第２のウィンドウへ、前記選択された少なくとも１つのオブジェクトを移動する段階と、
前記選択された少なくとも１つのオブジェクトが前記第２のウィンドウのフォーカスボーダを横切ることに応答して、前記プロセッサにより、前記選択された少なくとも１つのオブジェクトを前記第２のアプリケーションへとインポートする段階と、
インポートすると、前記第１のアプリケーションから前記複数の描画コマンドを傍受する段階および迂回する段階を、前記プロセッサにより、中止する段階と、
を備える方法。
【請求項２】
前記少なくとも１つのオブジェクトを選択する段階は、
前記プロセッサにより、前記第１のアプリケーションの出力にアクセスする段階と、
前記プロセッサにより、前記第１のユーザ入力を前記エンジンへと迂回させる段階と、
前記プロセッサにより、前記複数の描画コマンドから前記１または複数のオブジェクトを判断する段階と、
選択アルゴリズムに従って、前記プロセッサにより、前記少なくとも１つのオブジェクトを選択する段階と、を有する、請求項１に記載の方法。
【請求項３】
前記プロセッサにより、前記１または複数のオブジェクトを判断する段階は、
前記プロセッサにより、前記第１のユーザ入力の座標におけるシーンの近位面に、カメラを割り当てる段階と、
前記プロセッサにより、前記カメラから遠位面にレイキャスティングする段階と、
を有する、請求項２に記載の方法。
【請求項４】
前記プロセッサにより、前記１または複数のオブジェクトを判断する段階は、
前記プロセッサにより、前記レイが当てられた第１のオブジェクトを選択する段階を有する、請求項３に記載の方法。
【請求項５】
前記プロセッサにより、前記１または複数のオブジェクトを判断する段階は、
前記レイが当てられた第１のオブジェクトに接触する前記１または複数のオブジェクトの全てを選択する段階を有する、請求項３に記載の方法。
【請求項６】
前記プロセッサにより、前記１または複数のオブジェクトを判断する段階は、
前記レイが当てられた第１のオブジェクトと同じテクスチャを有する前記１または複数のオブジェクトの全てを選択する段階を有する、請求項３に記載の方法。
【請求項７】
前記プロセッサにより、前記１または複数のオブジェクトを判断する段階は、
前記レイが当てられた第１のオブジェクトと同じ動きベクトルを有する前記１または複数のオブジェクトの全てを選択する段階を有する、請求項３に記載の方法。
【請求項８】
前記プロセッサにより、前記選択された少なくとも１つのオブジェクトを拡張するまたはフィルタするユーザ入力を更に受信する段階を更に備える、請求項１から７のいずれか１項に記載の方法。
【請求項９】
前記選択された少なくとも１つのオブジェクトを拡張するまたはフィルタすることは、
前記選択された少なくとも１つのオブジェクトに紐付けされたシーンにおけるその他の少なくも１つのオブジェクトを、前記プロセッサにより、選択するまたは選択解除することを含む、請求項８に記載の方法。
【請求項１０】
前記少なくとも１つのオブジェクトを移動する段階は、
前記プロセッサにより、境界を有さないウィンドウをレンダリングする段階と、
前記プロセッサにより、前記境界を有さないウィンドウに前記選択された少なくとも１つのオブジェクトをレンダリングする段階と、
前記境界を有さないウィンドウをドラッグするための前記第２のユーザ入力を受信することに応答して、前記プロセッサにより、前記第２のユーザ入力に従って、前記境界を有さないウィンドウを、前記ディスプレイを横切って前記第１のウィンドウから前記第２のウィンドウへ移動する、請求項１に記載の方法。
【請求項１１】
前記プロセッサにより、前記選択された少なくとも１つのオブジェクトを前記境界を有さないウィンドウにレンダリングする段階は、
前記プロセッサにより、前記第１のアプリケーションからの前記選択された少なくとも１つのオブジェクトと関連付けられた複数の描画コマンドをコピーする段階と、
前記プロセッサにより、前記第１のアプリケーションからの前記複数の描画コマンドを、前記エンジンに対応するレンダリングＡＰＩのパイプラインに挿入する段階と、
前記プロセッサにより、前記レンダリングＡＰＩを介して、前記複数の描画コマンドをレンダリングする段階と、を含む、請求項１０に記載の方法。
【請求項１２】
前記選択された少なくとも１つのオブジェクトを、前記境界を有さないウィンドウにレンダリングする段階は、
前記プロセッサにより、照明および環境的効果を含む第１条件を、前記第１のアプリケーションから取得する段階と、
前記プロセッサにより、照明および環境的効果を含む第２条件を、前記第２のアプリケーションから取得する段階と、
前記プロセッサにより、前記第１のウィンドウおよび前記第２のウィンドウからの前記境界を有さないウィンドウの距離に応じて、前記第１条件および前記第２条件を段階的に適用する段階と、を含む、請求項１１に記載の方法。
【請求項１３】
グラフィックス処理ユニットと、
プロセッサと、
前記プロセッサにより実行されるプログラムロジックを、有形に格納するための記憶媒体と、を備えるシステムであって、
前記プログラムロジックは、
第１レンダリングサーバにより実行される第１のアプリケーションによりレンダリングされる１または複数のオブジェクトを、第１のウィンドウに表示するロジックと、
前記プロセッサにより実行され、第１のユーザ入力を受信する、第１のユーザ入力受信ロジックと、
前記プロセッサにより実行され、前記第１のアプリケーションによって前記第１のウィンドウにレンダリングされた前記１または複数のオブジェクトの少なくとも１つを選択し、前記第１のアプリケーションから複数の描画コマンドを傍受する選択ロジックと、
前記プロセッサにより実行され、受信した複数のユーザ入力を監視するエンジンを介して、前記第１のアプリケーションから、前記選択された少なくとも１つのオブジェクトを抽出し、前記傍受された複数の描画コマンドを前記エンジンへ迂回させる抽出ロジックと、
前記プロセッサにより実行され、前記第１のウィンドウから、第２のウィンドウにレンダリングされた第２のアプリケーションへと前記選択された少なくとも１つのオブジェクトをドラッグするための第２のユーザ入力を受信する第２のユーザ入力受信ロジックと、
前記プロセッサにより実行され、前記第２のユーザ入力を受信することに応答して、ディスプレイ上で前記第１のウィンドウから前記第２のウィンドウへ、前記選択された少なくとも１つのオブジェクトを移動する移動ロジックと、
前記プロセッサにより実行され、前記選択された少なくとも１つのオブジェクトが、前記第２のウィンドウのフォーカスボーダを横切ることに応答して、前記選択された少なくとも１つのオブジェクトを前記第２のアプリケーションへとインポートするインポートロジックと、
インポートすると、前記プロセッサにより実行され、前記第１のアプリケーションから前記複数の描画コマンドを傍受および迂回することを中止する中止ロジックと、
を有する、システム。
【請求項１４】
前記第２のアプリケーションは、前記第１レンダリングサーバとは異なる別の第２レンダリングサーバにより実行される、請求項１３に記載のシステム。
【請求項１５】
前記プロセッサにより実行され、前記少なくとも１つのオブジェクトを選択する前記選択ロジックは、
前記プロセッサにより実行され、前記第１のアプリケーションの出力にアクセスするためのロジックと、
前記プロセッサにより実行され、前記第１のアプリケーションからの前記第１のユーザ入力を前記エンジンへと迂回させる迂回ロジックと、
前記プロセッサにより実行され、前記第１のユーザ入力と関連付けられた前記複数の描画コマンドから、前記１または複数のオブジェクトを判断する判断ロジックと、
前記プロセッサにより実行され、選択アルゴリズムに従って、前記少なくとも１つのオブジェクトを選択する選択ロジックと、を含む、請求項１３または１４に記載のシステム。
【請求項１６】
前記プロセッサによって実行され、前記オブジェクトを判断する前記判断ロジックは、
前記プロセッサによって実行され、前記第１のユーザ入力の座標におけるシーンの近位面にカメラを割り当てる割り当てロジックと、
前記プロセッサによって実行され、前記カメラから遠位面にレイキャスティングし、前記レイが当てられた第１のオブジェクトを選択するためのレイキャスティングロジックと、を含む、請求項１５に記載のシステム。
【請求項１７】
前記移動ロジックは、
前記プロセッサによって実行され、境界を有さないウィンドウをレンダリングするウィンドウレンダリングロジックと、
前記プロセッサによって実行され、前記境界を有さないウィンドウに前記選択された少なくとも１つのオブジェクトをレンダリングする選択レンダリングロジックと、
前記プロセッサによって実行され、前記第２のユーザ入力に従って、前記境界を有さないウィンドウを、前記ディスプレイを横切って前記第１のウィンドウから前記第２のウィンドウへ移動するロジックと、
を含む、請求項１３から１６のいずれか１項に記載のシステム。
【請求項１８】
前記選択レンダリングロジックは更に、
前記プロセッサによって実行され、照明および環境的効果を含む第１条件を、前記第１のアプリケーションから取得する第１条件取得ロジックと、
前記プロセッサによって実行され、照明および環境的効果を含む第２条件を、前記第２のアプリケーションから取得する第２条件取得ロジックと、
前記プロセッサによって実行され、前記第１のウィンドウおよび前記第２のウィンドウからの前記境界を有さないウィンドウの距離に応じて、前記第１条件および前記第２条件を段階的に適用する条件適用ロジックと、を含む、請求項１７に記載のシステム。
【請求項１９】
コンピュータに複数のオペレーションを実行させるためのコンピュータプログラムであって、
第１レンダリングサーバにより実行される第１のアプリケーションによりレンダリングされる１または複数のオブジェクトを第１のウィンドウに表示する手順と、
第１のユーザ入力を受信する手順と、
前記第１のユーザ入力に応答して、前記第１のアプリケーションによって前記第１のウィンドウにレンダリングされた前記１または複数のオブジェクトのうちの少なくとも１つを選択する手順であって、前記少なくとも１つのオブジェクトを選択する手順が前記第１のアプリケーションから複数の描画コマンドを傍受する手順を有する、選択する手順と、
受信される複数のユーザ入力を監視するエンジンを介して、前記第１のアプリケーションから前記選択された少なくとも１つのオブジェクトを抽出する手順であって、前記選択された少なくとも１つのオブジェクトを抽出する手順が前記傍受された複数の描画コマンドを前記エンジンへ迂回させる手順を有する、抽出する手順と、
前記第１のウィンドウから、第２のウィンドウにレンダリングされた第２のアプリケーションへと前記選択された少なくとも１つのオブジェクトをドラッグするための第２のユーザ入力を受信する手順と、
前記第２のユーザ入力に応答して、ディスプレイ上で前記第１のウィンドウから前記第２のウィンドウへ、前記選択された少なくとも１つのオブジェクトを移動する手順と、
前記選択された少なくとも１つのオブジェクトが、前記第２のウィンドウのフォーカスボーダを横切ることに応答して、前記コンピュータに含まれるプロセッサにより、前記選択された少なくとも１つのオブジェクトを前記第２のアプリケーションへとインポートする手順と、
インポートすると、前記第１のアプリケーションから前記複数の描画コマンドを傍受する手順および迂回する手順を中止する手順と、
を実行させるコンピュータプログラム。
【請求項２０】
前記エンジンが、前記第１のアプリケーションと、前記第１レンダリングサーバのレンダリングＡＰＩ（アプリケーションプログラミングインターフェース）との間のパスを監視することの許可を、前記プロセッサにより、前記第１レンダリングサーバから受信する手順を更に実行させる、請求項１９に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、概して、リアルタイムで、第１のアプリケーションからの３次元グラフィックオブジェクトを、第２のアプリケーションへとインポートおよびエクスポートすることに関し、より詳細には、第１のアプリケーションおよび第２のアプリケーションをレンダリングするウィンドウの間の、エクスポート／インポートプロセスをユーザのディスプレイに画像表示することに関する。
【０００２】
[関連出願］
本願は、２０１１年８月１２日出願の米国仮出願６１／５２３，１４２号"DRAG AND DROP OF OBJECTS BETWEEN APPLICATIONS（アプリケーション間でのオブジェクトのドラッグおよびドロップ）"の非仮出願であり、および、２０１２年８月９日出願の米国出願第１３／５７１，１８２号"DRAG AND DROP OF OBJECTS BETWEEN APPLICATIONS（アプリケーション間でのオブジェクトのドラッグおよびドロップ）"の内容および上記出願の内容は、参照により本明細書に組み込まれる。
【背景技術】
【０００３】
一般的なグラフィクスプログラムでは、２Ｄまたは３Ｄオブジェクトを、描画コマンドに変換して、OpenGLまたはDirect3DのようなグラフィックスＡＰＩに供給することにより、２Ｄまたは３Ｄオブジェクトをレンダリングする。アプリケーションユーザのディスプレイに２Ｄ画像として出力される前に、描画コマンドには、ＡＰＩレンダリングパイプライン内において、隠れた面の除去、Ｚバッファリング、ラスタ化およびクリッピング等の様々な処理が行われる。通常、グラフィクスプログラムから特定の３Ｄオブジェクトをエクスポートすることは、ＯＢＪファイルまたはその他の可読３Ｄ形式で読み出すべく、プログラムデータの逆コンパイルを必要とする、難しいプロセスである。同様に、ファイルを３Ｄグラフィックスプログラムへとインポートすることも、３Ｄオブジェクトをグラフィクスプログラムが必要とする形式にコンパイルし、多くの場合、オブジェクトを正しくインポートするために、３Ｄオブジェクトライブラリ全体の再パッケージ化を必要とする。
【発明の概要】
【０００４】
本開示は、概して、リアルタイムで第２の３Ｄプログラムにレンダリングするために、第１の３Ｄプログラムからオブジェクトをエクスポートすることに関する。一実施形態では、コンピュータシステムは、複数のアプリケーションインスタンスをホストし、各アプリケーションインスタンスは、ローカルクライアントアプリケーションに対応する。コンピュータシステムは、コンピュータシステムのグラフィックス処理ユニットのリソースを利用して、並行してレンダリングを行い、アプリケーションインスタンスのグラフィックス出力は、コンピュータシステムディスプレイの別個のウィンドウにおけるローカルクライアントアプリケーションのうちの少なくとも２つに対応する。第１のアプリケーションから３Ｄオブジェクトをエクスポートしようとするユーザは、第１のウィンドウからオブジェクトを選択して、そのオブジェクトを第２のウィンドウにドラッグする。ユーザがオブジェクトをドラッグすると、ユーザのドラッグコマンドに従って、オブジェクトがコンピュータディスプレイにレンダリングされる。次いでユーザが、第２のウィンドウにレンダリングされた第２のアプリケーションにオブジェクトをドロップすると、オブジェクトがリアルタイムで、第２のアプリケーションにインポートされる。
【０００５】
一実施形態では、第１のコンピュータシステムは、ローカルに第１のアプリケーションをホストし、第２のアプリケーションは、アプリケーションサーバにホストされる。コンピュータシステムは、自身のローカルハードウェアおよびレンダリングＡＰＩを介して、ローカルアプリケーションおよびリモートアプリケーションの両方を、コンピュータシステムディスプレイ上の２つの別個のウィンドウにレンダリングする。第１のアプリケーションから３Ｄオブジェクトをエクスポートしようとするユーザは、第１のウィンドウからオブジェクトを選択して、そのオブジェクトを第２のウィンドウにドラッグする。ユーザがオブジェクトをドラッグすると、ユーザのドラッグコマンドに従って、オブジェクトがコンピュータディスプレイにレンダリングされる。次いでユーザが、第２のウィンドウにレンダリングされた第２のアプリケーションにオブジェクトをドロップすると、オブジェクトがリアルタイムで、第２のアプリケーションにインポートされる。
【０００６】
一実施形態では、第１のコンピュータシステムは、ローカルに第１のアプリケーションをホストし、第２のアプリケーションは、サーバ側レンダリングを伴うアプリケーションサーバにホストされる。コンピュータシステムは、自身のグラフィックスプロセッサおよびグラフィックスＡＰＩを使用して、ローカルアプリケーションをレンダリングし、リモートアプリケーションは、サーバ側のグラフィックスＡＰＩによってレンダリングされる。第１のアプリケーションから３Ｄオブジェクトをエクスポートしようとするユーザは、第１のウィンドウからオブジェクトを選択して、そのオブジェクトを第２のウィンドウにドラッグする。ユーザがオブジェクトをドラッグすると、ユーザのドラッグコマンドに従って、オブジェクトがコンピュータディスプレイにレンダリングされる。次いでユーザが、第２のウィンドウにレンダリングされた第２のアプリケーションにオブジェクトをドロップすると、オブジェクトがリアルタイムで、第２のアプリケーションにインポートされる。
【０００７】
一実施形態では、オブジェクトを第２のアプリケーションにインポートする方法が開示される。方法は、プロセッサにより第１のユーザ入力を受信する段階、プロセッサにより、第１のユーザ入力に応答して、第１のアプリケーションおよびレンダリングＡＰＩによってディスプレイの第１のウィンドウにレンダリングされたオブジェクトを選択する段階を備える。方法は更に、エンジンを介して第１のアプリケーションからオブジェクトを抽出する段階と、プロセッサにより第２のユーザ入力を受信する段階とを備える。方法は更に、プロセッサにより、第２のユーザ入力に応答して、ディスプレイ上のオブジェクトを、第１のウィンドウから第２のウィンドウにレンダリングされた第２のアプリケーションへとドラッグする段階、および、プロセッサにより、ドラッグする間に、第１のウィンドウと第２のウィンドウとの間の中間の空間に、オブジェクトを表示する段階とを備える。オブジェクトが、第２のウィンドウのフォーカスボーダを横切ることに応答して、方法は、オブジェクトを第２のアプリケーションへとインポートする段階を備える。
【０００８】
一実施形態において、上記方法に従ってオブジェクトを選択する段階は、プロセッサにより、第１のユーザ入力をエンジンへと迂回さる段階と、プロセッサにより、第１のアプリケーションからレンダリングＡＰＩへの描画コマンドを傍受する段階と、プロセッサにより、第１のアプリケーションの描画コマンドからオブジェクトを判断する段階とを有する。方法は更に、選択アルゴリズムに従って、プロセッサにより、オブジェクトおよびその他のオブジェクトを選択する段階を備える。一実施形態では、選択アルゴリズムは、レイが投じられた第１のオブジェクトに接続された全てのオブジェクトを選択する。一実施形態では、選択アルゴリズムは、レイが投じられた第１のオブジェクトと同じオブジェクト識別子を有する全てのオブジェクトを選択する。一実施形態では、選択アルゴリズムは、レイが投じられた第１のオブジェクトと同じ動きベクトルを有する全てのオブジェクトを選択する。一実施形態では、選択アルゴリズムは、レイが投じられた第１のオブジェクトと同じテクスチャを有する全てのオブジェクトを選択する。
【０００９】
一実施形態では、オブジェクトを選択する第１のユーザ入力は、ポインティングデバイスからのカーソル選択である。一実施形態において、オブジェクトを選択する第１のユーザ入力は、オブジェクトの周りの境界をユーザがトレースすることを含む。一実施形態において、オブジェクトを選択する第１のユーザ入力は、特性の所定のセットの隣接する全てのピクセルを選択する選択ツールを含む。一実施形態において、オブジェクトを選択する第１のユーザ入力は、タッチインターフェースをタップすることである。一実施形態において、オブジェクトを選択する第１のユーザ入力は、タッチインターフェース上でのジェスチャである。
【００１０】
一実施形態において、方法の、プロセッサによりオブジェクトを描画コマンドから判断する段階は更に、プロセッサにより、第１のユーザ入力の座標におけるシーンの近位面に、カメラを割り当てる段階と、プロセッサにより、カメラから遠位面をレイキャスティングする段階と、レイが当てられた第１のオブジェクトを選択する段階と、を有する。方法は、選択オブジェクトを拡張するまたはフィルタする更なるユーザ入力をプロセッサにより受信する段階を更に備え、選択オブジェクトを拡張するまたはフィルタすることは、選択された１以上のオブジェクトに紐付けされたシーンにおけるその他のオブジェクトを、プロセッサにより、選択するまたは選択解除することを含む。
【００１１】
一実施形態において、選択オブジェクトを拡張するまたはフィルタすることは、シーンにおいて、選択された１以上のオブジェクトと同じオブジェクト識別子を有するその他のオブジェクトを、プロセッサにより、選択または選択解除することを含む。一実施形態において、選択オブジェクトを拡張するまたはフィルタすることは、シーンにおいて、選択された１以上のオブジェクトと同じ動きベクトルを有するその他のオブジェクトを、プロセッサにより、選択または選択解除することを含む。一実施形態において、選択オブジェクトを拡張するまたはフィルタすることは、シーンにおいて、選択された１以上のオブジェクトと同じ動きテクスチャを有するその他のオブジェクトを、プロセッサにより、選択または選択解除することを含む。一実施形態において、選択オブジェクトを拡張するまたはフィルタすることは、シーンにおける、更なるユーザ入力によって指定されるその他のオブジェクトを、プロセッサにより、選択または選択解除することを含む。一実施形態において、オブジェクトを指定するプロセスは、プロセッサにより、ユーザ入力を受信する段階と、記プロセッサにより、ユーザ入力の座標におけるシーンの近位面に、カメラを割り当てる段階と、プロセッサにより、カメラから遠位面にレイキャスティンし、レイが投じられた第１のオブジェクトを指定する段階とを含む。
【００１２】
一実施形態において、プロセッサにより、ディスプレイにおいてオブジェクトをドラッグする段階は、プロセッサにより、境界を有さないウィンドウ、および、ユーザによって選択された１以上のオブジェクトを含む選択オブジェクトを、境界を有さないウィンドウにレンダリングする段階を有する。一実施形態において、方法は、第１のウィンドウから第２のウィンドウへと境界を有さないウィンドウをドラッグするユーザ入力を受信することに応答して、プロセッサにより、ユーザ入力に従ってディスプレイ上で境界を有さないウィンドウを移動する段階を有する。
【００１３】
一実施形態において、方法の、プロセッサにより、選択オブジェクトを、境界を有さないウィンドウにレンダリングする段階は、プロセッサにより、第１のアプリケーションからの選択オブジェクトと関連付けられた描画コマンドをコピーする段階と、プロセッサにより、第１のアプリケーションからの描画コマンドを、レンダリングＡＰＩパイプラインに挿入する段階と、プロセッサにより、レンダリングＡＰＩを介して、描画コマンドをレンダリングする段階と、を含む。
【００１４】
一実施形態において、方法の、選択オブジェクトを第２のアプリケーションへとインポートする段階は、プロセッサにより、第２のアプリケーションへと実装するために選択オブジェクトを変換する段階と、プロセッサにより、変換する段階の間に、第２のウィンドウにエンジンを介して選択オブジェクトをレンダリングする段階とを有する。一実施形態において、選択オブジェクトを変換する段階は、プロセッサにより、描画コマンドを、第２のアプリケーションが使用するファイル形式へと修正する段階を含む。一実施形態において、ファイル形式は、ＯＢＪファイルである。
【００１５】
方法は、変換する段階が完了すると、プロセッサにより、選択オブジェクトを第２のアプリケーションにインポートする段階を備える。方法は更に、オブジェクトが、第２のアプリケーションへとインポートされると、プロセッサにより、エンジンによるレンダリングプロセスを停止し、プロセッサにより、第２のアプリケーションでのオブジェクトをレンダリングする段階を備える。
【００１６】
一実施形態において、方法の、エンジンを介して選択オブジェクトをレンダリングする段階は、プロセッサにより、描画コマンドをレンダリングＡＰＩパイプラインに挿入する段階を含み、レンダリングＡＰＩパイプラインは、レンダリングＡＰＩに、選択オブジェクトを第２のウィンドウにレンダリングするよう命令する。一実施形態において、第２のアプリケーションは、自身のレンダリングＡＰＩを有し、第２のアプリケーション内からの選択オブジェクトをレンダリングする段階は、プロセッサにより、第２のアプリケーションのレンダリングＡＰＩを使用して、選択オブジェクトを第２のウィンドウにレンダリングする段階を含む。
【００１７】
一実施形態において、方法の、選択オブジェクトを、境界を有さないウィンドウにレンダリングする段階は、プロセッサにより、照明および環境的効果を含む第１条件を、第１のアプリケーションから取得し、照明および環境的効果を含む第２条件を、第２のアプリケーションから取得する段階を含む。方法はまた、プロセッサにより、第１のウィンドウおよび第２のウィンドウからの境界を有さないウィンドウの距離に応じて、第１条件および第２条件を段階的に適用する段階を含む。
【００１８】
一実施形態では、第１のアプリケーションから第２のアプリケーションへとオブジェクトをエクスポートおよびインポートするシステムを開示する。一実施形態において、オブジェクトは、３次元オブジェクトである。システムは、グラフィックス処理ユニットと、プロセッサと、プロセッサにより実行されるプログラムロジックを有形に格納するための記憶媒体とを備える。一実施形態では、記憶媒体は更に、第１のアプリケーションおよび第２のアプリケーションのうちの１以上を含むことができる。記憶媒体におけるプログラムロジックは、プロセッサにより実行され、第１のユーザ入力を受信する、第１ユーザ入力受信ロジックを有する。記憶媒体に含まれる選択ロジックは、プロセッサにより実行され、第１のユーザ入力を受信すると、第１のアプリケーションおよびレンダリングＡＰＩによってディスプレイの第１のウィンドウにレンダリングされたオブジェクトを選択する。オブジェクトが、第１のアプリケーションから、記憶媒体に含まれる抽出ロジックによって抽出される。加えて、プロセッサは、第２のユーザ入力を受信する第２のユーザ入力受信ロジック、第２のユーザ入力を受信することに応答して、ディスプレイにおいて、第１のウィンドウから、第２のウィンドウにレンダリングされた第２のアプリケーションへとオブジェクトをドラッグするドラッグロジックを実行する。記憶媒体に含まれるインポートロジックは、プロセッサによって実行され、オブジェクトが、第２のウィンドウのフォーカスボーダを横切ることに応答して、オブジェクトを第２のアプリケーションへとインポートする。
【００１９】
一実施形態において、プロセッサにより実行され、オブジェクトを選択する選択ロジックは、プロセッサにより実行され、第１のアプリケーションからの第１のユーザ入力を迂回させる迂回ロジックを含む。更に、選択ロジックは、プロセッサにより実行され、第１のアプリケーションからレンダリングＡＰＩへの描画コマンドを傍受する傍受ロジックと、プロセッサにより実行され、第１のユーザ入力と関連付けられた描画コマンドから、オブジェクトを判断する判断ロジックと、プロセッサにより実行され、選択アルゴリズムに従って、３次元オブジェクトおよびその他のオブジェクトを選択する選択ロジックとを含む。
【００２０】
一実施形態において、判断ロジックは、プロセッサによって実行され、第１のユーザ入力の座標におけるシーンの近位面にカメラを割り当てる割り当てロジックを含む。プロセッサによって実行される判断ロジックはまた、プロセッサによって実行され、レイが投じられた第１のオブジェクトを選択するべく、カメラから遠位面にレイキャスティングするレイキャスティングロジックを含む。
【００２１】
一実施形態において、プロセッサによって実行されるドラッグロジックは、境界を有さないウィンドウをレンダリングするウィンドウレンダリングロジックと、ユーザによって選択された１以上のオブジェクトを含む選択オブジェクトを、境界を有さないウィンドウにレンダリングする選択オブジェクトレンダリングロジックと、境界を有さないウィンドウを第１のウィンドウから第２のウィンドウへとドラッグするユーザ入力を受信することに応答して、ユーザ入力に従って、ディスプレイにおいて、境界を有さないウィンドウを移動する移動ロジックとを含む。
【００２２】
一実施形態において、プロセッサによって実行される選択オブジェクトレンダリングロジックは更に、選択オブジェクトと関連付けられた描画コマンドをコピーするコピーロジックと、描画コマンドをレンダリングＡＰＩパイプラインに挿入する挿入ロジックと、レンダリングＡＰＩを介して描画コマンドをレンダリングする描画コマンドレンダリングロジックとを含む。一実施形態において、選択オブジェクトレンダリングロジックは更に、プロセッサによって実行され、照明および環境的効果を含む第１条件を、第１のアプリケーションから取得する第１条件取得ロジックと、照明および環境的効果を含む第２条件を、第２のアプリケーションから取得する第２条件取得ロジックとを含む。更に、プロセッサによって実行される選択オブジェクトレンダリングロジックは、第１のウィンドウおよび第２のウィンドウからの境界を有さないウィンドウの距離に応じて、第１条件および第２条件を段階的に適用する条件適用ロジックを含む。
【００２３】
プロセッサによって実行されるインポートロジックは更に、変換プロセスが完了すると、選択オブジェクトが第２のアプリケーションへとインポートされるように、第２のアプリケーションへと実装するべく選択オブジェクトを変換する変換ロジックと、変換プロセスの間に、選択オブジェクトを第２のウィンドウにレンダリングするレンダリングロジックと、オブジェクトが第２のアプリケーションへとインポートされると、エンジンのレンダリングプロセスを停止して、第２のアプリケーションでのオブジェクトのレンダリングとする停止ロジックと、を含む。一実施形態において、変換プロセスのためにプロセッサによって実行される変換ロジックは更に、描画コマンドを、第２のアプリケーションが使用するファイル形式へと修正を行う修正ロジックを含む。一実施形態において、ファイル形式は、ＯＢＪファイルである。一実施形態において、レンダリングロジックは更に、プロセッサによって実行され、レンダリングＡＰＩに、選択オブジェクトを第２のウィンドウにレンダリングするように命令するレンダリングＡＰＩパイプラインに、描画コマンドを挿入する挿入ロジックを含む。一実施形態において、第２のアプリケーションレンダリングＡＰＩは、オブジェクトを第２のアプリケーションにインポートすると、選択オブジェクトを第２のウィンドウにレンダリングする。
【００２４】
格納された命令を有するコンピュータ可読記憶媒体であって、プロセッサによって実行されると、プロセッサに、第１のユーザ入力を受信する手順と、第１のユーザ入力に応答して、第１のアプリケーションおよびレンダリングＡＰＩによってディスプレイの第１のウィンドウにレンダリングされたオブジェクトを選択する手順とを実行させる。命令は更に、プロセッサに、エンジンを介して、第１のアプリケーションからオブジェクトを抽出する手順を実行させる。更に、記憶媒体は、第２のユーザ入力を受信し、第２のユーザ−入力に応答して、ディスプレイ上でオブジェクトを、第１のウィンドウから、第２のウィンドウにレンダリングされた第２のアプリケーションへとドラッグする命令を含む。記憶媒体は更に、オブジェクトが、第２のウィンドウのフォーカスボーダを横切ることに応答して、オブジェクトを第２のアプリケーションへとインポートする命令を含む。
【００２５】
以下の詳細な説明および添付の図面を参照することにより、これらおよびその他の実施形態の組み合わせ可能な特徴が、当業者に明らかとなるであろう。
【００２６】
添付の図面は必ずしも実寸ではなく、複数の図面にわたって、同様な要素には同様な参照番号が付与されている。
【図面の簡単な説明】
【００２７】
【図１】２つのローカルアプリケーションをホストし、第２のアプリケーションへのインポートのために、第１のアプリケーションから３Ｄオブジェクトをエクスポートするコンピュータシステムの一例が示されている。
【図２】第１のアプリケーションからオブジェクトをグラブする段階、第１のアプリケーションからのオブジェクトを第２のアプリケーションへとドラッグする段階、および、オブジェクトをレンダリングのために第２のアプリケーションにドロップする段階とを備えるエクスポートおよびインポートプロセスの全体的なフローを示した図である。
【図３】グラブプロセスのフローを示した図である。
【図４】ドラッグプロセスのフローを示した図である。
【図５】ドロッププロセスのフローを示した図である。
【図６】再エントリプロセスのプロセスフローを示した図である。
【図７】環境効果レンダリングを組み込むプロセスを実行するコンピュータシステムディスプレイを示した図である。
【図８】ローカルアプリケーションをホストするコンピュータシステム、および、リモート第２アプリケーションをホストするアプリケーションサーバの一例を示した図である。
【図９】ローカルアプリケーションをホストするコンピュータシステム、および、リモート第２アプリケーションをサポートし、サーバ側レンダリングを有するアプリケーションサーバの一例を示した図である。
【図１０】特定の実施形態の一以上の部分を実装するのに好適なコンピュータシステム１０００の一例を示した図である。
【発明を実施するための形態】
【００２８】
本明細書の一部を構成し、特定の実施形態の例を示す添付の図面を参照して、発明の特徴について以下に詳細に記載する。しかしながら、発明の特徴は、様々に異なる形態で実装可能であり、本発明の範囲となるまたは特許請求される特徴は、本明細書に記載される実施形態例に限定されると解釈されることを意図していない。記載される実施形態の例は、単純に例示のためであり、特徴の広い範囲が保護されるまたは特許請求されることを意図している。例えば、発明の特徴を、方法、装置、構成要素またはシステムとして実装可能である。したがって、実施形態は、例えば、ハードウェア、ソフトウェア、ファームウェアまたはこれらの任意の組み合わせ（ソフトウェア自身を除く）の形態をとってもよい。したがって、以下の詳細な説明は、限定的に解釈されることを意図していない。
【００２９】
添付の図面では、特定の構成要素を詳細に示すべく、誇張されている場合がある。（例えば、図面に示されている大きさ、材料および同様な詳細事項は、例示を意図しており、これに限定することを意図していない。）したがって、本明細書に開示される特定の構造的および機能的詳細は、限定するものとして解釈されるべきではなく、当業者が開示された実施形態を様々に採用できるよう教示するための、代表的な基本の例を示している。
【００３０】
本発明が、特定のトピックに関連するメディアを選択および提示するための方法および装置のブロック図およびオペレーション例を参照して以下に説明される。ブロック図およびオペレーション例における各ブロック、および、ブロック図およびオペレーション例におけるブロックの組み合わせは、アナログまたはデジタルハードウェア、および、コンピュータプログラム命令によって実装することができる。これらのコンピュータプログラム命令は、汎用コンピュータ、専用コンピュータ、ＡＳＩＣ、または、その他のプログラム可能データ処理装置のプロセッサに供給され、コンピュータまたはその他のプログラム可能データ処理装置のプロセッサを介して実行される命令は、ブロック図またはオペレーションブロックまたは複数のブロックに規定される機能／動作を実装してもよい。様々な側面または特徴が、複数の装置、構成要素、モジュール等を含んでもよいシステムとして例示される。しかしながら、様々なシステムは、更なる装置、構成要素、モジュール等を含んでもよく、図面を参照して説明される装置、構成要素、モジュール等の全てを含んでもよいし、含まなくてもよい。これらのアプローチの組み合わせを使用してもよい。
【００３１】
代替の実装形態の一部において、ブロックに記載される機能／動作が、オペレーションの例に示される順番以外の順番で発生してもよい。例えば、連続して示される２つのブロックを、関係する機能／動作に応じて、実質的に並行して実行することができる、または、これらのブロックを逆の順番で実行することができる。更に、本開示においてフローチャートで示される方法の実施形態は、技術の完全な理解を提供するために、一例として提供されている。開示される方法は、ここに示されるオペレーションおよびロジックのフローに限定されない。様々なオペレーションの順番を変更した変形例、および、大きなオペレーションの一部として説明されたサブオペレーションが独立して実行される変形例等も考えられる。
【００３２】
本開示において、"サーバ（server）"という言葉は、処理、データベースおよび通信機能を提供するサービスポイントを意味するとして理解されるべきである。一例として、これに限定されないが、"サーバ"という言葉は、関連付けられた通信およびデータ格納およびデータベース機能を伴う１つの物理的プロセッサを指す、または、関連するネットワークおよび記憶装置を伴うネットワークと接続されたまたはクラスタ化されたプロセッサの複合体を指す、または、サーバによって提供されるサービスをサポートするオペレーティングソフトウェア、１以上のデータベースシステムおよびアプリケーションソフトウェアを指す。
【００３３】
コンピュータデバイスは、有線または無線ネットワークを介して、信号を送受信可能であってよく、または、物理メモリステートとしてのメモリ内の信号を処理または格納可能であってよく、したがって、サーバとして動作可能であってもよい。サーバとして動作可能な装置の例としては、専用ラック、搭載サーバ、デスクトップコンピュータ、セットトップボックス、上記の装置の２つ以上の機能のような様々な機能を組み合わせた統合デバイス等が挙げられる。サーバは、幅広く様々な構成または機能を有してもよいが、サーバは、１以上の中央処理装置およびメモリを備える。サーバは更に、１以上のマスストレージデバイス、１以上の電源、１以上の有線または無線ネットワークインターフェース、１以上の入出力インターフェース、または、Ｗｉｎｄｏｗｓ（登録商標）サーバ、Ｍａｃ  ＯＳ  Ｘ、Ｕｎｉｘ（登録商標）、Ｌｉｎｕｘ（登録商標）、ＦｒｅｅＢＳＤのような１以上のオペレーティングシステムを備えてもよい。
【００３４】
明細書および添付の特許請求の範囲全体にわたって使用されている言葉は、明確に記載されている意味を超えてコンテキストで示唆されるまたは暗に意味する微妙な差異を有する意味も含む場合がある。同様に、明細書中で使用されている"一実施形態において"というフレーズは、必ずしも同一の実施形態を指しているのではなく、また、"別の実施形態において"というフレーズは、必ずしも異なる実施形態を意味しているわけではない。例えば、特許請求される特徴は、実施形態の全体または部分の組み合わせを含むことを意図している。概して、使用される用語は、少なくとも部分的に、その用語が使用されているコンテキストを含めて理解される。例えば、明細書で使用されている"および"、"または"、もしくは、"および／または"という言葉は、少なくともこのような用語が使用されているコンテキストに応じて様々な意味を含む場合がある。典型的には、"または"という言葉が、Ａ、ＢまたはＣと構成要素が列挙される場合に使用された時には、Ａ、ＢおよびＣという包括的な意味でも、Ａ、ＢまたはＣという排他的な意味でも使用されている。更に、明細書中で使用される"１以上の（one or more）"という言葉は、少なくとも部分的にコンテキストに依存し、１つの特徴、構造または特性を説明するのに使用される場合もあるし、複数の特徴、構造または特性の組み合わせを説明するのに使用される場合もある。同様に、"一の（"a"、"an"）"または"上記の（the）"という言葉も、少なくともコンテキストに応じて１つの物または複数の物を指す意味として使用される。更に、"〜に基づく（based on）"という言葉は、必ずしも、因子の排他的なセットを意味することを意図しておらず、少なくとも部分的にコンテキストに応じて必ずしも明示されていない、更なる因子が存在する可能性がある。
【００３５】
本開示は、概して、リアルタイムで第２の３Ｄプログラムにレンダリングするために、第１の３Ｄプログラムからオブジェクトをエクスポートすることに関する。一実施形態では、コンピュータシステムは、複数のアプリケーションインスタンスをホストし、各アプリケーションインスタンスは、ローカルクライアントアプリケーションに対応する。コンピュータシステムは、コンピュータシステムのグラフィックス処理ユニットのリソースを利用して、並行してレンダリングを行い、アプリケーションインスタンスのグラフィックス出力は、コンピュータシステムディスプレイの別個のウィンドウにおけるローカルクライアントアプリケーションのうちの少なくとも２つに対応する。第１のアプリケーションから３Ｄオブジェクトをエクスポートしようとするユーザは、第１のウィンドウからオブジェクトを選択して、そのオブジェクトを第２のウィンドウにドラッグする。ユーザがオブジェクトをドラッグすると、ユーザのドラッグコマンドに従って、オブジェクトがコンピュータディスプレイにレンダリングされる。次いでユーザが、第２のウィンドウにレンダリングされた第２のアプリケーションにオブジェクトをドロップすると、オブジェクトがリアルタイムで、第２のアプリケーションにインポートされる。
【００３６】
レンダリングは、通常は、コンピュータプログラムによって、モデルからイメージを生成するプロセスと考えられてもよい。モデルは通常、３次元（３Ｄ）オブジェクトの記述であり、厳密に規定された言語またはデータ構造によって表現されてもよい。モデルは、幾何形状、視点、テクスチャ、照明、シェーディング、動き、および、その他の好適な種類の情報を含んでもよい。モデルがレンダリングされるイメージは、画素の集合体として構成されるデジタルイメージまたはラスタグラフィックスイメージであってもよい。本開示は、レンダリングのコンセプトを、任意のアプリケーションの出力を表すイメージを生成することに拡張する。レンダリングは、２次元（２Ｄ）データおよび３Ｄデータを含む任意のデータに基づいて実行されてもよい。３Ｄモデルに基づくイメージの生成に加えて、特定の実施形態では、例えば、これに限定されないが、ウェブブラウザアプリケーション、ワードプロセッサアプリケーション、スプレッドシートアプリケーション、マルチメディアアプリケーション、科学・医療アプリケーション、および、ゲームアプリケーションであるアプリケーションの出力を表すイメージをレンダリングしてもよい。
【００３７】
３Ｄプログラムからのオブジェクトを修正することは、不可能でない場合、通常、手間のかかるタスクである。ユーザが、３Ｄ Ｓｔｕｄｉｏ ＭａｘまたはＭａｙａのような３Ｄグラフィックスプログラムにおける修正を行うために、元のＯＢＪファイルまたはその他の形式のファイルを有さない場合には、ユーザは、第１の３Ｄプログラムが使用する３Ｄグラフィックスファイルを逆コンパイルする必要がある。グラフィックスファイルは、プログラムのインストールパス内の所定のディレクトリに格納されている、または、実際のプログラムコードへとコンパイルされてもよい。何れの場合にせよ、ユーザは、３Ｄグラフィックスプログラムが可読な形式のオブジェクトファイルを取得するのに、複数の段階を実行する必要がある。同様に、オブジェクトファイルの修正を行った後に、第１のプログラム内からの３Ｄオブジェクトの外観を見るために、ユーザは、オブジェクトを、第１のプログラムのコードへと再コンパイルまたはインポートする必要がある。このプロセスは、時間がかかり、リモートアプリケーションを使用する場合には更に時間がかかる。
【００３８】
レンダリングは、サーバが実行するのに好適な種類のタスクであってもよく、これは、レンダリングプロセスは、リソースを多く使用し、特に、レンダリングされるイメージが高解像度および高画質である場合に、計算を多く必要とする場合があるからである。従来は、古いコンピュータシステムの場合、３次元モデルを１つの２Ｄ画像へとレンダリングするのに、数時間または数日かかることもあった。コンピュータハードウェアの開発および改良が進み、特に、コンピュータグラフィックスアプリケーション（例えば、ゲーム、マルチメディア、エンターテイメントまたはマッピング）用に設計されたコンピュータハードウェアが開発され、現在のコンピュータシステムは、各イメージを数秒または数ミリ秒以内にレンダリングできる場合もある。実際に、多くの場合、モデルを１つの画像にレンダリングするのに、サーバの利用可能なリソース全てを使用することはない。このように、サーバ側レンダリングを使用するリモートアプリケーションが、広く使用されるようになってきている。
【００３９】
第２の３Ｄプログラムにインポートするために、第１の３Ｄプログラムから３Ｄオブジェクトをエクスポートすることを良好に利用するべく、ソフトウェアエンジンは、ユーザコマンドに応答して、第１のアプリケーションから３Ｄグラフィックスレンダリングパイプラインへの描画コマンドを傍受することにより、特定のオブジェクトを選択して、第２のアプリケーションからの所定のシーンに対する描画コマンドに、それらを挿入する。特定の実施形態では、第２のアプリケーションは、別のサーバにホストされたリモートアプリケーションであってもよい。別の実施形態では、第２のアプリケーションは、サーバ側レンダリングを伴うリモートアプリケーションであってもよい。
【００４０】
図１には、ローカル第１のアプリケーション１０５およびローカル第２のアプリケーション１０６を実行するコンピュータシステム１０１の一例が示されている。通常オペレーションでは、ユーザは、例えば、ユーザハードウェア１０８を操作することにより、システム１０１を起動して、Ｉ／Ｏインターフェース１０７は、ユーザ／ハードウェア１０８からの信号を、第１のアプリケーション１０５または第２のアプリケーション１０６への命令へと変換する。アプリケーション１０５および１０６は共に、２Ｄシーンまたは３Ｄシーンをレンダリングするために、レンダリングＡＰＩ１０４に描画コマンドを出力する。レンダリングＡＰＩ１０４は、レンダリングパイプライン（図示せず）を介して描画コマンドを受け渡して、描画コマンドを、グラフィックスハードウェア１０３が実行する命令へと変換して、２Ｄまたは３Ｄシーンをディスプレイ１０２にレンダリングする。一実施形態において、第１のアプリケーション１０５は、ディスプレイ１０２の一部分上の第１のウィンドウにレンダリングされ、第２のアプリケーション１０６は、ディスプレイ１０２の一部分上の第２のウィンドウにレンダリングされる。一実施形態において、エンジン１０９は、システム１０１内に含まれるプロセッサ（図示せず）において、第１のアプリケーション１０５および第２のアプリケーション１０６と並行して実行されるソフトウェアルーチンである。エンジン１０９は、Ｉ／Ｏインターフェース１０７を常に監視して、ドラッグ＆ドロッププロセスを開始する命令をモニタする。このような命令が検出されると、パス１１０を介して、命令がエンジン１０９に迂回される。ユーザは、ドラッグ＆ドロッププロセスを様々な方法で開始させてもよく、これに限定されないが、特別なキーストローク、マウスまたはその他のポインティングデバイス入力を併用した所定のキーの押下、タッチ入力デバイスのタップ、または、タッチ入力デバイス上で特定のジェスチャを行うこと、が含まれる。
【００４１】
パス１１０を介してコマンドがエンジン１０９に迂回されると、エンジン１０９は、ユーザが、任意のアプリケーションウィンドウにおける所与のオブジェクトを選択することを可能にする。エンジン１０９はまた、第１のアプリケーション１０５および第２のアプリケーション１０６からレンダリングＡＰＩ１０４への描画コマンドを監視し、迂回されたユーザ入力１１０を使用して、あるシーンにおいて、ユーザが１以上のどのオブジェクトを選択することを望んでいるかを判断する。エンジン１０９は、ユーザが選択することを望んでいる１以上のオブジェクトに対応する描画コマンドを抽出して、これらをレンダリングＡＰＩ１０４に渡して、ドラッグプロセスの間にレンダリングする。ドロッププロセスの間、エンジン１０９は、第２のアプリケーション１０６のウィンドウにレンダリングするために、オブジェクトに対する描画コマンドをレンダリングＡＰＩ１０４に渡し続けるが、同時に、第２のアプリケーション１０６にインポートするための形式に描画コマンドを変換する。変換およびインポートプロセスが完了すると、エンジン１０９は、描画コマンドをレンダリングＡＰＩ１０４に送信するのを停止し、選択された１以上のオブジェクトが、第２のアプリケーション１０６のみを介してレンダリングされる。グラブ、ドラッグおよびドロッププロセスについて、以下に、より詳細に説明する。説明を簡単にするために、図１では、アプリケーションが２つのみ示されている。しかしながら、実際には、コンピュータシステム１０１は、並行して任意の数のアプリケーションを実行することができ、これらのアプリケーションは、本明細書に記載する実施形態に従って、一のアプリケーションから別のアプリケーションへとエクスポート可能な様々なオブジェクトをレンダリングする。
【００４２】
図２には、ドラッグ＆ドロッププロセスの高レベルフローが示されている。ステップ２０１において、コンピュータシステムは、複数のアプリケーションの実行を開始する。ステップ２０２において、ユーザは、以下に図４を参照して詳細に説明するグラブプロセスを開始する。ステップ２０３において、ユーザは、図５を参照して以下に詳細に説明するように、第１のアプリケーションを表示するウィンドウから、第２のオブジェクトを表示するウィンドウへと所望のオブジェクトをドラッグする。最後に、ステップ２０４において、ユーザは、オブジェクトを第２のアプリケーションのウィンドウへとドロップするが、このステップは、再エントリプロセスとも称され、図６を参照して以下に詳細に説明する。
【００４３】
図３には、ドラッグ＆ドロッププロセスの間の、ユーザのディスプレイの表示が例示されている。最初の状態では、コンピュータシステムのディスプレイは、２つの別個のウィンドウを含み、第１のウィンドウ３０１は、第１のアプリケーションのレンダリングされた出力を含み、第２のウィンドウは、第２のアプリケーション３０４のレンダリングされた出力を含む。第１のウィンドウ３０１内には、オブジェクト３０３ａおよび３０３ｂがレンダリングされている。図３には、説明を目的としてオブジェクトが２つのみ示されているが、実際には、第１のウィンドウ３０１および第２のウィンドウ３０４は、任意の数のオブジェクトを含んでもよい。
【００４４】
図３では、第１のウィンドウ３０１が拡大されて、参照番号３０５として示されている。ユーザは、オブジェクト３０３を様々に異なる方法で選択することができ、例えば、入力デバイスを使用して、オブジェクト３０３ａの一点３０７をクリックする、または、タッチスクリーン上でタップする、入力デバイスまたはタッチスクリーンを使用して、オブジェクト３０３ａのパス３０８をトレースする、または、入力デバイスを使用して、もしくは、タッチデバイス上で、オブジェクト３０３ａの周りにマーキー（marquee）３０６を描くことによって、選択してもよい。その他の入力方法も採用でき、これに限定されないが、ジェスチャ、選択ワンド（wand）、多角形マーキー、が当業者であれば容易に思いつく。
【００４５】
オブジェクト３０３aを選択すると、ユーザは、第１のウィンドウ３０１から第２のウィンドウ３０４へのパス３０２に沿って、ディスプレイ上でオブジェクトをドラッグする。ある実施形態では、オブジェクトがコピーされてウィンドウ３０１にレンダリングされた状態でとどまり、第１のウィンドウ３０１と第２のウィンドウ３０４との間に延在する中間の空間におけるパス３０２に沿って、コピー３０３ｃがレンダリングされる。他の実施形態では、実際のオブジェクト３０３ａが、ウィンドウ３０１からウィンドウ３０４へと移動される。パス３０２は、ユーザ入力によって決定され、ウィンドウ３０１からウィンドウ３０４へのまたはその反対方向の任意の経路であってよい。
【００４６】
第２のウィンドウ３０４のフォーカスボーダを横切ると、エンジンは、再エントリプロセスまたはドロッププロセスを開始する。ユーザが、望むようにウィンドウ３０４内にオブジェクト３０３ａを位置させたると、ユーザは、オブジェクト３０３ａをウィンドウ３０４にドロップするコマンドを開始する。この時点で、ドラッグ＆ドロッププロセスが完了し、エンジンは、オブジェクト３０３ａをオブジェクト３０３ｄとして第２のアプリケーションにインポートし、第２のウィンドウ３０４にレンダリングする。
【００４７】
図４には、グラブプロセスのプロセスフローが示されている。４０１において、エンジンは、所望のオブジェクトを選択する選択入力を受信する。本発明では、上記したように、複数の選択入力方法が考えられる。選択入力を受信すると、エンジンは、レンダリングＡＰＩ宛の第１のアプリケーションからの描画コマンドを、エンジン自身へと迂回させる。これらの描画コマンドから、エンジンは、第１のアプリケーションによってレンダリングされたシーンを再構成することができる。３Ｄシーンのコンテキストにおいて、エンジンは、所定のシーンにおける全ての３Ｄオブジェクトを有することになり、また、シーンをレンダリングするのに第１のアプリケーションによって使用されるカメラの視点および視野も有する。
【００４８】
一実施形態では、ユーザ入力は、所望のオブジェクト上の第１のウィンドウにおける１点である。ステップ４０２では、エンジンは、レンダリングされたディスプレイにおけるグラフィックオブジェクトへと、入力選択を解像する。この２次元入力を３次元オブジェクトへと変換するのに、従来の３Ｄオブジェクト選択方法が採用される。このような方法の一つとしては、３Ｄシーンの近位面のユーザ入力の位置にカメラを割り当てて、カメラからレイを遠位面に投じて、レイが当てられた第１のオブジェクトを選択する方法が挙げられる。別の実施形態では、選択ツールは、レイが当てられた第１のオブジェクトに接触する全てのオブジェクトを選択する。別の実施形態では、選択ツールは、例えば、タグまたはその他のメタデータである第１のオブジェクトにレイが当たると、同じオブジェクト識別子を有する全てのオブジェクトを選択する。別の実施形態では、第１のオブジェクトにレイが当たると、選択ツールは、同じテクスチャを有するオブジェクト全てを選択する。更なる別の実施形態では、選択ツールは、第１のオブジェクトにレイが当たると、同じ動きベクトルを有する全てのオブジェクトを選択する。
【００４９】
ステップ４０３において、エンジンは、ユーザ入力に基づいて、ユーザ選択をフィルタまたは拡張する。ユーザは、元のオブジェクトが選択されたのと同様な態様またはその他の入力方法で、例えば、修飾子（modifier）を押下して選択オブジェクトを付加し、選択するべきその他のオブジェクトの周りにマーキーを描画して、選択するオブジェクトを増やすことを選択してもよい。同様に、ユーザに対して、ポップアップウィンドウが提示されて、同じ動きベクトル、テクスチャ、メタデータ等を有するその他のオブジェクトを選択してもよい。同様に、ユーザは、選択した複数のオブジェクトから、アナログ的な態様で、オブジェクトを選別して取り除いて（filter out）もよい。ユーザは、選択オブジェクトからオブジェクトを差し引くキー（key）を有してもよく、選択から除外するオブジェクトを個別にクリックしてもよいし、除外するオブジェクトの周りにマーキーを描画してもよい。更に、ユーザには、ドロップダウンメニューが提供されて、所定のテクスチャ、動きベクトル、メタデータ、タグ、等を有するオブジェクトを選別してもよい。本発明では、選択に追加および削除を行う、当業者に周知の複数の方法を想定している。.
【００５０】
ユーザが満足すると、ステップ４０４において、ユーザは、ドラッグプロセスを開始するコマンドを入力する。コマンドは、これに限定されないが、選択されたオブジェクトをドラッグするべく入力デバイスを移動させると共に、入力デバイスのボタンを押下すること、タッチ入力デバイスにおいて特定のジェスチャを行うこと、入力デバイスを移動させると共にキーボードのキーを押下すること、を含んでもよい。本発明は、ドラッグプロセス４０４を開始するのに複数の方法を想定している。
【００５１】
図５には、ドラッグプロセスのプロセスフローが示されている。５０１において、エンジンは、コンピュータシステムディスプレイ上にウィンドウを形成する。一実施形態では、ウィンドウは、可視の境界を有することができる。一実施形態では、ウィンドウは、境界を有さない。境界を有さないウィンドウは、完全に透明な第２のディスプレイにおける単なる指定されたエリアであり、ディスプレイにレンダリングされた実際のオブジェクトのみが、境界を有さないウィンドウ内に含まれるグラフィックオブジェクトである。ステップ５０２において、エンジンは、オブジェクトを、境界を有さないウィンドウに書き込む。エンジンはこのステップを、第１のアプリケーションからの選択オブジェクトに関連付けられた描画コマンドをエンジンへと迂回させることにより実行する。そして、エンジンは、これら描画コマンドを、レンダリングＡＰＩに、境界を有さないウィンドウ内にレンダリングすべきオブジェクトとして送信する。レンダリングＡＰＩは、通常は、レンダリングパイプラインを介して描画コマンドを処理し、シーンを、境界を有さないウィンドウ内のディスプレイ上にレンダリングする。境界を有さないウィンドウは透明であることから、オブジェクトのみが第１のウィンドウから第２のウィンドウへと移動するように見える。このように、ドラッグプロセスの間は、レンダリングＡＰＩは、エンジンに加えて、少なくとも２つのアプリケーションからの描画コマンドを処理する。
【００５２】
エンジンは、入出力インターフェース１０７を介してユーザから受信した境界を有さないウィンドウ移動コマンドに従って、選択された１以上のオブジェクトと関連付けれた描画コマンドを送信する。上記したように、本開示は、ユーザが、ドラッグプロセスの間に、境界を有さないウィンドウの位置を調整するための複数の入力方法を想定している。
【００５３】
エンジンが境界を有さないウィンドウを移動させるユーザコマンドを受信しない場合には、エンジンは、ユーザ入力コマンドをポーリングして、ステップ５０４においてドロップコマンドが発行されたか否かを判断する。ドロップコマンドが検出されると、処理が、ステップ５０５の再エントリプロセスに移る。ドロップコマンドは、ユーザが、第２のウィンドウにレンダリングされた第２のアプリケーションに、オブジェクトをインポートすることを望むことを示す、ユーザ入力機器からの任意のコマンドであってよい。ドロップコマンドは、これに限定されないが、マウスまたはその他の入力デバイスにおけるボタンの押下を解除すること、タッチ入力デバイスにおけるジェスチャ、または、入力デバイスでその他のキーを押下すること、を含んでもよい。当業者であれば、ドロップコマンドのその他のユーザ入力方法が想定できる。一実施形態において、オブジェクトが、第２のウィンドウのフォーカスボーダを越えてドラッグされるとすぐに、再エントリプロセスが開始される。
【００５４】
図６には、再エントリプロセスのプロセスフローが示されている。６０１において、再エントリプロセスが開始される。再エントリプロセスは、ユーザからの明示的なドロップ命令、または、第２のウィンドウのフォーカスボーダを越えた選択オブジェクトのドラッグ動作によってトリガされてもよい。再エントリプロセスが開始されると、エンジンは、描画コマンドからのオブジェクトを、第２のアプリケーションに実装するための形式への変換を開始する。３Ｄコンテキストでは、エンジンは、第２のアプリケーションにインポートするための、３Ｄオブジェクトファイルへと、描画コマンドを変換することを開始する。例えば、ユーザが、第１のウィンドウで３Ｄゲームアプリケーションを実行し、第２のウィンドウにおいて所定のモデルを編集するための３Ｄグラフィックスエディットプログラムを実行している場合が考えられる。所望のオブジェクトを選択した後、ユーザはオブジェクトを第２のウィンドウにドラッグし、オブジェクトに関連付けられた描画コマンドを、ＯＢＪファイルのような３Ｄオブジェクトファイルへと変換する再エントリプロセスが開始される。
【００５５】
ステップ６０２において、エンジンは、オブジェクトに関連付けられた描画コマンドをレンダリングＡＰＩに受け渡すことにより、オブジェクトのレンダリングを継続する。変換プロセスは、時間がかかり、プロセッサを多く使用することから、エンジンは、変換を行うと同時に、オブジェクトのレンダリングも続ける。エンジンは、描画コマンドを第２のアプリケーションからの描画コマンドストリームへと挿入することにより、レンダリングＡＰＩにオブジェクトをレンダリングする。したがって、再エントリの間、エンジンは、オブジェクトを、第２のウィンドウの上に重ねられた境界を有さないウィンドウに単にレンダリングするだけでなく、オブジェクトが、環境的効果を含めて、第２のアプリケーション自身によってインポートされレンダリングされたかのように、オブジェクトを第２のアプリケーションに統合する。この機能については、図７を参照して以下で説明する。
【００５６】
ステップ６０３において、変換が完了し、オブジェクトファイルが、第２のアプリケーションにインポートされる。インポートプロセスは、アプリケーション毎およびファイル形式毎に異なる。３Ｄグラフィックスエディットプログラムのコンテキストにおいて、ユーザが３Ｄグラフィックスエディットプログラムから直接ファイルを開いたかのように、ファイルがプログラムのワークスペースへとインポートされる。ステップ６０４において、オブジェクトの第２のプログラムへのインポートが正しく行われた後に、エンジンは、オブジェクトのレンダリングを中止し、オブジェクトが、第２のアプリケーションによってレンダリングされる。複数のレンダリングプロセスまたはファイル変換がユーザに示されることなく、再エントリプロセス全体が、シームレスな態様で実行される。ユーザは、これらのエンジンによって実行されるバックグラウンドプロセスに気付くことなく、オブジェクトが単純に第１のウィンドウからドラッグされ、第２のウィンドウにドロップされたかのように、オブジェクトがレンダリングされる。
【００５７】
図７には、環境的効果を組み込むドラッグ＆ドロッププロセスの代表例が示されている。第１のウィンドウ７０１において、単純化のため、球形のオブジェクト７０２ａが、ウィンドウ７０１の左上に存在する光源７０３と共に存在している。第２のウィンドウ７０４において、３Ｄシーンの環境には、左上からの光源７０５が含まれる。グラブプロセスの間に、エンジンは、ウィンドウ７０１および７０４両方の環境効果および照明を取得し、各ウィンドウからのオブジェクトの距離に応じて、環境的効果および照明を、選択されたオブジェクト７０２ａに適応的に適用する。このように、オブジェクト７０２が第２のウィンドウに向かってドラッグされ、オブジェクト７０２のシェーディングが、光源７０３および７０５からの距離に応じて、図中７０２ｂ、７０２ｃ、７０２ｄおよび７０２ｅの例に示されるように変化する。エンジンは、これらの環境的効果を、レンダリングＡＰＩに渡す前のオブジェクトの描画コマンドに適用することによって、これら環境的効果をレンダリングする。環境的効果は、単に照明に限定されず、当業者であれば、霧、スモーク、ぼかし、粒子効果、反射、および、その他の周知の環境的効果を想定できる。
【００５８】
図８は、コンピュータシステム８０１の一実施形態を示し、２つのアプリケーションのうちの一方は、アプリケーションサーバ８０９で実行されるリモートアプリケーション８１０である。このような場合、エンジン８０５のオペレーションは、変わらない。エンジンは、Ｉ／Ｏインターフェース８０７からの命令を傍受し、この命令を、ドラッグ＆ドロッププロセスのオペレーションの間にパス８１１に沿ってエンジンへと迂回させる。ユーザがローカルアプリケーション８０６からドラッグし、リモートアプリケーション８１０へとドロップすると仮定すると、ローカルアプリケーション８０６からレンダリングＡＰＩ８０４への描画コマンドが傍受されて、ユーザが所望のオブジェクトを選択するグラブプロセスの間に使用される。ドラッグプロセスの間に、エンジン８０５は、選択オブジェクトのための描画コマンドをレンダリングＡＰＩ８０４へと迂回させることにより、境界を有さないウィンドウへのオブジェクトのレンダリングを扱う。ユーザがオブジェクトをリモートアプリケーション８１０のウィンドウにドロップすると、エンジン８０５は、選択されたオブジェクトのレンダリングを継続すると同時に、変換プロセスを開始する。変換が完了すると、変換されたオブジェクトファイルがネットワークリンク８１４を介して、リモートアプリケーション８１０へのインポートのために、アプリケーションサーバ８０９へと転送される。インポートの後、エンジン８０５は、描画コマンドをレンダリングＡＰＩ８０４に渡すのを止め、システムは通常動作になる。別の実施形態では、ユーザは、リモートアプリケーションからオブジェクトを、ローカルにホストされたアプリケーションへとドラッグする。この構成において、システムは、実質的に同様なメカニズムで動作する。
【００５９】
図９には、アプリケーション９０８のうちの１つが、アプリケーションサーバ９０７で実行されるリモートアプリケーションであり、アプリケーションサーバは、自身のレンダリングＡＰＩ９０９を介してレンダリングを行うサーバ側レンダリングを有する、コンピュータシステム９０１の一実施形態が示されている。一例として、ユーザは、ローカルアプリケーション９０５のウィンドウからのアプリケーションを、リモートでレンダリングされたアプリケーション９０８のウィンドウへとドラッグする。システム９０１のオペレーションは、実質的に、図８に示したものと同様である。エンジン９１０は、Ｉ／Ｏインターフェース９０６からのＩ／Ｏ入力を傍受して、ドラッグ＆ドロッププロセスの間に、パス９１４に沿って迂回させる。グラブプロセスの間に、エンジン９１０は、ローカルアプリケーション９０５からローカルレンダリングＡＰＩ９０４宛ての描画コマンドを、エンジンへと迂回させる。ユーザがオブジェクトを選択した後、エンジン９１０は、コマンドを、パス９１５に沿ってローカルレンダリングＡＰＩ９０４へと迂回させる。ドラッグプロセスの間は、選択されたオブジェクトに対する迂回された描画コマンドが、ローカルレンダリングエンジン９０４によってレンダリングされて、オブジェクトが境界を有さないウィンドウにレンダリングされる。再エントリプロセスが開始されると、エンジンは、リモートアプリケーション９０８へのインポートのためのオブジェクトファイルへと、オブジェクトのファイル変換を開始する。ファイルが変換されると、そのファイルが、パス９１６を介して、リモートアプリケーション９０８へとインポートされる。そして、エンジンは、ローカルレンダリングＡＰＩ９０４を介したオブジェクトのレンダリングを停止して、オブジェクトのレンダリングは、リモートレンダリングＡＰＩ９０９を介してのみ行われる。
【００６０】
ユーザが、アプリケーション９０８のような、サーバ側レンダリングを有するリモートアプリケーションからのオブジェクトを選択することを望む実施形態では、特殊な場合が存在する。このような一実施形態では、エンジンは、リモートアプリケーション９０８の出力がリモートレンダリングＡＰＩ９０９に入力される前に、この出力にアクセスする必要がある。これは、リモートアプリケーションサーバ９０７に存在するソフトウェアの特別の実装を必要する、または、最低でも、エンジン９１０がリモートアプリケーション９０８とレンダリングＡＰＩ９０９との間のパスを監視する許可をサーバ９０７から得る必要がある。このような場合、アプリケーション９０８からの描画コマンドは、ネットワーク接続９１３を介して、エンジン９１０へと迂回される。この特殊な場合は、サーバ側レンダリングを伴うリモートアプリケーションからオブジェクトがグラブされる場合にのみ発生する。
【００６１】
本開示は、複数の構成を想定しており、例えば、一のリモートアプリケーションからドラッグする場合、または、一のアプリケーションから複数の別のアプリケーションへと、オブジェクトをコピー／ペーストを行う様々な場合なども想定している。このような実施形態についても、当業者は想到できる。本開示は、第１のアプリケーションから第２のアプリケーションへとドラッグおよびドロップを行う１つのインスタンスについて説明したが、当業者であれば、第１のアプリケーションから第２のアプリケーションへとドラッグし、オブジェクトを編集し、編集したオブジェクトを再び第１のアプリケーションへとドラッグして、リアルタイムで変更を見る場合なども想定できる。
【００６２】
特定の実施形態を、ハードウェア、ソフトウェア、または、ハードウェアおよびソフトウェアの組み合わせとして実装してもよい。例えば、これに限定されないが、１以上のコンピュータシステムは、特定のロジックまたはソフトウェアを実行して、本明細書で説明および例示した１以上のプロセスの１以上の段階を実行してもよい。コンピュータシステムのうちの１以上は、適切であれば、単一に構成されているまたは分配されていてもよいし、複数のコンピュータシステムまたは複数のデータセンターにわたってもよい。本開示は、任意の好適なコンピュータシステムを考えている。特定の実施形態において、本明細書に説明されるまたは例示される１以上のプロセスのうちの１以上の段階を実行することは、必ずしも、１以上の特定の地理的位置に限定されず、必ずしも時間的制限を有さない。制限的な態様ではなく、一例として、１以上のコンピュータシステムは、これらの機能を、適切である場合には、"リアルタイムで"、"オフラインで"、"バッチモードで"、または、これらの好適な組み合わせで実行してもよい。コンピュータシステムの１以上は、適切であれば、異なる時間、異なるロケーションにおいて、異なる処理を使用して、機能の１以上の部分を実行してもよい。ここで、ロジックという言葉は、適切な場合には、ソフトウェアを包含し、ソフトウェアという言葉は、ロジックを包含する。また、ソフトウェアという言葉は、適切な場合には、コンピュータプログラムを包含し、コンピュータプログラムという言葉は、ロジックを包含する。ソフトウェアという言葉は、適切な場合には、データ、命令、またはその両方を包含し、データ、命令という言葉は、ソフトウェアを包含する。同様に、データという言葉は、適切な場合には、命令を包含し、命令という言葉は、データを包含する。
【００６３】
１以上のコンピュータ可読記憶媒体は、特定の実施形態を実装するソフトウェアを格納または具体化してもよい。コンピュータ可読媒体は、適切である場合には、ソフトウェアを、搬送、通信、収容、保有、維持、伝播、保持、格納、送信、転送または具現化することが可能な任意の媒体であってよい。コンピュータ可読媒体は、適切であれば、生物学的、化学的、電気的、電磁気的、赤外的、磁気的、光学的、量子的媒体、もしくは、その他の好適な媒体、または、このような媒体の２つ以上の組み合わせであってもよい。コンピュータ可読媒体は、１以上のナノメートルスケールの構成要素を含んでもよいし、ナノメートルスケールの設計または製造を実装してもよい。コンピュータ可読記憶媒体の例としては、これに限定されないが、コンパクトディスク（ＣＤ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、フロッピー（登録商標）ディスク、ハードディスク、ホログラフィック記憶装置、集積回路（ＩＣ）（特定用途向け集積回路（ＡＳＩＣ））、磁気テープ、キャッシュ、プログラマブルロジックデバイス（ＰＬＤ）、ランダムアクセスメモリ（ＲＡＭ）デバイス、リードオンリーメモリ（ＲＯＭ）デバイス、半導体メモリデバイス、および、その他の好適なコンピュータ可読記憶媒体、が含まれる。
【００６４】
特定の実施形態を実装するソフトウェアを、適切な場合には、任意の好適なプログラミング言語（プロセス指向またはオブジェクト指向であってもよい）またはプログラミング言語の組み合わせとして書かれていてもよい。（シングルプロセッサまたはマルチプロセッサコンピュータシステムのような）好適な種類のコンピュータシステムまたはシステムは、適切な場合には、特定の実施形態を実装するソフトウェアを実行してもよい。汎用コンピュータシステムは、適切な場合には、特定の実施形態を実装するソフトウェアを実行してもよい。
【００６５】
例えば、図１０には、特定の実施形態の１以上の部分を実装するのに好適なコンピュータシステム１０００の一例が示されている。本開示は、特定の構成において特定の構成要素を有する特定のコンピュータシステム１０００について説明し、例示したが、本開示は、任意の好適な構成において好適な構成用を有する任意の適したコンピュータシステムを想定している。コンピュータシステム１０００は、任意の好適な物理的形態を有してもよく、例えば、１以上の集積回路（ＩＣ）、１以上のプリント回路基板（ＰＣＢ）、１以上のハンドヘルドデバイスまたはその他のデバイス（例えば、携帯電話またはＰＤＡ）、１以上のパーソナルコンピュータ、または、１以上のスーパーコンピュータの形態であってもよい。
【００６６】
システムバス１０１０は、コンピュータシステム１０００のサブシステム同志を結合する。ここで、バスという言葉は、共通の機能を果たす１以上のデジタル信号線を包含する。本開示は、任意の好適なバスアーキテクチャを有する好適なバス構造（例えば、１以上のメモリバス、１以上の周辺機器用バス、１以上のローカルバス、または、上記の組み合わせ）を含む好適なシステムバス１０１０を想定している。バスアーキテクチャの例には、これに限定されないが、インダストリースタンダードアーキテクチャ（ＩＳＡ）バス、拡張ＩＳＡ（ＥＩＳＡ）バス、マイクロチャネルアーキテクチャ（ＭＣＡ）バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション・ローカル（ＶＬＢ）バス、ペリフェラル・コンポーネント・インターコネクト（ＰＣＩ）バス、ＰＣＩエクスプレスバス（ＰＣＩ−Ｘ）、および、アクセラレーテッド グラフィックス ポート（ＡＧＰ）バスが含まれる。
【００６７】
コンピュータシステム１０００は、１以上のプロセッサ１０２０（または、中央処理装置（ＣＰＵ））を含む。プロセッサ１０２０は、命令、データまたはコンピュータアドレスを一時的にローカルに格納するためのキャッシュ１０２２を含んでもよい。プロセッサ１０２０は、メモリ１０３０を含む１以上の記憶装置に結合される。メモリ１０３０は、ランダムアクセスメモリ（ＲＡＭ）１０３２、および、リードオンリーメモリ（ＲＯＭ）１０３４を含んでもよい。データおよび命令は、プロセッサ１０２０とＲＡＭ１０３２との間で双方向に転送されてもよい。データおよび命令は、ＲＯＭ１０３４からプロセッサ１０２０へと一方向に転送されてもよい。ＲＡＭ１０３２およびＲＯＭ１０３４は、任意の好適なコンピュータ可読記憶媒体を含んでもよい。
【００６８】
コンピュータシステム１０００は、プロセッサ１０２０に双方向に結合された固定記憶装置１０４０を含む。固定記憶装置１０４０は、記憶装置制御ユニット１０５２を介して、プロセッサ１０２０に結合されてもよい。固定記憶装置１０４０は、更なるデータ記憶容量を提供してもよく、任意の好適なコンピュータ可読記憶媒体を含んでもよい。固定記憶装置１０４０は、オペレーティングシステム（ＯＳ）１０４２、１以上の実行ファイル１０４４、１以上のアプリケーションまたはプログラム１０４６、データ１０４８等を格納してもよい。固定記憶装置１０４０は、典型的には、一次記憶装置よりも遅い、（例えば、ハードディスク）二次記憶媒体である。適切な場合には、固定記憶装置１０４０によって格納された情報が、仮想メモリとして、メモリ１０３０に組み込まれてもよい。
【００６９】
プロセッサ１０２０は、様々なインターフェースに結合されてもよく、例えば、グラフィックス制御１０５４、ビデオインターフェース１０５８、入力インターフェース１０６０、出力インターフェース１０６２、および、記憶装置インターフェース１０６４に結合されてもよく、また、これらインターフェースはそれぞれ、適切なデバイスに結合されてもよい。入力デバイスまたは出力デバイスの例には、これに限定されないが、ビデオディスプレイ、トラックボール、マウス、キーボード、マイク、タッチセンサディスプレイ、トランスデューサカードリーダ、磁気テープまたは紙テープリーダ、タブレット、スタイラス、音声または手書き認識装置、生体認証リーダ、または、コンピュータシステムが含まれる。ネットワークインターフェース１０５６は、プロセッサ１０２０を、別のコンピュータシステムまたはネットワーク１０８０に結合してもよい。ネットワークインターフェース１０５６を使用して、プロセッサ１０２０は、特定の実施形態の段階を実行する間に、ネットワーク１０８０からまたはネットワーク１０８０へと、情報を送受信してもよい。特定の実施形態は、プロセッサ１０２０上でのみ実行されてもよい。特定の実施形態は、プロセッサ１０２０および協働する１以上のリモートプロセッサで実行されてもよい。
【００７０】
コンピュータシステム１０００がネットワーク１０８０に接続されるネットワーク環境では、コンピュータシステム１０００は、ネットワーク１０８０に接続されたそのほかのデバイスと通信を行ってもよい。コンピュータシステム１０００は、ネットワークインターフェース１０５６を介してネットワーク１０８０と通信を行ってもよい。例えば、コンピュータシステム１０００は、ネットワークインターフェース１０５６において、１以上の入力パケットの形式でネットワーク１０８０から情報（例えば、別のデバイスからのリクエストまたは応答）を受信して、メモリ１０３０は、次の処理のために入力パケットを格納してもよい。コンピュータシステム１０００は、情報（例えば、別のデバイスへのリクエストまたは応答）を、メモリ１０３０に送信前に格納されていてもよい、ネットワークインターフェース１０５６からの１以上の出力パケットの形式で、ネットワーク１０８０に送信してもよい。プロセッサ１０２０は、特定の必要性に応じて処理を行うべく、メモリ１０３０内の入力パケットまたは出力パケットにアクセスしてもよい。
【００７１】
コンピュータシステム１０００は、１以上の入力デバイス１０６６（キーパッド、キーボード、マウス、スタイラス等を含んでもよい）、１以上の出力デバイス１０６８（１以上のディスプレイ、１以上のスピーカ、１以上のプリンタ等）、１以上の記憶装置１０７０、および、１以上の記憶媒体１０７２を有してもよい。入力デバイス１０６６は、コンピュータシステム１０００に外付けされてもよいし、内部に組み込まれてもよい。出力デバイス１０６８は、コンピュータシステム１０００に外付けされてもよいし、内部に組み込まれてもよい。記憶装置１０７０は、コンピュータシステム１０００に外付けされてもよいし、内部に組み込まれてもよい。記憶媒体１０７２は、コンピュータシステム１０００に外付けされてもよいし、内部に組み込まれてもよい。
【００７２】
特定の実施形態が、本明細書に説明または例示された１以上のプロセスの１以上の段階を実行するソフトウェアを具現化する１以上のコンピュータ可読記憶媒体を含む１以上のコンピュータ記憶装置物品に関連して説明された。特定の実施形態では、媒体、ソフトウェアまたはその両方の１以上の部分が、本明細書に説明または例示された１以上のプロセスの１以上の段階を実行するように特別に設計または製造されてもよい。更にまたはこれに替えて、本明細書に説明または例示されたプロセスに固有の設計または製造を行うことなく、特定の実施形態では、媒体、ソフトウェアまたはその両方の１以上の部分が概して利用可能であってもよい。コンピュータ可読記憶媒体の例には、これに限定されないが、ＣＤ（ＣＤ−ＲＯＭ等）、ＦＰＧＡ、フロッピー（登録商標）ディスク、フロッピー（登録商標）状ディスク、ハードディスク、ホログラフィック記憶装置、ＩＣ（例えば、ＡＳＩＣ）、磁気テープ、キャッシュ、ＰＬＤ、ＲＡＭデバイス、ＲＯＭデバイス、半導体メモリデバイス、および、その他の好適なコンピュータ可読記憶媒体が含まれる。特定の実施形態では、ソフトウェアは、コンパイラが生成する機械コード、または、コンピュータがインタプリタを使用して実行してもよい高レベルコードを含む１以上のファイルであってもよい。
【００７３】
一例として、これに限定されないが、メモリ１０３０は、ソフトウェアを具現化する１以上のコンピュータ可読記憶媒体を含んでもよく、コンピュータシステム１０００は、プロセッサ１０２０がソフトウェアを実行する結果として、本明細書に説明されたまたは例示された特定の機能を提供してもよい。メモリ１０３０は、ソフトウェアを格納し、プロセッサ１０２０は、ソフトウェアを実行してもよい。メモリ１０３０は、ソフトウェアを具現化するマスストレージデバイス１０３０内のコンピュータ可読記憶媒体からソフトウェアを読み出してもよいし、ネットワークインターフェース１０５６を介して１以上のその他のリソースからソフトウェアを読み出してもよい。ソフトウェアを実行する場合、プロセッサ１０２０は、本明細書に記載されるまたは例示された１以上のプロセスの１以上の段階を実行してもよく、１以上の段階は、メモリ１０３０に格納する１以上のデータ構造を規定すること、特定の需要に従って、ソフトフェアの１以上の部分によって指示されるようにデータ構造の１以上の部分を修正することを含む。更にまたはこれに替えて、コンピュータシステム１０００は、ハードワイヤードのロジックまたは回路に実装されたロジックの結果として、本明細書に記載されたまたは例示された特定の機能を提供してもよく、ロジックは、明細書に記載されたまたは例示された１以上のプロセスのうちの１以上の段階を実行するべく、ソフトウェアの替わりにまたはソフトウェアと共に動作してもよい。本開示は、特定の需要に従って、ハードウェアおよびソフトウェアの任意の好適な組み合わせを包含する。
【００７４】
特定の実施形態では、コンピュータシステム１０００は、１以上のグラフィックス処理ユニット（ＧＰＵ）１０２４を含んでもよい。特定の実施形態では、ＧＰＵ１０２４は、グラフィックスレンダリングで一般的に使用される算術オペレーション向けの１以上の集積回路および／または処理コアを含んでもよい。ある実施形態では、ＧＰＵ１０２４は、専用グラフィックスユニット命令セットを使用してもよく、別の実施形態では、ＧＰＵは、ＣＰＵのような（例えば、修正ｘ８６）命令セットを使用してもよい。グラフィックス処理ユニット１０２４は、ブリッティング（blitting）、テクスチャマッピング、ピクセルシェーディング、フレームバッファリング等の、複数のグラフィックスプリミティブオペレーションを実装してもよい。特定の実施形態では、ＧＰＵ１０２４は、グラフィックスアクセラレータ、汎用ＧＰＵ（ＧＰＧＰＵ）、または、その他の好適な処理ユニットであってもよい。
【００７５】
特定の実施形態では、ＧＰＵ１０２４は、カードスロットを介して、ハードウェアシステムアーキテクチャに取り付けられるグラフィックスカードまたはディスプレイカードとして具現化されてもよい。その他の実装では、ＧＰＵ１０２４は、コンピュータシステムアーキテクチャのマザーボードに組み込まれてもよい。好適なグラフィックス処理ユニットは、Advanced Micro Devices（登録商標）ＡＭＤ  Ｒ７ＸＸベースのＧＰＵデバイス（Ｒａｄｅｏｎ（登録商標）ＨＤ  ４ＸＸＸ）、ＡＭＤ  Ｒ８ＸＸベースのＧＰＵデバイス（Ｒａｄｅｏｎ（登録商標）ＨＤ  １０ＸＸＸ）、Ｉｎｔｅｌ（登録商標）ＬａｒａｂｅｅベースのＧＰＵデバイス（まだリリースされていない）、ｎＶｉｄｉａ（登録商標）８シリーズＧＰＵ、ｎＶｉｄｉａ（登録商標）９シリーズＧＰＵ、ｎＶｉｄｉａ（登録商標）１００シリーズＧＰＵ、ｎＶｉｄｉａ（登録商標）２００シリーズＧＰＵ、および、その他のＤＸ１１対応ＧＰＵを含んでもよい。
【００７６】
本開示では、特定の順番で、特定のオペレーションが発生するように説明および例示されたが、本開示は、好適なオペレーションが適した任意の順番で発生することを想定している。更に、本開示は、好適なオペレーションが、好適な順番で、１回以上繰り返されることを想定している。本開示では、特定のシーケンスで特定のオペレーションが発生するように説明および例示されたが、本開示は、好適な場合には、実質的に同時に好適なオペレーションが発生することを想定している。本明細書に説明されたまたは例示された任意の好適なオペレーションまたはオペレーションのシーケンスは、適切である場合には、中断、一時停止、または、オペレーティングシステムまたはカーネルのような別のプロセスによって制御されてもよい。オペレーティングシステム環境、または、システム処理の全てまたは大部分を占めるスタンドアローンルーチンにおいて、動作することができる。
【００７７】
本開示は、実施形態の例に対して、当業者が想到するであろう、変更、代替、変形、改良および修正も包含する。同様に、適切であれば、添付の特許請求の範囲は、実施形態の例に対して、当業者が想到するであろう、変更、代替、変形、改良および修正も包含する。
【００７８】
本開示の目的として、コンピュータ可読媒体は、機械可読な形式で、コンピュータが実行可能なコンピュータプログラムコードを含むことができるコンピュータデータを格納する。例えば、これに限定されないが、コンピュータ可読媒体は、有形または固定記憶装置のデータのためのコンピュータ可読記憶媒体、または、コードを含む信号の一時的な変換のための通信媒体を含んでもよい。本明細書で使用されているコンピュータ可読記憶媒体という言葉は、物理的記憶装置または有形記憶装置（信号の反対）を指し、これに限定されないが、例えば、揮発性、不揮発性、取り外し可能、取り外し不可能な媒体を指し、コンピュータ可読命令、データ構造、プログラムモジュールまたはその他のデータのような情報の有形記憶装置のための方法または技術に実装されている。コンピュータ可読記憶媒体としては、これに限定されないが、ＲＡＭ、ＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、または、その他のソリッドステートメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤ、または、その他の光学記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、または、その他の磁気記憶デバイス、または、コンピュータもしくはプロセッサがアクセスすることができる所望の情報、データもしくは命令を有形で格納するのに使用可能なその他の物理的または材料の媒体が含まれる。
【図１】
0006012027.tif 000002
【図２】
0006012027.tif 000003
【図３】
0006012027.tif 000004
【図４】
0006012027.tif 000005
【図５】
0006012027.tif 000006
【図６】
0006012027.tif 000007
【図７】
0006012027.tif 000008
【図８】
0006012027.tif 000009
【図９】
0006012027.tif 000010
【図１０】
0006012027.tif 000011