説明

モデル3D構築アプリケーションプログラムインターフェース

アプリケーションプログラムインターフェースは、モデル3Dオブジェクトによって定義された3Dモデルの3次元(3D)場面を構築するために使用することができる。このインターフェースは、1つまたは複数のグループオブジェクトおよび1つまたは複数のリーフオブジェクトを有する。グループオブジェクトは、他のグループオブジェクトおよび/またはリーフオブジェクトを含むか、あるいは収集する。リーフオブジェクトは、描画オブジェクトであってもイルミネーションオブジェクトであってもよい。グループオブジェクトは、それらのグループ内で収集されたオブジェクトを変換するための変換演算を有することができる。描画オブジェクトは、3D場面の3Dモデルを描画するための命令、または、2D画像を3Dモデル上で描画するための命令を定義する。イルミネーションオブジェクトは、3Dモデルを3D場面内で照らすライトの種類および方向を定義する。方法は、アプリケーションプログラムインターフェースのオブジェクトにより構築されたコンピュータプログラムオブジェクトのツリー階層を処理する。この方法は、オブジェクトの3D場面ツリー階層の枝をトラバースして、グループオブジェクトおよびリーフオブジェクトを処理する。この方法は、次の未処理オブジェクトがリーフオブジェクトのグループオブジェクトであるかどうかを検出する。それがリーフオブジェクトである場合、この方法は、このリーフオブジェクトがライトオブジェクトであるか、描画3Dオブジェクトであるかを検出する。リーフオブジェクトがライトオブジェクトである場合、3D場面のイルミネーションが設定される。描画3Dオブジェクトが検出される場合、3Dモデルはイルミネーションによって照らされるように描画される。この方法はまた、グループオブジェクトによって収集されたオブジェクトのグループにグループ演算を実行することもできる。


【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般にコンピュータグラフィックスの分野に関する。より詳細には、本発明は、3次元場面グラフィックスのためのアプリケーションプログラミングインターフェースに関する。
【背景技術】
【0002】
コンピュータシステム上のグラフィックスにアクセスする従来のモデルは限界に達しつつあり、これは、メモリおよびバス速度が、メインプロセッサおよび/またはグラフィックスプロセッサの進歩に追いついていないことに1つの要因がある。一般に、ビットマップを用いたフレームの準備のための現在のモデルは、複雑なグラフィックスエフェクトが望まれるときにハードウェアのリフレッシュレートに追いつくために、膨大な量のデータ処理を必要とする。結果として、複雑なグラフィックスエフェクトが従来のグラフィックスモデルを用いて試みられるとき、視覚エフェクトが知覚される結果となる変化を次のフレームに対して適時完了するのではなく、この変化が異なるフレームに亘って追加され、視覚的に望ましくない結果を引き起こす場合がある。
【0003】
さらに、3次元(3D)グラフィックスを2次元(2D)合成システムに導入して、2D画像および3D場面を有する混合場面を表示することによって、この問題は悪化される。このような混合システムの実施における問題の中には、3Dモデルのためのプログラムオブジェクトをどのように定義するかがある。このプログラムオブジェクトはどのように編成されるべきであるだろうか。
【0004】
これらの検討事項およびその他に関して、本発明は作られた。
【0005】
【特許文献1】VISUAL AND SCENE GRAPH INTERFACEという名称の関連特許出願
【発明の開示】
【発明が解決しようとする課題】
【0006】
上記および他の問題は、コンピュータプログラムオブジェクトに適用されて、ツリー階層を構築し、3Dモデルの3次元(3D)場面をレンダリングするコンピュータデータ構造によって解決される。ツリー階層内のルートオブジェクトは、3D場面のためのオブジェクトを収集する。ツリー階層内のグループオブジェクトは、ツリー階層内の他のグループオブジェクトおよび描画オブジェクトを収集し、グループオブジェクトによって収集された描画オブジェクトに演算するグループ演算を定義する。ツリー階層内のライトオブジェクトは、3Dモデルを3D場面内でレンダリングする際に使用されるイルミネーションを定義し、1つまたは複数の描画3Dオブジェクトは、3Dモデルを3D場面内で描画するための演算を定義する。
【課題を解決するための手段】
【0007】
本発明の他の態様によれば、本発明は、合成システムによってレンダリングされた3次元(3D)モデルの2次元(2D)ビューを描画するための、コンピュータプログラムオブジェクトの階層を処理するための方法に関する。この方法は、オブジェクトの3D場面ツリー階層の枝をトラバースして、グループオブジェクトおよびリーフオブジェクトを処理する。この方法は、次の未処理オブジェクトがリーフオブジェクトのグループオブジェクトであるか否かを検出する。それがリーフオブジェクトである場合、この方法は、このリーフオブジェクトがライトオブジェクトであるか、描画3Dオブジェクトであるかを検出する。リーフオブジェクトがライトオブジェクトである場合、3D場面のイルミネーションが設定される。描画3Dオブジェクトが検出される場合、3Dモデルはイルミネーションによって照らされるように描画される。この方法はまた、グループオブジェクトによって収集されたオブジェクトのグループにグループ演算を実行することもできる。
【0008】
さらに他の態様によれば、本発明は、モデル3Dオブジェクトによって定義された3Dモデルの3次元(3D)場面を作成するための、アプリケーションプログラムインターフェースに関する。このインターフェースは、1つまたは複数のグループオブジェクトおよび1つまたは複数のリーフオブジェクトを有する。グループオブジェクトは、他のグループオブジェクトおよび/またはリーフオブジェクトを含むか、あるいは収集する。リーフオブジェクトは、描画オブジェクトであってもイルミネーションオブジェクトであってもよい。グループオブジェクトは、それらのグループ内で収集されたオブジェクトを変換するための変換演算を有することができる。描画オブジェクトは、3D場面の3Dモデルを描画するための命令、または、2D画像を3Dモデル上で描画するための命令を定義する。イルミネーションオブジェクトは、3Dモデルを3D場面内で照らすライトの種類および方向を定義する。
【0009】
本発明を、コンピュータプロセス、コンピューティングシステムとして、または、コンピュータプログラム製品もしくはコンピュータ読取り可能な媒体などの製品として実施することができる。コンピュータ読取り可能な媒体は、コンピュータシステムによって読取り可能であり、コンピュータプロセスを実行するための命令のコンピュータプログラムをエンコードする、コンピュータ記憶媒体にすることができる。コンピュータ読取り可能な媒体はまた、コンピューティングシステムによって読取り可能であり、コンピュータプロセスを実行するための命令のコンピュータプログラムをエンコードする、キャリア上の伝播信号であってもよい。
【0010】
本発明を特徴付けるこれらおよび様々な他の特徴ならびに利点は、以下の詳細な説明を読み、関連する図面を見直すことから明らかになるであろう。
【発明を実施するための最良の形態】
【0011】
図1は、本発明の一実施形態による、Model 3D APIを実装するためのコンピュータプログラムオブジェクトのアーキテクチャを例示する。Model3Dオブジェクト10は、ルートまたは抽象オブジェクトである。ルートオブジェクトに関係付けられた子である4つの可能なモデル3Dオブジェクトがある。これらの3つのオブジェクトは、Primitive3Dオブジェクト12、Visual Model3Dオブジェクト14、およびLightオブジェクト16であり、このアーキテクチャではリーフオブジェクトである。Model3DGroupオブジェクト20は、リーフオブジェクトまたは他のグループオブジェクトのための、ツリー内の収集ノードであり、Transform3Dオブジェクト18も含む。Transform3Dオブジェクトは、それに関連付けられた変換オブジェクトの階層を有する。
【0012】
Primitive3Dオブジェクトは、メッシュ情報26およびマテリアル情報28を含み、これらの情報もまたオブジェクトの階層を参照または示して、Primitive3Dオブジェクト12によって描画される3Dモデルの定義を支援することができる。Visual Model3Dオブジェクト14は、3D場面に組み込むための2D画像を定義する。Lightオブジェクト16は、3D場面用のイルミネーションを定義し、様々な照明状態を定義するためのオブジェクトの階層を有する。これらのすべてのオブジェクトは以下で、Model 3D API定義において定義される。
【0013】
図1のオブジェクトは、モデル3D場面ツリー、すなわち、3D場面をレンダリングするためのモデル3Dオブジェクトのツリー階層を構築するために使用される。3D場面ツリーは、visual 3Dオブジェクト22、または描画コンテキスト25を有するvisual 2Dオブジェクトのいずれかから、Model3Dルートオブジェクト10において入力される。Visual 3Dオブジェクト22、および、Visual 2Dオブジェクト24の描画コンテキスト25は、Model3Dルートオブジェクト10およびcameraオブジェクト32を示すポインタを含む。visual 3Dオブジェクトのポインタ33は、model3Dルートオブジェクト10を示す。visual 3Dオブジェクトのポインタ34は、cameraオブジェクト32を示す。visual 2Dオブジェクト24の描画コンテキスト25内に含まれたポインタ31は、model3Dルートオブジェクト10を示す。visual 2Dオブジェクト24の描画コンテキスト25内に含まれたポインタ35は、cameraオブジェクト32を示す。
【0014】
cameraオブジェクト32は、3D場面を表示するカメラの視点またはアイポイントの位置を定義する。cameraオブジェクト32は、cameraオブジェクトの階層を有し、この階層には、projection cameraオブジェクト39、perspective cameraオブジェクト36、orthogonal cameraオブジェクト37およびMatrix3D cameraオブジェクト38が含まれる。これらの各cameraオブジェクトは以下で、Model3D API定義において定義される。
【0015】
後述の図6は、図1のモデル3Dオブジェクトをビルディングブロックとして使用して構築された、3D場面ツリーの一実施例である。図6からの3D場面をレンダリングするための演算フローを、以下で図7を参照して説明する。本発明を実施するための例示的動作ハードウェアおよびソフトウェア環境をこのとき、図2ないし5を参照して説明する。
【0016】
(例示的オペレーティング環境)
図2に、本発明を実施することができる適切なコンピューティングシステム環境100の一実施例を示す。コンピューティングシステム環境100は、適切なコンピューティング環境の単なる一実施例でしかなく、本発明の使用または機能性の範囲についてのいかなる限定をも示唆するように意図されない。コンピューティング環境100は、例示的オペレーティング環境100に例示するコンポーネントのいずれか1つ、またはそれらの組合せに関係するいかなる依存性または要件も有するように解釈されるべきではない。
【0017】
本発明は、多数の他の汎用または専用コンピューティングシステム環境または構成と共に動作可能である。本発明と共に使用するために適切である可能性のある、周知のコンピューティングシステム、環境および/または構成の例には、これに限定されないが、パーソナルコンピュータ、サーバーコンピュータ、ハンドヘルドまたはラップトップ装置、タブレット装置、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブルなコンシューマエレクトロニクス、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、上記のシステムまたは装置のいずれかを含む分散コンピューティング環境などが含まれる。
【0018】
本発明を、一般にコンピュータによって実行されるプログラムモジュールなど、コンピュータ実行可能な命令に関連して説明することができる。一般に、プログラムモジュールには、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。これらは、特定のタスクを実行し、または特定の抽象データ型を実施する。また、本発明を分散コンピューティング環境において実施することもできる。この環境では、タスクが、通信ネットワークを通じてリンクされるリモート処理装置によって実行される。分散コンピューティング環境では、プログラムモジュールは、メモリ記憶装置を含む、ローカルおよびリモートのコンピュータ記憶媒体内に位置することができる。
【0019】
図2を参照すると、本発明を実施するための例示的なシステムは、コンピュータ110の形態における汎用コンピューティング装置を含む。コンピュータ110のコンポーネントには、これに限定されないが、処理装置120、システムメモリ130、および、システムメモリを含む様々なシステムコンポーネントを処理装置120に結合するシステムバス121が含まれる場合がある。システムバス121をいくつかの種類のバス構造のいずれにすることもでき、これらのバス構造には、様々なバスアーキテクチャのいずれかを使用するメモリバスまたはメモリコントローラ、周辺バスおよびローカルバスが含まれる。限定ではなく例として、このようなアーキテクチャには、ISA(業界標準アーキテクチャ)バス、MCA(マイクロチャネルアーキテクチャ)バス、EISA(拡張ISA)バス、VESA(Video Electronics Standards Association)ローカルバス、AGP(Accelerated Graphics Port)バス、および、メザニンバスとしても知られるPCI(Peripheral Component Interconnect)バスが含まれる。
【0020】
コンピュータ110は通常、様々なコンピュータ読取り可能な媒体を含む。コンピュータ読取り可能な媒体は、コンピュータ110によってアクセスすることができるいかなる使用可能な媒体にすることもでき、揮発性および不揮発性の媒体、ならびに取り外し可能および固定の媒体が含まれる。例として、限定ではなく、コンピュータ読取り可能な媒体は、コンピュータ記憶媒体および通信媒体を含むことができる。コンピュータ記憶媒体には、揮発性および不揮発性、取り外し可能および固定の媒体が含まれ、これらの媒体はコンピュータ読取り可能な命令、データ構造、プログラムモジュールまたは他のデータなど、情報の格納のためのいずれかの方法または技術において実装される。コンピュータ記憶媒体には、それだけに限定されないが、RAM、ROM、EEPROM、フラッシュメモリもしくは他のメモリ技術、CD−ROM、デジタル多用途ディスク(DVD)もしくは他の光ディスク記憶、磁気カセット、磁気テープ、磁気ディスク記憶もしくは他の磁気記憶装置、または、所望の情報を格納するために使用することができ、コンピュータ110によってアクセスすることができる他のいかなる媒体もが含まれる。通信媒体は通常、コンピュータ読取り可能な命令、データ構造、プログラムモジュールまたは他のデータを、搬送波または他の移送メカニズムなどの変調データ信号において実施し、いかなる情報配信媒体をも含む。「変調データ信号」という用語は、信号内の情報をエンコードするような方法でその特性の1つまたは複数が設定または変更されている信号を意味する。限定ではなく例として、通信媒体には、有線ネットワークまたは直接有線接続などの有線媒体、ならびに、音響、RF、赤外線および他の無線媒体などの無線媒体が含まれる。上記のいずれの組合せも、コンピュータ読取り可能な媒体の範囲内に含まれるべきである。
【0021】
システムメモリ130は、読み取り専用メモリ(ROM)131およびランダムアクセスメモリ(RAM)132など、揮発性および/または不揮発性メモリの形態におけるコンピュータ記憶媒体を含む。基本入出力システム133(BIOS)は、起動中など、コンピュータ110内の複数の要素の間で情報を転送する助けとなる基本ルーチンを含み、通常はROM131に格納される。RAM132は通常、処理装置120によって即時アクセス可能および/または現在演算中であるデータおよび/またはプログラムモジュールを含む。限定ではなく例として、図2に、オペレーティングシステム134、アプリケーションプログラム135、他のプログラムモジュール136およびプログラムデータ137を例示する。
【0022】
コンピュータ110はまた、他の取り外し可能/固定の、揮発性/不揮発性のコンピュータ記憶媒体も含むことができる。単に例として、図2に、固定の、不揮発性の磁気媒体に対する読み書きを行うハードディスクドライブ141、取り外し可能な、不揮発性磁気ディスク152に対する読み書きを行う磁気ディスクドライブ151、および、CD ROMまたは他の光媒体など、取り外し可能な、不揮発性の光ディスク156に対する読み書きを行う光ディスクドライブ155を例示する。例示的なオペレーティング環境で使用することができる他の取り外し可能/固定の、揮発性/不揮発性のコンピュータ記憶媒体には、これに限定されないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートRAM、ソリッドステートROMなどが含まれる。ハードディスクドライブ141は、通常、システムバス121にインターフェース140などの固定のメモリインターフェースを通じて接続される。磁気ディスクドライブ151および光ディスクドライブ155は、通常、システムバス121にインターフェース150などの取り外し可能なメモリインターフェースによって接続される。
【0023】
上述し、および図2に例示したドライブおよびそれらの関連付けられたコンピュータ記憶媒体は、コンピュータ110用のコンピュータ読取り可能な命令、データ構造、プログラムモジュールおよび他のデータの記憶を提供する。図2では、例えば、ハードディスクドライブ141は、オペレーティングシステム144、アプリケーションプログラム145、他のプログラムモジュール146およびプログラムデータ147を格納するものとして例示される。これらのコンポーネントを、オペレーティングシステム134、アプリケーションプログラム135、他のプログラムモジュール136およびプログラムデータ137と同じものにも異なるものにもすることができることに留意されたい。オペレーティングシステム144、アプリケーションプログラム145、他のプログラムモジュール146およびプログラムデータ147には異なる番号を与え、少なくとも、それらが異なるコピーであることが例示される。ユーザーは、コマンドおよび情報をコンピュータ110へ、タブレット(電子デジタイザ)164、マイクロフォン163、キーボード162、および、一般にマウス、トラックボールまたはタッチパッドと呼ばれるポインティングデバイス161などの入力装置を通じて入力することができる。他の入力装置(図示せず)には、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナなどが含まれる場合がある。これらおよび他の入力装置は、多くの場合、システムバスに結合されるユーザー入力インターフェース160を通じて処理装置120へ接続されるが、パラレルポート、ゲームポートまたはユニバーサルシリアルバス(USB)など、他のインターフェースおよびバス構造によって接続することができる。モニタ191または他の種類の表示装置もまたシステムバス121へ、ビデオインターフェース190などのインターフェースを介して接続される。モニタ191をまた、タッチスクリーンパネル193などと統合することもでき、タッチスクリーンパネル193などは、タッチスクリーンインターフェース192などのインターフェースを介してコンピュータシステム110に手書きするなど、デジタル化された入力を入力することができる。モニタおよび/またはタッチスクリーンパネルは、コンピューティング装置110がタブレット型のパーソナルコンピュータ内などに組み込まれたハウジングに、物理的に結合されることができ、タッチスクリーンパネル193は、本質的にタブレット164としての機能を果たす。加えて、コンピューティング装置110などのコンピュータはまた、スピーカ195およびプリンタ196など、出力周辺インターフェース194などを通じて接続することができる他の周辺出力装置を含むこともできる。
【0024】
コンピュータ110は、ネットワーク環境において、リモートコンピュータ180など、1つまたは複数のリモートコンピュータへの論理接続を使用して操作することができる。リモートコンピュータ180は、パーソナルコンピュータ、サーバー、ルーター、ネットワークPC、ピア装置または他の共通ネットワークノードにすることができる。リモートコンピュータ180は、通常、コンピュータ110に関連して上述した要素の多数またはすべてを含むが、メモリ記憶装置181のみが図2において例示されている。図2に示す論理接続には、ローカルエリアネットワーク(LAN)171およびワイドエリアネットワーク(WAN)173が含まれるが、他のネットワークが含まれる可能性もある。このようなネットワーキング環境は、オフィス、企業規模のコンピュータネットワーク、イントラネットおよびインターネットにおいて一般的である。
【0025】
LANネットワーキング環境において使用するとき、コンピュータ110は、LAN171へ、ネットワークインターフェースまたはアダプタ170を通じて接続される。WANネットワーキング環境において使用するとき、コンピュータ110は、通常、モデム172、またはインターネットなどのWAN173を介して通信を確立するための他の手段を含む。モデム172を内部または外部にすることができ、システムバス121へ、ユーザー入力インターフェース160または他の適切なメカニズムを介して接続することができる。ネットワーク環境では、コンピュータ110に関連して示したプログラムモジュールまたはその一部を、リモートメモリ記憶装置に格納することができる。限定ではなく例として、図2に、リモートアプリケーションプログラム185をメモリ装置181上に存在するものとして例示する。図示のネットワーク接続は例示的であり、複数のコンピュータの間で通信リンクを確立する他の手段を使用することができることは理解されよう。
【0026】
(ビジュアルツリー階層を処理するためのソフトウェア環境)
図3は、その中でビジュアルツリーを処理することができる、汎用階層化アーキテクチャ200を表す。図3に表すように、プログラムコード202(例えば、アプリケーションプログラムまたはオペレーティングシステムコンポーネントなど)を、1つまたは複数の様々な方法でグラフィックスデータを出力するように開発することができる。これらの方法には、イメージング204を介すること、ベクトルグラフィック要素206を介すること、および/または、本発明の一態様による、ビジュアルアプリケーションプログラミングインターフェース(API)レイヤ212に直接出されたファンクション/メソッドコールを介することが含まれる。一般に、イメージング204は、プログラムコード202に画像、例えばビットマップを読み込み、編集し、およびセーブするための機構を提供する。後述のように、これらの画像を、システムの他の部分によって使用することができ、プリミティブ描画コードを使用して画像を直接描画するための方法もある。ベクトルグラフィックス要素206は、オブジェクトモデルの残りとの整合性を有して、グラフィックスを描画するためのもう1つの方法を提供する(後述)。ベクトルグラフィック要素206を、マークアップ言語を介して作成することができ、要素/プロパティシステム208およびプレゼンタシステム210はこれを解釈して、ビジュアルAPIレイヤ212への適切な呼び出しを行う。
【0027】
グラフィックスレイヤアーキテクチャ200は、高レベル合成およびアニメーションエンジン214を含む。高レベル合成およびアニメーションエンジン214は、キャッシングデータ構造216を含み、あるいはそうでない場合はキャッシングデータ構造216に関連付けられる。キャッシングデータ構造216は、シーングラフを含む。このシーングラフは、後述のように定義済オブジェクトモデルに従って管理される、階層的に配列されたオブジェクトを備える。一般に、ビジュアルAPIレイヤ212は、プログラムコード202(およびプレゼンタシステム210)に、オブジェクトの作成、データをオブジェクトに提供するためのオブジェクトの開閉などを行う能力を含む、キャッシングデータ構造216へのインターフェースを提供する。すなわち、高レベル合成およびアニメーションエンジン214は、統一された媒体APIレイヤ212を公開し、それによって開発者は、グラフィックス情報を表示するためにグラフィックスおよび媒体についての意図を表現し、下にあるプラットフォームに十分な情報を提供して、プラットフォームがハードウェアの使用をプログラムコードに合わせて最適化できるようにすることができる。例えば、下にあるプラットフォームは、キャッシング、リソースネゴシエーション、および媒体統合を担うようになる。
【0028】
高レベル合成およびアニメーションエンジン214は、命令ストリームおよび場合によっては他のデータ(例えば、ビットマップへのポインタ)を、高速の低レベル合成およびアニメーションエンジン218に渡す。本明細書で使用されるとき、「高レベル」および「低レベル」という用語は、他のコンピューティングシナリオで使用されるものに類似しており、一般に、あるソフトウェアコンポーネントがより高いコンポーネントに対して低いほど、そのコンポーネントはハードウェアにより近い。したがって、例えば、高レベル合成およびアニメーションエンジン214から送信されたグラフィックス情報は低レベル合成およびアニメーションエンジン218で受信される可能性があり、この情報は、ハードウェア222を含むグラフィックスサブシステムにグラフィックスデータを送信するために使用される。
【0029】
高レベル合成およびアニメーションエンジン214はプログラムコード202と共に、シーングラフを構築して、プログラムコード202によって提供されたグラフィックス場面を表現する。例えば、描画されるべき各項目を描画命令と共に読み込むことができ、これをシステムはシーングラフデータ構造216内にキャッシュすることができる。後述するように、このデータ構造216および何が描画されるかを指定するための、いくつかの様々な方法がある。さらに、高レベル合成およびアニメーションエンジン214はタイミングおよびアニメーションシステム220と統合して、宣言型(または他の)アニメーション制御(例えば、アニメーション間隔)およびタイミング制御を提供する。アニメーションシステムは、アニメート値が本質的にシステム内のいかなる場所にも渡されることを可能にし、これらの場所には例えば、要素プロパティレベル208において、ビジュアルAPIレイヤ212の内部、および、他のリソースのいずれかの内部が含まれる。タイミングシステムは、要素およびビジュアルレベルで公開される。
【0030】
低レベル合成およびアニメーションエンジン218は、場面の合成、アニメートおよびレンダリングを管理し、次いで場面はグラフィックスサブシステム222に提供される。低レベルエンジン218は、多数のアプリケーションの場面のためのレンダリングを構成し、レンダリングコンポーネントと共に、場面へのグラフィックスの実際のレンダリングを実施する。しかし、時には、レンダリングの一部がより高いレベルで起こることが必要および/または有利である場合があることに留意されたい。例えば、より低いレイヤは、多数のアプリケーションからの要求を提供するが、より高いレイヤは、アプリケーションごとにインスタンス化され、それにより、イメージング機構204を介して、時間のかかる、またはアプリケーション特有のレンダリングをより高いレベルで実行し、ビットマップへの参照をより低いレイヤに渡すことが可能である。
【0031】
図4および5は、visualと呼ばれるベースオブジェクトを含む、シーングラフの例300および400をそれぞれ示す。一般に、visualは、仮想面をユーザーに表現するオブジェクトを備え、ビジュアル表現をディスプレイ上で有する。図4に表すように、トップレベル(またはルート)visual302は、visual managerオブジェクト304に接続され、visual managerオブジェクト304はまた(例えば、ハンドルを介して)、ウィンドウ(HWnd)306、または、その中でグラフィックデータがプログラムコードのために出力される類似の単位との関係も有する。VisualManager304は、そのウィンドウ306へのトップレベルvisual(およびそのvisualのいかなる子も)の描画を管理する。描画するため、visual manager304はシーングラフを、ディスパッチャ308によってスケジュールされたように処理(例えば、トラバースまたは送信)し、グラフィックス命令および他のデータを、その対応するウィンドウ306のための低レベルコンポーネント218(図3)に提供する。シーングラフ処理は通常、ディスパッチャ308によって、低レベルコンポーネント218および/またはグラフィックスサブシステム222のリフレッシュレートより比較的遅いレートでスケジュールされるようになる。図4は、トップレベル(ルート)visual302より階層的に低く配列されたいくつかの子visual310〜315を示し、子visualのいくつかは、描画コンテキスト316、317(それらの一時的性質を表すために破線のボックスとして図示)を介して、例えば描画プリミティブおよび他のvisualを含む、関連付けられた命令リスト318および319を取り込んでいるように表現される。これらのvisualはまた他のプロパティ情報を含む場合もあり、これを以下のvisualクラスの例に示す。
【0032】
【表1】

【0033】
表1に示すように、visualは、transform、clip、opacity、および場合によっては、設定することができ、かつ/またはgetメソッドを介して読むことができる他のプロパティを規定することによってサービスを提供する。加えて、visualは、それがどのようにヒットテストに参加するかを制御するフラグを有する。Showプロパティは、visualを表示する/隠すために使用され、例えば、偽であるときにはvisualは不可視であり、そうでない場合はvisualは可視である。
【0034】
transformプロパティによって設定された変換は、visualのサブグラフのための座標系を定義する。変換前の座標系は変換前座標系と呼ばれ、変換後の座標系は変換後座標系と呼ばれ、すなわち、変換を有するvisualは、親として変換ノードを有するvisualに相当する。ビジュアルツリーおよび合成システムのより完全な説明は、上記で相互参照されたVISUAL AND SCENE GRAPH INTERFACEという名称の関連特許出願に含まれる。
【0035】
(モデル3D API処理)
図6は、3D場面、この場合はオートバイの2次元ビューをレンダリングするためのモデル3D APIにより構築された、例示的な3D場面ツリー階層を示す。このツリーは、モデル3D API内の様々な構造データオブジェクトの使用を例示する。オートバイのためのツリーの抽象またはルートノードは、オブジェクト602である。この抽象オブジェクトは4つの子、すなわちライトオブジェクト604、ボディグループオブジェクト606、ホイールグループオブジェクト608、および計器Visual Model3Dオブジェクト610を有する。
【0036】
ボディグループオブジェクトは、オートバイのボディを構成する3つの子を有し、これらはフレームプリミティブオブジェクト612、エンジンプリミティブオブジェクト614およびガスタンクプリミティブオブジェクト616である。これらの各プリミティブオブジェクトは、オブジェクトに由来するオートバイのボディ要素を描画するようになる。ホイールグループオブジェクト608は、フロントホイールグループオブジェクト618およびリアホイールグループオブジェクト620を収集する。ホイールプリミティブオブジェクト624は、ホイールの3Dモデルを描画する。フロントホイールグループオブジェクト618は、ホイールプリミティブオブジェクト624によって描画されるべきホイールをフロントホイールに変換するための、3D変換619を有する。同様に、リアホイールグループオブジェクト620は、ホイールプリミティブオブジェクト624によって描画されるべきホイールをリアホイールに変換するための、3D変換621を有する。加えて、ホイールグループオブジェクト608に含まれる3D変換622がある。変換オブジェクト622は例えば、フロントプリミティブオブジェクト618およびリアプリミティブオブジェクト620の実行を変換して、ホイールをアニメーション効果のために回転させることができる。
【0037】
モデル3Dオブジェクトのこの例示的ツリーを、図7に例示する論理演算の演算フローによって処理することができる。本発明の実施形態の論理演算は、(1)コンピューティングシステム上で実行するコンピュータ実装動作またはプログラムモジュールのシーケンスとして、かつ/または(2)コンピューティングシステム内で相互接続されたマシン論理回路または回路モジュールとして実施される。この実施は、本発明を実施するコンピューティングシステムのパフォーマンス要件に依存する、選択できることである。したがって、本明細書で説明する本発明の実施形態を構成する論理演算は、演算、構造装置、動作またはモジュールと様々に呼ばれる。これらの演算、構造装置、動作およびモジュールをソフトウェア内、ファームウェア内、専用デジタル論理内、およびそのいかなる組合せにおいても、本明細書に付属の特許請求の範囲内で列挙されるような本発明の趣旨および範囲から逸脱することなく実装することができることは、当業者には理解されよう。
【0038】
図7で、演算フローはカメラビュー設定演算702で開始する。カメラ位置は、visual 3Dオブジェクト22(図1)によって提供される。トラバース演算704は、オブジェクトに達するまでツリーの枝を下がるように探索する。通常は、ツリーを下がるように左から右に向かって探索する。グループテスト演算706は、オブジェクトがグループオブジェクトであるか、リーフオブジェクトであるかを検出する。それがグループオブジェクトである場合、演算フローはグループオブジェクト演算処理708に枝分かれする。演算708は、オブジェクト内に含まれた任意のグループ演算を処理するようになる。変換3D演算は、グループ演算の例である。さらなるオブジェクトテスト演算710は、ツリー内にさらにオブジェクトがあるか否かを検出し、少なくとももう1つのオブジェクトがある場合、フローをトラバース演算704に戻す。
【0039】
次のオブジェクトがリーフオブジェクトである場合、演算フローはグループテスト演算706からライトオブジェクトテスト演算712に枝分かれする。リーフオブジェクトがライトオブジェクトである場合、演算フローは次いで、ライトオブジェクトテスト演算712からイルミネーション設定演算714へのYESに枝分かれする。演算714はライトオブジェクトを処理して、3D場面のためのイルミネーションを設定する。次いで、演算フローはさらなるリーフオブジェクトテスト演算716に進む。リーフオブジェクトがライトオブジェクトでない場合、演算フローはプリミティブ/ビジュアルモデルオブジェクトテスト演算718に移動する。リーフオブジェクトがプリミティブオブジェクトである場合、演算フローはプリミティブ描画演算720に枝分かれし、その後、さらなるリーフオブジェクトテスト演算716に枝分かれする。プリミティブ描画演算720は、プリミティブオブジェクトによって指定された3Dモデルを描画するようになる。リーフオブジェクトがVisual Model3Dオブジェクトである場合、演算フローはビジュアルモデル描画演算722に枝分かれし、その後、さらなるリーフオブジェクトテスト演算716に枝分かれする。ビジュアルモデル描画演算722は、Visual Model3Dオブジェクトによって指定されたビジュアルモデルを描画するようになる。
【0040】
グループ内にさらにリーフオブジェクトがある場合、さらなるリーフオブジェクトテスト演算716は、演算フローをリーフトラバース演算724に枝分かれさせる。トラバース演算724は、同じグループオブジェクトの下の次の子へと、ツリーを歩く。ライトオブジェクトテスト演算712およびプリミティブ/ビジュアルモデルテスト演算718は、次のリーフがライトオブジェクトであるか、プリミティブオブジェクトであるか、ビジュアルモデルオブジェクトであるかを検出する。検出されたリーフオブジェクトは、上述の繰り返しのように処理される。同じグループオブジェクトの子である、すべてのリーフオブジェクトが処理された後、演算フローはテスト演算716からさらなるオブジェクトテスト演算710へのNOに枝分かれする。さらに処理するべきオブジェクトがある場合、演算フローはトラバース演算704に戻る。そうでない場合、モデル3Dツリーは処理されており、演算フローは戻り726を通過して、3D場面の処理の呼び出し側に戻る。
【0041】
図6の3D場面ツリーの実施例では、最初に到達されたオブジェクトはライトオブジェクトである。以下のModel 3D API定義において定義されるように、ライトオブジェクトは、3D場面を照らすライト型を指定する。最初のリーフノードであるライトオブジェクトに到達するとき、グループオブジェクトテスト演算706は、そのオブジェクトがリーフオブジェクトであることを検出し、演算フリーはライトオブジェクトテスト演算708に枝分かれする。ライトオブジェクト604はテスト演算708によって検出され、イルミネーション設定演算714は、ライトオブジェクトによって実行されて、3D場面のイルミネーションが設定される。次いで、フローは、さらなるリーフオブジェクトテスト演算716およびさらなるオブジェクトテスト演算710を通じて、トラバース演算704に戻る。
【0042】
トラバース演算704は、図6のツリーを下がるように、ボディグループオブジェクト606まで歩く。このとき、グループテスト演算はフローをグループ演算処理708に枝分かれさせて、そのボディグループ用であるグループオブジェクト606内のいかなる演算をも実行する。次いで、フローは再度トラバース演算704に戻り、トラバース演算は枝をボディグループオブジェクト606からフレームプリミティブオブジェクト602へ、下がるように歩く。フレームプリミティブオブジェクト602は、上述のように、演算フローがテスト演算706、712および718を通じて枝分かれした後、プリミティブ描画演算720によって処理されるようになる。エンジンプリミティブオブジェクト614およびガスタンクプリミティブオブジェクト616は、演算フローがさらなるリーフオブジェクトテスト716を通じてループバックし、次のリーフオブジェクト演算724ならびにテスト演算712および718にトラバースするとき、処理されるようになる。ボディグループオブジェクトノード606からのすべてのリーフが処理されるとき、トラバース演算704はツリーを、ホイールグループオブジェクト608へと探索する。
【0043】
ホイールグループオブジェクトおよびその子の処理は、ボディグループオブジェクトおよびその子の処理と同じであるが、ただし、ホイールボディグループオブジェクト608はTransform3Dオブジェクト622を含む。Transform3Dオブジェクトは、オートバイの画像のホイールをアニメーションにするために使用することができる。ホイールボディグループオブジェクト608を処理するとき、演算フローは、Transform3Dオブジェクト622を検出すると、グループオブジェクトテスト演算706からグループ演算処理708に枝分かれするようになる。グループ演算処理708は、オブジェクト622の変換演算を実行して、オートバイのホイールを回転させるようにする。
【0044】
図6の例示的な3D場面ツリー内で処理される最後のオブジェクトは、計器Visual Model3Dオブジェクト610である。ツリーのホイールグループブランチが処理された後、トラバース演算704はツリーを、計器オブジェクト610へと探索するようになる。図7の演算フローでは、フローは、計器Visual Model3Dオブジェクト610を検出するとき、テスト演算706、712および718を通じて、ビジュアルモデル描画演算722に移動する。ビジュアルモデル描画演算722は、オブジェクト610によって指定されたビジュアルモデルを描画する。これで、図7の演算による、図6の3D場面ツリーの処理が完了する。
【0045】
(Model 3D API定義)
以下のAPIは、Model 3Dオブジェクトについて定義される。
【0046】
図1のオブジェクト22など、Visual3Dオブジェクトは、本質的にちょうど以下の通りである。
・ライトを含む3Dの集合(レンダリング命令/シーングラフ/メタファイル)
・その場面の2D投影を定義するためのカメラ、
・投影をマッピングするためのローカルの座標空間内の長方形の2Dビューポート、および
・アンチエイリアシングスイッチ、フォグスイッチなどのような他のアンビエントパラメータ。
【0047】
(3Dへのレンダリング)
2Dのように、レンダリングは、呼び出しが行われるところのDrawingContextを介して起こる。例えば、2Dでは、以下のようになる。
【0048】
【表2】

【0049】
2Dとの一貫性を保つために、3Dにおける類似のモデルは以下のようになる。
【0050】
【表3】

【0051】
このレンダリングのモデルは、保存モード3Dビジュアル(「命令」が単に保存される場合)、および、即時モード3Dビジュアル(レンダリングが直接起こり、カメラを前もって設置する必要がある場合)の両方について、うまくいくことに留意されたい。実際に、保存モードの場合、内部で起こることは、3Dモデリング階層が構築および保存されていることである。別法として、即時モードの場合、このようなことは起こっておらず、命令が直接発行されており、コンテキストスタック(例えば、変換用)が維持されている。
【0052】
(サンプルコード)
これは、3D Visual APIによるプログラミングのフレーバを示すための一実施例である。
【0053】
この実施例の単純に作成されたVisual3Dは、それにレンダリングするための描画コンテキストをグラブし、プリミティブおよびライトをそれにレンダリングし、カメラを設定し、visualを、制御のvisualの子に追加する。
【0054】
【表4−1】

【0055】
【表4−2】

【0056】
(モデリングAPI)
上記は、描画「命令」がコンテキストに発行される「命令的レンダリング」使用スタイルを示す。これは宣言的使用ではなく、要素/マークアップセクションに達するとき、この命令的手法が宣言マークアップのために適切ではないことがわかるであろう。
【0057】
したがって、ブラシ、ペン、ジオメトリ、パスなどにより、3D「リソース」を、2D内に存在するように構築および使用する宣言的方法がある。
【0058】
そのために、ユーザーが、3D命令ストリームに入るものを構築することができる、いくつかの型が導入され、コンテキストを使用するのではなく、構築されたオブジェクトをVisual3Dに設定することができる。
【0059】
例えば、上記のDrawing3DContextベースのサンプルコードを、以下のように書き換えることができる。
【0060】
【表5】

【0061】
ここで、我々は実にモデルを構築しており、次いで、このモデルをVisual3Dに割り当てている。PushTransform/Popのペアは、それ自体で変換およびその下のModelを有するModel3DGroupの構築によって置き換えられる。
【0062】
さらに、このモデリング手法および命令コンテキストに基づく手法の両方を提供する目的は、混乱させることではなく、むしろ以下についての解決法を提供することである。
・要素レベルの宣言マークアップ
・ビジュアル列挙
・シーングラフ効果
・ビジュアルコンテンツの修正可能性
【0063】
(モデリングクラス階層)
図1は、モデリングクラス階層を例示する。モデリングクラスツリーのルートはModel3Dであり、Model3Dは、Visual3Dに付加することができる3次元モデルを表す。最終的に、ライト、メッシュ、(ファイル、リソース、メモリなどから来ることができる).Xファイルストリーム、モデルのグループ、および、3D位置付けされた2Dビジュアルは、すべてモデルである。したがって、以下の階層を有する。
・Model3D
・Model3DGroup−Model3Dのグループを1単位として扱うためのコンテナ
・Primitive3D
・MeshPrimitive3D(mesh,material,hitTestID)
・ImportedPrimitive3D(stream,hitTestID)(.xファイル用)
・Light
・AmbientLight
・SpecularLight
・DirectionalLight
・PointLight
・SpotLight
・VisualModel3D−VisualおよびPoint3およびhitTestIDを有する
Model3Dクラス自体は、以下の演算をサポートする。
・3D境界ボックスを得る。
・Model3DのTransformを得て設定する。
・シェーディングモードなど、他の「ノード」レベルプロパティを得て設定する。
・hitTestObjectを得て設定する。
【0064】
(ビジュアルAPI指定)
最初に、各型について明示的にリストされないが、これらの型のいずれもが以下のメソッドを有することに留意されたい(ここではVector3Dについて示すが、他のあらゆるものにも適用可能)。
【0065】
【表6】

【0066】
また、Changeableから(直接的または間接的に)派生するあらゆる型は、「public new MyType Copy()」メソッドをその上に有することが必要となる。
【0067】
(プリミティブタイプ)
これらのプリミティブ型は単に、このセクションで説明する他の型のサポートにおいて存在する。
【0068】
(Point3D)
Point3Dは、2D Point type System.Windows(登録商標).Pointに直接類似するものである。
【0069】
【表7】

【0070】
TypeConverter指定
【0071】
【表8−1】

【0072】
【表8−2】

【0073】
(Vector3D)
Vector3Dは、2D Vector type System.Windows(登録商標).Vectorに直接類似するものである。
【0074】
【表9】

【0075】
TypeConverter指定
【0076】
【表10】

(Point4D)
Point4Dは第4のwコンポーネントを3Dポイントにアドインし、非アフィンMatrix3Dを通じた変換のために使用される。1の「w」コンポーネントは、Point3Dにトランスレートし、0の「w」コンポーネントは、Vector3Dにトランスレートするので、Vector4Dはない。
【0077】
【表11】

TypeConverter指定
【0078】
【表12】

【0079】
(Quaternion)
Quaternionは、はっきりと、3次元における回転を表す3Dエンティティである。その指数は、平滑で信頼性のある補間を達成するために複数の4元数の間で補間する(および、したがってアニメションにする)ことが可能となる。特定の補間メカニズムは、球面線形補間(またはSLERP)として知られている。
【0080】
Quaternionは、それらのコンポーネント(x、y、z、w)の直接の指定から、または、軸/角度表現として構築することができる。最初の表現は結果として、非正規化された4元数となる場合があり、これについて特定の演算は意味を成さない(例えば、軸および角度の抽出)。
【0081】
Quaternionが構築された後にQuaternionのコンポーネントを設定することはできず、これは、それを行うことにおいて潜在的な曖昧さがあるからである。(例えば、Angleを非正規化されたQuaternion上に設定することに何の意味があるか。)
【0082】
【表13−1】

【0083】
【表13−2】

【0084】
TypeConverter指定
【0085】
【表14】

【0086】
(Matrix3D)
Matrix3Dは、System.Windows(登録商標).Matrixに類似する3Dである。Matrixのように、大部分のAPIはMatrix3Dを取らないが、むしろTransform3Dを取り、これは深い方法でアニメーションをサポートする。
【0087】
3D計算のための行列は4x4行列として表される。MILは行ベクトル構文を使用する。
【0088】
【表15】

【0089】
行列がある点により乗算されるとき、行列はその点を、新しい座標系から以前の座標系へ変換する。
【0090】
変換をいかなるレベルにもネストさせることができる。新しい変換が適用されるときは常に、これは、現在の変換行列上にそれを前から掛ける(pre−multiplying)することと同じである。
【0091】
【表16−1】

【0092】
【表16−2】

【0093】
TypeConverter指定
【0094】
【表17】

【0095】
(Transform3Dクラス階層)
Transform3Dは、2D Transformのように、3D変換の特定の型を表す具象サブクラスを有する抽象ベースクラスである。
【0096】
Transform3Dの特定のサブクラスもまた、アニメーションが入るところである。
【0097】
Transform3Dの全体の階層はこのようになり、これを図8に示す。
Transform3D
----Transform3DCollection
----AffineTransform3D
--------TranslateTransform3D
--------ScaleTransform3D
--------RotateTransform3D
----MatrixTransform3D
(Transform3D)
【0098】
ルートのTransform3Dオブジェクト802は、Transformの特定のクラスを構築するためのある興味深い静的メソッドを有する。このオブジェクトはMatrix3D表現を公開せず、これはこのTransformがそれよりも幅広い可能性があるからであることに留意されたい。
【0099】
【表18−1】

【0100】
【表18−2】

【0101】
Point3D/Vector3Dを取るTransform()メソッドは、変換がアフィンでない場合、例外を引き起こすようになることに留意されたい。
【0102】
(Transform3DCollection)
Transform3D collectionオブジェクト804は、visual 2DにおけるTransformCollectionを正確にまねるようになり、Addメソッドは、上記のCreateメソッドと同じように修正される。
【0103】
【表19】

【0104】
(AffineTransform3D)
Affine Transform3Dオブジェクト806は単に、すべての具象アフィン3D変換(translate、skew、rotate、scale)が派生する元のベースクラスであり、Matrix3Dへの読み取りアクセスを公開する。
【0105】
【表20−1】

【0106】
【表20−2】

【0107】
(TranslateTransform3Dオブジェクト808)
【0108】
【表21】

【0109】
(ScaleTransform3Dオブジェクト812)
【0110】
【表22】

【0111】
(RotateTransform3D)
RotateTransform3Dオブジェクト812は、それを中心に回転するための軸の概念の導入(および、したがって4元数の使用)による、2D回転からの単なる単純マッピングだけではない。
【0112】
【表23−1】

【0113】
【表23−2】

【0114】
ここではQuaternionプロパティのみがアニメメーションにすることが可能であることに留意されたい。一般に、軸/角度のアニメーションはうまく行く傾向がない。4元数をよりよくアニメーションにするために、軸および角度を4元数のベース値から抽出することができる。単に角度を固定軸に対してアニメーションにすることを望む場合、これを指定する容易な方法は、これらの位置を表す2つの4元数を構築し、それらの4元数の間でアニメーションにすることである。
【0115】
(MatrixTransform3D)
MatrixTransform3Dオブジェクト814は、Transform3DをMatrix3Dから直接構築する。
【0116】
【表24】

【0117】
(Transform3D TypeConverter)
Transform3Dタイプのプロパティがマークアップで指定されるとき、プロパティシステムはTransform型コンバータを使用して、文字列表現を適切なTransform派生オブジェクトに変換する。アニメーションにされたプロパティを、この構文を使用して記述する方法はないが、複合プロパティ構文をアニメーション記述のために使用することができる。
【0118】
(構文)
この構文は、2D Transformからモデリングされる。<>は任意選択のパラメータを表す。
【0119】
・matrix(m00 m01 m02 m03 m11...m33)
・translate(tx ty tz)
・scale(sx <sy> <sz> <cx> <cy> <cz>)
・<sy>または<sz>が指定されない場合、これは均等スケールであると仮定される。
【0120】
・<cx><cy><cz>が指定される場合、これらはすべて指定される必要があり、<sx><sy>も同様である。これらはスケーリング中心のために使用される。これらが使用されない場合、中心は0、0、0であると仮定される。
【0121】
・rotate(ax ay az angle <cx> <cy> <cz>)
・ax、ay、azは回転の角度を指定する
・角度は、その軸を通じた角度である
・cx、cy、czが指定されない場合、これは0、0、0であると仮定される。
【0122】
・skew(angleX angleY angleZ <cx> <cy> <cz>)
・cx、cy、czが指定されない場合、これは0、0、0であると仮定される。
【0123】
文法
【0124】
【表25−1】

【0125】
【表25−2】

【0126】
(Visual3D)
図1のVisual3Dオブジェクト22はVisual2Dから派生し、そのように行う際に、以下を含むそのプロパティのすべてを得る。
【0127】
・オパシティ
・2Dジオメトリッククリップ
・2Dブレンドモード
・ヒットテストAPI
・2Dバウンドクエリ
・ビジュアルツリーにおける参加
オパシティ、クリップ、ブレンドモードおよびバウンドのすべては3D場面の2D投影に適用されることに留意されたい。
【0128】
【表26】

【0129】
ViewPortボックスは、Camera/Modelの組合せによって決定された投影が2Dローカル座標空間内のどこにマップするかを確立する。
【0130】
(Drawing3DContext)
Drawing3DContextは実に、2D Drawing Contextに類似しており、Visual3DのModel3DCollectionから、RenderOpen/RenderAppendを介してアクセス可能である。これは命令を内部で保存中であるとしても、即時モードレンダリングコンテキストのような感じである。
【0131】
【表27】

【0132】
これらのDrawing3DContext演算の意味体系の具体的な詳細については、モデリングAPIのセクションを参照されたい。モデリングAPIのために、Drawing3DContextは実際には単に好都合なものである。例えば、DrawImportedPrimitive(ImportedPrimitive3DSource primitiveSource、objectHitTestToken)は単にImportedPrimitive3Dを作成し、これを、現在累積中のModel3Dに追加する(現在累積中のModel3Dは、コンテキストにおいてPush/Popメソッドによって操作される)。
【0133】
DrawModel()は、「コンテキスト」ワールドと「モデリング」ワールドの間のもう1つのクロスオーバーポイントであり、Model3Dがコンテキストに「描画」されることを可能にする。
【0134】
Drawing3DContextからの明示的な「リードバック」はない。これは、それが単にModel3DGroupにそれを支援させているからであり、常にその集合を列挙することができるからである。
【0135】
(モデリングAPI)
これは、これらのクラスのためのパブリックおよび保護されたAPIであり、継承されたメンバを示さない。
【0136】
(Model3D)
図1のModel3Dオブジェクト10は、あらゆるものがそこから構築される抽象モデルオブジェクトである。
【0137】
【表28】

【0138】
(Model3DGroup)
図1のModel3DGroupオブジェクト18は、モデルの組合せを構築し、これらを単位として扱い、任意選択で変換するか、あるいは他の属性をこれらに適用する。
【0139】
【表29】

【0140】
またModel3DGroupは、RenderOpen/Appendをも有し、RenderOpen/Appendは、Drawing3DContextを戻すことに留意されたい。このコンテキストの使用は、Model3DCollection自体を修正する。RenderOpen()とRencerAppend()の間の違いは、RenderOpen()がコレクションを最初にクリアすることである。
【0141】
また、一度にただ1つのDrawing3DContextのみをModel3DGroup上で開くことができ、Drawing3DContextが開かれるとき、アプリケーションはそのModel3DGroupのコンテンツに(読み取りまたは書き込みのために)直接アクセスすることができないことにも留意されたい。
【0142】
(Light階層)
Lightオブジェクトは、Model3Dオブジェクトである。Lightオブジェクトには、Ambient、Positional、DirectionalおよびSpot lightが含まれる。これらは実にDirect3Dライティング群においてモデリングされるが、モデリング階層の一部であるという追加のプロパティを有し、したがって、座標空間変換を受ける。
【0143】
アンビエント、ディフューズおよびスペキュラー色はすべてのライトにおいて提供される。
【0144】
light階層はこのようになり、これをまた図9にも示す。
【0145】
Model3D
----Light(抽象)
--------AmbientLight(具象)
--------DirectionalLight(具象)
--------PointLight(具象)
------------SpotLight(具象)
ベースのlightオブジェクト902クラスは、単に以下を有する抽象クラスである。
【0146】
【表30】

【0147】
(AmbientLight)
Ambient lightオブジェクト904はモデルを、それらの形状にかかわらず、均等に明るくする。
【0148】
【表31】

【0149】
(DirectionalLight)
directional lightオブジェクト906からの指向性ライトは、空間における位置を有しておらず、それらのライトを、それを定義するベクトルによって指定された特定の方向に沿って投影する。
【0150】
【表32】

【0151】
方向が正規化される必要はないが、方向もまたゼロでない大きさを有していなければならない。
【0152】
(PointLight)
point lightオブジェクト908からの定位置ライトは、空間における位置を有し、それらのライトをすべての方向に投影する。ライトの減少は、attenuationおよびrangeプロパティによって制御される。
【0153】
【表33】

【0154】
(SpotLight)
SpotLightは、位置、範囲および減衰を有するので、PointLightから派生するが、ライトの「コーン」を制御するための方向およびパラメータもアドインする。「コーン」を制御するために、outerConeAngle(何ものもこれを越えて照らされない)およびinnerConeAngle(その内部のあらゆるものが完全に照らされる)が指定されなければならない。内部コーンの外側と外部コーンの間のライティングは線形に減少する。(ここで可能性のある混乱の原因は、2つの減少がここで進行中であり、一方が内部コーンの端と外部コーンの間の「角度」であり、他方がライトの位置に対する距離におけるものであり、減衰および範囲によって影響されることである。)
【0155】
【表34】

【0156】
角度は度で指定されることに留意されたい。
【0157】
(Primitive3D)
図1のPrimitive3Dオブジェクト12は、ツリー内のレンダリングの結果となるリーフノードである。具象クラスは、明示的に指定されたメッシュ、ならびに、インポートされたプリミティブ(.xファイル)を取り込む。
【0158】
【表35】

【0159】
(MeshPrimitive3D)
MeshPrimitive3Dは、メッシュおよびマテリアルによるモデリング用である。
【0160】
【表36】

【0161】
MeshPrimitive3Dはリーフジオメトリであり、Meshを含むが、それ自体はMeshではないことに留意されたい。これは、メッシュデータを複製することなく、異なるヒットテストを受ける、異なるマテリアルを有する、複数のMeshPrimitive3Dの間で、Meshを共有することができることを意味する。
【0162】
(ImportedPrimitive3D)
ImportedPrimitive3Dは、取り込まれて適切な内部形式に変換された、外部から獲得されたプリミティブ(潜在的にマテリアルおよびアニメーションを有する)を表す。ImportedPrimitive3Dは、Avalonによって厳格なモデルとして扱われる。これの標準的な例は.Xファイルであり、Xファイルを明示的にインポートするImportedPrimitive3DSourceのサブクラスがある。
【0163】
【表37】

【0164】
ImportedPrimitive3DのためのTypeConverter
.xファイルは場面内に含まれるので、これを表現するための単純なTypeConverterは、以下にようなものになるはずである。
【0165】
【表38】

【0166】
(VisualModel3D)
VisualModel3DはいかなるVisual(定義により、2D)をも取り、これを場面内に入れる。レンダリングされるとき、これはスクリーンに合わせられ、そのサイズは影響を受けないが、カメラから特定のz平面にあるようになる。Visualはインタラクティブなままとなる。
【0167】
【表39】

【0168】
VisualModel3Dのレンダリングは、最初にCenterPointをワールド座標に変換する。これは次いでVisualをピクセルバッファへ、スクリーンに合わせられる方法でレンダリングし、変換されたCenterPointのzは、ビジュアルの中心が配置されるところになる。カメラの動きの下で、VisualModel3Dは常に同じ量のスクリーンリアルエステートを占有するようになり、常に前を向き、ライトなどによって影響を受けないようになる。場面の残りに対するビジュアルのこのカメラの動きの中の固定点は、配置がその点に基づいて起こるので、ビジュアルの中心となる。
【0169】
提供されたVisualは完全にインタラクティブであり、事実上、それを囲むVisual3Dが「親に当たる」(これは、Visualが単一の親しか有することができないのと同然に、所与のVisualをいずれかのVisualModel3Dにおいて一度しか使用することができないことを意味することに留意されたい)。
【0170】
(Mesh3D)
Mesh3Dプリミティブは、プログラム的に構築することができる直接的なトライアングルプリミティブ(インデックス付きおよびインデックスなしの指定を可能にする)である。Mesh3Dプリミティブは位置、標準、色およびテクスチャ情報をサポートし、最後の3つは任意選択であることに留意されたい。メッシュはまた、それが三角形として表示されるべきであるか、線として表示されるべきであるか、点として表示されるべきであるかの選択も可能にする。メッシュはまた、インデックスを解釈するための3つのトポロジもサポートし、これらはトライアングルリスト、トライアングルストリップおよびトライアングルファンである。
【0171】
Mesh3Dによって直接サポートされない頂点フォーマットおよび他のプリミティブ構造では、.xファイルを構築およびインポートすることができる。
【0172】
【表40】

【0173】
MeshPrimitiveTypeは以下のように定義される。
【0174】
【表41】

【0175】
(Meshデータの解釈)
Mesh3Dにおける頂点単位のデータは、Positions、Normals、ColorsおよびTextureCoordinatesに分割される。言うまでもなく、Positionsのみが必要とされる。他のいずれかが提供される場合、これらはPositionsコレクションと正確に同じ長さを有していなければならず、そうでない場合、例外が引き起こされるようになる。
【0176】
Normalsが提供される場合、正規化されると仮定される。正規化が望まれるとき、これらは供給されなければならない。
【0177】
TriangleIndicesコレクションは、メッシュを構成する三角形のための頂点単位の情報を決定するために頂点データに索引付けするメンバを有する。この集合は、MeshPrimitiveTypeの設定に基づいて解釈される。これらの解釈は、Direct3Dにおけるものと正確に同じである。TriangleListでは、TriangleIndices集合内の3つおきの要素が新しい三角形を定義する。TriangleFanでは、インデックス0、1、2が最初の三角形を決定し、次いで後続の各インデックスiが、頂点0、i、i−1によって与えられた新しい三角形を決定する。TriangleStripでは、インデックス0、1、2が最初の三角形を決定し、後続の各インデックスiが、頂点i−2、i−1およびiによって与えられた新しい三角形を決定する。LineList、LineStripおよびPointListは類似の解釈を有するが、レンダリングは、三角形ではなく線および点に関する。
【0178】
TriangleIndicesがヌルである場合、Meshはインデックスなしプリミティブとして実装され、これは、長さnのPositions集合について値0、1、...、n−2、n−1を保持するTriangleIndicesに等しい。
【0179】
(Meshの構築およびデータ複製の回避)
Meshを構築した上で、この実装は、このメッシュを表す最適なD3D構造を作成する。この時点で、実際のCollectionデータ構造を、Mesh実装によってスローして、データの複製を回避することができる。ある他の機構(例えば、Visual3Dモデル階層をトラバースすること)を通じてアクセスされた場合のメッシュの後続のリードバックは、元のデータを保存するのではなく、その上に保持されているD3D情報からデータを再構築する可能性が高くなる。
【0180】
(Meshの変更可能性)
メッシュはChangeableから派生し、したがって修正することができる。この実装では、群を頂点およびインデックスデータにトラップし、これらの変更をD3Dデータ構造に伝搬させることが必要となる。
【0181】
(MeshのためのTypeConverter)
他のすべての型と同様に、XAML複合プロパティ構文を使用して、Mesh3Dを定義するコレクションを指定することができる。しかし、指定をより簡潔にするために、TypeConveterが提供される。
【0182】
メッシュ内で定義された各集合は、この集合を作成するために解析および使用されるべき一連の数を取ることができる。例えば、索引付きトライアングルストリップを位置および色のみにより表すMeshを、以下のように指定することができる。
【0183】
【表42】

【0184】
言うまでもなく、これらのいかなるものも、複合プロパティ構文においてはるかにより冗長に表現される可能性がある。
【0185】
(Material)
Primitive3Dを構築するメソッドは、それらの外観を定義するためにMaterialを取る。Materialは抽象ベースクラスであり、BrushMaterial、VisualMaterial、およびAdvancedMaterialという3つの具象サブクラスを有する。BrushMaterialおよびVisualMaterialは、BasicMaterialと呼ばれるもう1つの抽象クラスのサブクラスである。したがって、以下の通りである。
【0186】
Material
----BasicMaterial
--------BrushMaterial
--------VisualMaterial
----AdvancedMaterial
【0187】
・BrushMaterialは、単に単一のBrushを取り、幅広い範囲の効果のために使用することができ、これらの効果には、透過性を達成すること(ピクセル単位またはスカラ単位のいずれか)、テクスチャ変換(アニメーションにするのものでも)を有すること、ビデオテクスチャを使用すること、暗黙の自動生成MIPマッピングなどが含まれる。具体的には、単一色、画像、グラディエント、または、さらにもう1つのVisualのテクスチャリングでは、単にSolidColorBrush、ImageBrush、GradientBrushまたはVisualBrushを使用して、それらのBrushMaterialを作成するようになる。
【0188】
・VisualMaterialは特に、Visualからマテリアルを構築するために設計される。このマテリアルは、入力がVisualへ、それが埋め込まれる3Dワールドから渡されるという意味で、インタラクティブとなる。これと、VisualBrushを有するBrushMaterialの間の違いについて疑問に思うかもしれない。この違いは、BrushMaterialがインタラクティブでないということである。
【0189】
・AdvancedMaterialクラスは、単にBrushMaterialまたは、VisualMaterialを使用するよりもかなり複雑であるが、さらに多くの柔軟性を提供する。しかし、非3D−EinsteinはAdvancedMaterialについて知る必要はなく、単にBrushMaterial/VisualMaterialを使用して、達成することを望む大部分のことを達成することができる。
【0190】
【表43】

【0191】
Materialは、Brushに基づくことによって、大変な柔軟性および「概念の節約」を得る。具体的には、以下の通りである。
【0192】
・ビデオテクスチャ、グラディエントテクスチャなどのようなものを反映する別々のTexture階層がある必要はなく、これは、これらがすべてBrushとして指定可能であるからである。
【0193】
・Brushはすでにアルファマスクおよびスカラオパシティ値をカプセル化しており、そのため、これらは両方ともテクスチャリングに使用可能となる。
【0194】
・Brushはすでに、それに関連付けられた2D Transformを有しており、2D Transformは、テクスチャリングの場合、メッシュ内のuv座標をテクスチャにマップするように変換するためのテクスチャ変換として解釈されるようになる。
【0195】
・Brushは、将来、ウッドグレインシェーダなどのストック手順シェーダをハングするための正しい場所である。これは次いで、2Dにおいて塗りつぶしまたはペンとして、また3Dにおいてテクスチャとして使用可能となる。特定のAPIサポートが3D空間において手順シェーダのために与えられる必要はない。
【0196】
TextureTransformプロパティは、BrushMaterialまたはVisualMaterialの定義の内部に存在する可能性のあるいかなる変換からも別個であることに留意されたい。TextureTransformプロパティは、問題のMaterialからテクスチャ座標空間(その範囲は[0,0]から[1,1])への変換を指定する。Material内部の変換はTextureTransformと結合して、1x1(テクスチャ座標における)のMaterialがMeshを介してどのようにマップされるかを記述する。
【0197】
(シェーダ)
「ストック」シェーダのセットの多くはパラメータ化されており、APIにおいて以下のようにアクセス可能である。
【0198】
1)2Dワールド内で意味を成すシェーダでは、シェーダはBrushの具象サブクラスとして公開されるようになり、それらのパラメータ化はクラス上のコンストラクタを通じて、あるいはクラス上のプロパティとして表現される。次いでシェーダを2Dオブジェクトに適用することができる。
【0199】
2)3D内でしか意味を成さないシェーダでは、シェーダはMaterialまたはBasicMaterialの具象サブクラスとして公開され、そこでシェーダをまた、それらのコンストラクタを通じてパラメータ化することもできる。
【0200】
この公開は次いで、シェーダが3D(および、適切なところでは2D)メッシュに適用されることを可能にするようになる。
【0201】
(BrushMaterial)
上述のように、BrushMaterialは単にBrushをカプセル化する。Primitive3Dに適用されたBrushMaterialは、テクスチャとして扱われる。テクスチャは直接マッピングされるようになり、すなわち、マッピングされているプリミティブにおける2Dのu,v座標は、テクスチャ変換によって修正された、Texture上の対応するx,y座標に直接索引付けするようになる。Avalonにおけるすべての2Dのように、テクスチャの座標系は左上の(0,0)から出て、正のyが下を指すことに留意されたい。
【0202】
Brushのために使用されたVisualBrushは入力を受け入れないようになるが、その上のいかなるアニメーションにも、またはそれに起こったいかなる構造上の変更にも従って更新するようになる。VisualをMaterialとして使用し、なお入力を受信するためには、後述のVisualMaterialを使用する。
【0203】
【表44】

【0204】
(VisualMaterial)
上述のように、VisualMaterialはインタラクティブなVisualをカプセル化する。これは、Visualと共に使用されたBrushMaterialとは、Visualがそのテクスチャリングされた形式で残る点で異なる。Visualは次いで、事実上、ある方法でルートのVisual3Dが親に当たることに留意されたい。単一のUIElementを複数のMaterialで使用すること、または、VisualMaterialを複数の場所で使用することは、正しくない。
【0205】
【表45】

【0206】
(AdvancedMaterial)
BrushMaterial/VisualMaterialおよびBumpMapは、AdvancedMaterialを定義するために使用される。
【0207】
【表46】

【0208】
EnvironmentMapは、キューブマッピングを可能にするための特定のフォーマットであると予期されるテクスチャであることに留意されたい。具体的には、キューブマップの6面が、Textureに関連付けられたBrushの周知のセクションにおいて表現されることが必要となる(Brush上の3x2グリッドのようなものである可能性が高い)。
【0209】
Ambient、DiffuseおよびSpecularプロパティは、BasicMaterialを取り、汎用のMaterialを取らず、これは、これらがAdvancedMaterialそのものとして指定されないからである。また、環境マップはBrushMaterialであることにも留意されたい。
【0210】
(BumpMap定義)
Bumpマップは、テクスチャのように、3Dプリミティブ上に、プリミティブ上のテクスチャ座標を介してマップされるグリッドである。しかし、補間データは表面の標準への摂動として解釈され、結果としてプリミティブの「でこぼこ」な外観となる。これを達成するため、バンプマップは、標準摂動などの情報、および潜在的に他の情報を伝える。バンプマップは色または透過性情報を伝えない。このため、Brushをバンプマップとして使用することは不適当である。
【0211】
したがって、新しいBumpMapクラスを導入し、これは特定のピクセルフォーマットのImageSourceとなる。
【0212】
【表47】

【0213】
(MaterialのためのTypeConverter)
Materialは、Brushの文字列指定が自動的にBrushMaterialにプロモートされることを可能にする、単純なTypeConverterを提供する。
【0214】
【表48】

【0215】
これは以下のような指定を可能にする。
【0216】
【表49】

【0217】
(「アンビエント」パラメータ)
このセクションでは、ジオメトリック階層内の任意のレベルで埋め込み可能ではないモデルの「アンビエント」パラメータを考察する。
【0218】
(Fog)
FogプロパティをVisual3D上に設定することによって、Fogを場面に追加することができる。使用可能なFogは「ピクセルフォグ」である。Fogは、抽象クラス、および以下に示すような階層として表現される。
【0219】
【表50】

【0220】
fogDensityは0〜1の範囲であり、フォグの密度の正規化表現である。
【0221】
fogStartおよびfogEndは装置空間[0,1]内で指定されたz深度であり、フォグが開始および終了するところを表す。
【0222】
(Camera)
図1のCameraオブジェクト32は、3Dモデルが2Dビジュアル上に投影される機構である。Camera自体は抽象タイプであり、2つのサブクラスはProjectionCameraおよびMatrixCameraである。ProjectionCamera自体は抽象クラスであり、2つの具象サブクラスのPerspectiveCameraおよびOrthogonalCameraを有する。PerspectiveCameraは、Position、LookAtPointおよびFieldOfViewなどのよく理解されたパラメータを取り、Cameraを構築する。OrthogonalCameraはPerspectiveCameraに類似しており、ただしOrthogonalCameraはFieldOfViewの代わりにWidthを取る。MatrixCameraは、World−To−Device変換を定義するために使用されたMatrix3Dを取る。
【0223】
【表51】

【0224】
Visual3Dで、CameraはビューをModel3D上に提供するために使用され、結果として生じる投影は、Visual3D上で確立された2D ViewPortにマップされる。
【0225】
また、Visual3Dの2D境界ボックスは単に、その凸の、軸に合わせられた包によりラップされ、ビジュアル上で確立されたクリップにクリップされた、3Dモデルの投影された3Dボックスとなる。
【0226】
(ProjectionCamera)
図1のProjectionCameraオブジェクト39は、PerspectiveCameraおよびOrthogonalCameraが派生する元の抽象親である。ProjectionCameraオブジェクト39は、MIL(媒体統合レイヤ)がサポートするProjectionCameraの両方の型に共通である、位置、見る方向および上方向などのプロパティをカプセル化する。
【0227】
【表52−1】

【0228】
【表52−2】

【0229】
(PerspectiveCamera)
図1のPerspectiveCameraオブジェクト36は、それによってPosition、LookAtPointおよびFieldOfViewなどのよく理解されたパラメータから透視投影カメラが構築される手段である。以下の例示は、PerspectiveCameraの関連する態様のよい指示を提供する。
【0230】
【表53】

【0231】
【表54】

【0232】
以下に留意されたい。
・PerspectiveCameraは、位置、見る方向および上ベクトルプロパティをProjectionCameraから継承する。
・FieldOfViewは水平視野を表し、度で指定される(他のすべてのMIL角と同様)。
・NearおよびFar PlaneDistanceは、カメラのPositionから、LookDirection点によって定義されたベクトルに沿った、3Dワールド座標距離を表す。NearPlaneDistanceのデフォルトは0であり、FarPlaneDistanceのデフォルトは無限となる。
・実際の投影の上で、Near/FarPlaneDistanceがなおそれぞれ0/無限である場合、モデルが検査され、その境界ボリュームはカメラの投影に従って投影される。結果として生じる境界ボリュームが次いで検査され、近平面距離は、カメラ位置に最も近いLookDirectionに垂直な境界ボリュームの平面に設定されるようになる。遠平面についても同じであるが、最も遠い平面を使用する。これは結果として、なおモデル全体を表示しながら、zバッファ解決の最適な使用となる。
【0233】
PerspectiveCameraのパラメータによって定義された「投影面」は次いでVisual3D上のViewPort長方形にマッピングされること、および、3空間から2空間への最終移行を表すことに留意されたい。
【0234】
(OrthogonalCamera)
図1のOrthogonalCameraオブジェクト37は、ワールドから装置空間への垂直投影を指定する。PerspectiveCameraのように、OrthogonalCamera、すなわち垂直カメラは、位置、見る方向、および上方向を指定する。しかし、PerspectiveCameraとは異なり、OrthogonalCameraは、透視短縮を含まない投影を記述する。物理的には、OrthogonalCameraは、その辺が平行であるビューイングボックスを記述する(PerspectiveCameraは、その辺が最終的にカメラの点に集まるビューイングfrustrumを記述する)。
【0235】
【表55−1】

【0236】
【表55−2】

【0237】
以下に留意されたい。
・OrthogonalCameraは、位置、見る方向および上ベクトルプロパティをProjectionCameraから継承する。
・WidthはOrthogonalCameraのビューイングボックスの幅を表し、ワールドユニットで指定される。
・NearおよびFar PlaneDistanceは、PerspectiveCameraについて振る舞うのと同じように振る舞う。
【0238】
(MatrixCamera)
図1のMatrixCameraオブジェクト38は、Cameraのサブクラスであり、Matrixを投影変換として直接指定することに備える。これは、それら自体の投影行列計算機構を有するアプリケーションにとって有用である。これは明確に、システムの高度な使用を表す。
【0239】
【表56】

【0240】
以下に留意されたい。
・ViewMatrixは、MatrixCameraのための位置、見る方向および上ベクトルを表す。これは、ビルボーディングのために、Model3D階層のトップレベル変換とは異なる場合がある。ProjectionMatrixはカメラ空間からの場面を装置空間に変換する。
【0241】
MinimumZおよびMaximumZプロパティは削除されており、これは、これらの値がMatrixCameraの投影行列によって暗示されるからである。投影行列は座標系をカメラ空間から、正規化されたキューブへ変換し、ただしXおよびYは[−1,1]からの範囲となり、zは[0,1]からの範囲となる。カメラ空間内の最低および最大z座標は、投影行列がどのようにz座標を変換するかによって定義される。
【0242】
結果として生じる投影は、Visual3D上のViewPort長方形にマップされること、および、3空間から2空間への最終移行を表すことに留意されたい。
【0243】
(XAMLマークアップの例)
以下は、XAMLにおけるModel3D階層全体の指定を示す、より完全なマークアップである。構文のいくつかは汎用により変わる場合があることに留意されたい。
【0244】
(単純なxファイルインポートおよび合成)
この例は単に、2つのインポートされた.xファイル、および、そのうちの1つにおける回転変換を有するModel、ならびに、0、1、0で上に起き上がる単一の白色点ライトを作成する。
【0245】
【表57】

【0246】
このとき、このマークアップは次いで、ファイル、ストリーム、リソース、どんなものの中にもあるようになる。クライアントプログラムはそのXAMLのロードを呼び出すようになり、それにより、アプリケーションによってそれが適合を見るときに使用される、完全なModel3DGroupを構築するようになる。
【0247】
(明示的Mesh宣言)
この例は、明示的に宣言されたMeshPrimitive3Dを、複合プロパティXAML構文の使用を通じて提供する。メッシュは、黄色から赤までのLinearGradientによりテクスチャリングされるようになる。
【0248】
また、ライトも場面内にある。
【0249】
【表58】

【0250】
(.xファイル上のアニメーション)
この例は最初の.xファイルを取り、XAML指定のアニメーションをアドインする。この特定のものは、xファイルを1xから2.5xまで5秒に渡ってスケールし、反転し、無期限に繰り返す、均等スケールを追加する。これはまた、そのスケールのスローイン/スローアウトのための加速/減速も使用する。
【0251】
【表59】

【0252】
(VisualMaterial指定)
この例は.xファイルをインポートし、ライブUIをそのマテリアルとして適用する。
【0253】
【表60−1】

【0254】
【表60−2】

【0255】
(Viewport3DのためのAPI)
Viewport3DのためのAPI指定は、以下の通りである。
【0256】
【表61】

【0257】
これで本発明のこの実施形態におけるModel 3D API定義を完了する。
【0258】
本発明を、コンピュータの構造上の特徴、方法的動作、およびコンピュータ読取り可能な媒体によるものに特有の言語で説明したが、添付の特許請求の範囲で定義された本発明は必ずしも、説明した特定の構造、動作または媒体に限定されないことを理解されたい。したがって、特定の構造上の特徴、動作および媒体は、主張された本発明を実施する例示的実施形態として開示される。
【0259】
上述の様々な実施形態は例示としてのみ提供され、本発明を限定するように解釈されるべきではない。本明細書で例示および説明した実施形態および応用例の例に従うことなく、および、以下の特許請求の範囲に示す本発明の真の趣旨および範囲から逸脱することなく、本発明に行われる可能性のある様々な修正および変更は、当業者には容易に理解されよう。
【図面の簡単な説明】
【0260】
【図1】本発明の一実施形態による、モデル3D構築APIにおける関連オブジェクトのデータ構造を例示する図である。
【図2】本発明の実施形態を実施することができる、適切なコンピューティングシステム環境の一実施例を例示する図である。
【図3】本発明を組み込むことができるグラフィックスレイヤアーキテクチャを全体的に表すブロック図である。
【図4】シーングラフをトラバースしてグラフィックスコマンドおよび他のデータを提供することによるなど、シーングラフを処理するためのビジュアルおよび関連コンポーネントのシーングラフの表現の図である。
【図5】妥当性検査ビジュアル、描画ビジュアル、および、構築された関連描画プリミティブのシーングラフの表現の図である。
【図6】オートバイを3D場面としてレンダリングするための例示的Model3Dツリー階層を例示する図である。
【図7】図6に示されたものなど、3Dシーンツリー階層を処理するための演算フローを示す図である。
【図8】Model3Dグループオブジェクト内に含まれたTransform3Dオブジェクトのための関連オブジェクトのデータ構造を示す図である。
【図9】Model3D API内のライトオブジェクトのための関連オブジェクトのデータ構造を示す図である。

【特許請求の範囲】
【請求項1】
3次元(3D)モデルをレンダリングするためのツリー階層内のコンピュータプログラムオブジェクトに適用されたコンピュータデータ構造であって、
3D場面をレンダリングするためのオブジェクトツリー階層と、
前記3D場面のための前記オブジェクトを収集する、前記ツリー階層内のルートオブジェクトと、
前記ツリー階層内の1つまたは複数のグループオブジェクトであって、他のグループオブジェクトおよびリーフオブジェクトを収集し、および前記グループオブジェクトの収集されたオブジェクトに作用する変換を有する1つまたは複数のグループオブジェクトと、
3Dモデルを前記3D場面内でレンダリングすることにおいて使用されるべきイルミネーションを定義する前記ツリー階層内のライトオブジェクト、および
3Dモデルを前記3D場面内で描画する演算を定義する、1つまたは複数の描画3Dオブジェクト
を含む前記ツリー階層内のリーフオブジェクトと
を備えたことを特徴とするデータ構造。
【請求項2】
そこから前記3D場面を2D画像として見るための3D空間内のカメラアイポイント位置を定義するカメラデータをさらに備えたことを特徴とする請求項1に記載のデータ構造。
【請求項3】
前記3D場面の2D画像を見る2Dウィンドウの境界を定義するビューポートデータをさらに備えたことを特徴とする請求項2に記載のデータ構造。
【請求項4】
前記ツリー階層内の前記描画オブジェクトの描画演算を変換して、前記3Dモデルを前記3D場面内で変換する前記グループオブジェクトをさらに備えたことを特徴とする請求項1に記載のデータ構造。
【請求項5】
描画オブジェクトが、前記描画演算を実行して2D画像を前記3D場面内で作成する1つまたは複数のビジュアルモデルオブジェクトをさらに備えたことを特徴とする請求項1に記載のデータ構造。
【請求項6】
合成システムによってレンダリングされた3次元(3D)モデルの2次元(2D)ビューの描画に関して、コンピュータプログラムオブジェクトの階層を処理するための方法であって、
オブジェクトの3D場面ツリー階層の枝をトラバースして、前記ツリーのグループオブジェクトおよびリーフオブジェクトを処理するステップと、
次の未処理オブジェクトがグループオブジェクトであるか、リーフオブジェクトであるかを検出するステップと、
リーフオブジェクトが検出される場合、前記リーフオブジェクトがライトオブジェクトであるか、描画3Dオブジェクトであるかを検出するステップと、
前記リーフオブジェクトがライトオブジェクトである場合、描画3Dオブジェクトによって使用されるべきイルミネーションを設定するステップと、
描画3Dオブジェクトが検出される場合、3Dモデルを、前記ライトオブジェクトによって提供されたイルミネーションによって照らされるように描画するステップと
を備えたことを特徴とする方法。
【請求項7】
カメラのアイポイントを設定するステップと、
前記描画する動作は、前記3Dモデルを前記カメラのアイポイントに基づいて描画するステップと
をさらに備えたことを特徴とする請求項6に記載の方法。
【請求項8】
前記3D場面ツリー内のリーフオブジェクトをリーフオブジェクトのグループに集めるステップと、
グループ演算を前記リーフオブジェクトのグループにおいて実行するステップと
をさらに備えたことを特徴とする請求項6に記載の方法。
【請求項9】
前記グループ演算は、前記グループ内の前記描画オブジェクトによる描画演算を変換するための1つまたは複数の変換演算であることを特徴とする請求項8に記載の方法。
【請求項10】
前記描画オブジェクトは、
3Dモデルを前記3D場面内で描画するプリミティブ3D描画オブジェクト
を含むことを特徴とする請求項6に記載の方法。
【請求項11】
前記描画オブジェクトは、
2D画像を前記3D場面内で描画するモデル3D描画オブジェクト
を含むことを特徴とする請求項6に記載の方法。
【請求項12】
コンピューティングシステムにおける、モデル3Dオブジェクトによって定義された3Dモデルの3次元(3D)場面を作成するためのアプリケーションプログラムインターフェースであって、
前記3D場面の3Dモデルを描画する命令を定義する1つまたは複数の描画オブジェクトと、
前記3D場面内の前記3Dモデルのイルミネーションを定義するライトオブジェクトと
を備えたことを特徴とするアプリケーションプログラムインターフェース。
【請求項13】
1つまたは複数の描画オブジェクトをグループに収集して、前記グループ内の前記描画オブジェクトによって描画された前記モデルの組合せであるモデルを描画するグループオブジェクト
をさらに備えたことを特徴とする請求項12に記載のアプリケーションプログラムインターフェース。
【請求項14】
前記グループオブジェクトは、前記グループ内の前記描画オブジェクトに作用する1つまたは複数のグループ演算を含むことを特徴とする請求項13に記載のアプリケーションプログラムインターフェース。
【請求項15】
前記グループ演算は、
前記グループ内の前記描画オブジェクトの1つまたは複数の描画演算に作用する変換
を含むことを特徴とする請求項14に記載のアプリケーションプログラムインターフェース。

【図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


【公表番号】特表2007−536622(P2007−536622A)
【公表日】平成19年12月13日(2007.12.13)
【国際特許分類】
【出願番号】特願2007−511345(P2007−511345)
【出願日】平成16年7月29日(2004.7.29)
【国際出願番号】PCT/US2004/024369
【国際公開番号】WO2005/111939
【国際公開日】平成17年11月24日(2005.11.24)
【出願人】(500046438)マイクロソフト コーポレーション (3,165)
【Fターム(参考)】