(57)【要約】【課題】  処理時間の短縮を図れるプログラムを提供する。【解決手段】  ＣＰＵ１４ａが、プログラムＰＲＧに従って、ツリー構造のシーングラフをデータＳＣＥＮを生成する。ＣＰＵ１４ａが、シーングラフデータＳＣＥＮをトラバースして指定された優先順位が割り当てられたノードの処理を実行する。【選択図】      図６
2005250799.tif 000002
【特許請求の範囲】
【請求項１】
ツリーを構成する複数のノードに処理が割り当てられ、前記ノードの各々に、当該ノードに割り当てられた前記処理を複数の処理段階のうち何れの前記処理段階で実行するかを示す実行段階データが対応付けられ、前記複数の処理段階を順に選択し、当該選択された処理段階で、当該選択された処理段階を示す前記実行段階データに対応付けられた前記ノードに割り当てられた前記処理が実行されるように制御するデータ処理装置が実行するプログラムであって、
前記実行段階データを基に、前記ツリーを構成する前記複数のノードのうち少なくとも前記ツリー上で下層ノードが存在するノードの各々について、前記選択された処理段階で前記下層ノードの処理を実行するか否かを示す指標データを当該ノードに対応付ける第１の手順と、
前記複数の処理段階を順に選択し、当該選択した処理段階において、前記ツリーをルートノードからリーフノードに向けて探索し、当該探索の過程でノードに達すると、当該ノードに前記第１の手順で対応付けられた前記指標データが当該選択された処理段階において前記下層ノードの処理を実行することを示していることを条件に、当該ノードの前記下層ノードを探索し、前記探索によって達したノードのうち、当該ノードに対応付けられた前記実行段階データが前記選択した処理段階を示す前記ノードに割り当てられた処理の実行開始を決定する第２の手順と
を前記データ処理装置に実行させるプログラム。
【請求項２】
前記第１の手順は、前記ツリーを構成する前記複数のノードの各々について、前記複数の処理段階の各々に対応付けられた複数のビットで構成され、当該ノードの前記下層ノードに対応付けられた前記実行段階データが示す実行段階に対応付けられた前記ビットを第１の論理値に設定し、それ以外の前記ビットを第２の論理値に設定した前記指標データを生成し、当該指標データを当該ノードに対応付け、
前記第２の手順は、前記探索により前記ノードに達すると、当該ノードに前記第１の工程で対応付けられた前記指標データを構成する前記複数のビットのうち前記選択した処理段階に対応付けられた前記ビットに前記第１の論理値が設定されていることを条件に当該ノードの前記下層ノードを探索する
請求項１に記載のプログラム。
【請求項３】
前記第１の手順は、前記ツリーを構成する前記複数のノードの各々について、当該ノードの前記下層ノードに対応付けられた前記実行段階データが示す実行段階のうち、最も早い実行段階を示す前記指標データを対応付け、
前記第２の手順は、前記探索により前記ノードに達すると、当該ノードに前記第１の工程で対応付けられた前記指標データが前記選択した処理段階を示すことを条件に当該ノードの前記下層ノードを探索して、前記選択した処理段階を前記実行段階データが示すノードに割り当てられた処理の実効開始を決定し、前記実行開始が既に決定されたノードに対応付けられた前記実行段階データを非実行を示すように更新し、当該ノードの上層に位置する上層ノードの前記指標データを前記更新の結果を反映させて更新する
請求項１に記載のプログラム。
【請求項４】
前記ノードには、当該ノードに割り当てられた処理を規定する演算データあるいは属性データが割り当てられ、
前記第２の工程は、前記実行開始を決定した前記ノードに割り当てられた前記演算データあるいは前記属性データを、前記処理の実行先に出力する
請求項１に記載のプログラム。
【請求項５】
前記ノードには、当該ノードに割り当てられた画像オブジェクトと、前記画像オブジェクトの画面上の表示位置と、前記画像オブジェクトの画面に表示するときの姿勢あるいは拡大縮小を規定する演算との少なくとも一つが割り当てられている
請求項４に記載のプログラム。
【請求項６】
ツリーを構成する複数のノードに処理が割り当てられ、前記ノードの各々に、当該ノードに割り当てられた前記処理を複数の処理段階のうち何れの前記処理段階で実行するかを示す実行段階データが対応付けられ、前記複数の処理段階を順に選択し、当該選択された処理段階で、当該選択された処理段階を示す前記実行段階データに対応付けられた前記ノードに割り当てられた前記処理が実行されるように制御するデータ処理装置であって、
前記実行段階データを基に、前記ツリーを構成する前記複数のノードのうち少なくとも前記ツリー上で下層ノードが存在するノードの各々について、前記選択された処理段階で前記下層ノードの処理を実行するか否かを示す指標データを当該ノードに対応付ける前処理手段と、
前記複数の処理段階を順に選択し、当該選択した処理段階において、前記ツリーをルートノードからリーフノードに向けて探索し、当該探索の過程でノードに達すると、前記前処理手段が当該ノードに対応付けた前記指標データが当該選択された処理段階において前記下層ノードの処理を実行することを示していることを条件に、当該ノードの前記下層ノードを探索し、前記探索によって達したノードのうち、当該ノードに対応付けられた前記実行段階データが前記選択した処理段階を示す前記ノードに割り当てられた処理の実行開始を決定する実行制御手段と
を有するデータ処理装置。
【請求項７】
前記ノードには、当該ノードに割り当てられた画像オブジェクトと、前記画像オブジェクトの画面上の表示位置と、前記画像オブジェクトの画面に表示するときの姿勢あるいは拡大縮小を規定する演算との少なくとも一つが割り当てられている
請求項６に記載のデータ処理装置。
【請求項８】
前記ノードには、当該ノードに割り当てられた処理を規定する演算データあるいは属性
データが割り当てられており、
前記実行決定手段が実行開始を決定した前記ノードに割り当てられた処理を実行する実行手段
をさらに有し、
前記実行制御手段は、前記実行開始を決定した前記ノードに割り当てられた前記演算データあるいは前記属性データを前記実行手段に出力し、
前記実行手段は、前記実行決定手段から入力した前記演算データあるいは前記属性デー
タを基に前記処理を行う
請求項６に記載のデータ処理装置。
【請求項９】
ツリーを構成する複数のノードに処理が割り当てられ、前記ノードの各々に、当該ノードに割り当てられた前記処理を複数の処理段階のうち何れの前記処理段階で実行するかを示す実行段階データが対応付けられ、前記複数の処理段階を順に選択し、当該選択された処理段階で、当該選択された処理段階を示す前記実行段階データに対応付けられた前記ノードに割り当てられた前記処理が実行されるようにデータ処理装置が制御するデータ処理方法であって、
前記実行段階データを基に、前記ツリーを構成する前記複数のノードのうち少なくとも前記ツリー上で下層ノードが存在するノードの各々について、前記選択された処理段階で前記下層ノードの処理を実行するか否かを示す指標データを当該ノードに対応付ける第１の工程と、
前記複数の処理段階を順に選択し、当該選択した処理段階において、前記ツリーをルートノードからリーフノードに向けて探索し、当該探索の過程でノードに達すると、当該ノードに前記第１の工程で対応付けられた前記指標データが当該選択された処理段階において前記下層ノードの処理を実行することを示していることを条件に、当該ノードの前記下層ノードを探索し、前記探索によって達したノードのうち、当該ノードに対応付けられた前記実行段階データが前記選択した処理段階を示す前記ノードに割り当てられた処理の実行開始を決定する第２の工程と
を有するデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、３次元コンピュータグラフィックスなどに用いられるプログラム、データ処理装置およびその方法に関する。
【背景技術】
【０００２】
３次元コンピュータグラフィックス（3-Dimensional Computer Graphics 以下、３Ｄ−ＣＧと記す）は、空間や立体など３次元の存在を数値で表現し、計算によってコンピュータの画面に投影して描画を行う技術である。
またリアルタイム３Ｄ−ＣＧは、ユーザが認識できない程の速さで連続的に上記の描画を行うことによってアニメーションを実現する技術であり、ゲームやバーチャルリアリティといった分野で広く利用されている。さらに今後は携帯電話をはじめとしたモバイル機器やセットトップボックス等の家電製品においてもリアルタイム３Ｄ−ＣＧを用いたアプリケーションが広く普及すると考えられている。
【０００３】
リアルタイム３Ｄ−ＣＧを行うには一般に高いコンピュータ処理能力が必要とされるが、最近ではＣＰＵ(Central Processing Unit) で全ての処理を行うのではなく、３Ｄ−ＣＧの計算処理を専用に行うグラフィックスハードウエアを併用することで動作速度を向上させることが一般的になっている。
こうしたグラフィックスハードウエアの機能はMicrosoft社のDirectX Graphicsや標準化団体ARB(OpenGL Architecture Review Board)が標準化作業を行っているOpenGLといったＡＰＩ(Application Program Interface)を介してアプリケーションから利用することができるが、これらのＡＰＩはハードウエアを操作するための抽象度の低いコマンドの集合であり、これらのＡＰＩを利用したプログラミングには高いスキルが必要である。
このような状況に対し、プログラミングの生産性を向上させることを目的とした上位の（より抽象度の高い）ライブラリが開発されるようになった。それらの多くがシーングラフデータと呼ばれる機能をサポートしている。シーングラフデータとは描画対象となる３次元空間のオブジェクト群をツリー構造のデータとして表現したものである。シーングラフを採用した３Ｄ−ＣＧライブラリの例としてＳＧＩ社のOpenInventorやSun Microsystems社のJava3Dが挙げられる。
一般にこれらのライブラリでは、アプリケーションは描画したい３Ｄモデルをシーングラフとして構築し、その描画はライブラリ側で行うことによってプログラミングの煩雑さを軽減している。以降、３Ｄモデルをデータ構造として構築する作業をモデリングと称し、またそれを実際に描画する処理をレンダリングと称する。
【０００４】
一方で、上述したようなシーングラフデータではノードの描画順が指定できない。多くのグラフィックスハードウエアでは、半透明の物体が重なり合う場合に、視点から遠い順に描画しないと正しい画像が得られないため、このことは大きな制約となる。
そこでノードの描画順位に関する優先度を持ったシーングラフデータが開発されるようになった。そのようなシーングラフをサポートしたライブラリの例として、標準化団体ＪＣＰ(Java Community Process)が標準化を行っているMobile 3D Graphics API (JSR-184)等が挙げられる。
JSR-184では各ノードがレイヤー値と呼ばれる整数値を持っており、シーングラフデータ中の位置に関係なく、その値が小さいものから順に描画が行われる。レイヤーの利用法の例として、シーングラフ中で背景を表現するノード群には小さな値（例えば「−１」）を割り当てる、などといった使い方が考えられる。
【０００５】
このようなシーングラフデータを基にした従来のシステムでは、例えば、ＣＰＵが、各レイヤー値の描画を行う度に、シーングラフデータを構成する全てのノードをトラバース（走査）して、当該レイヤー値が割り当てられたノードを探索し、当該探索したノードについて描画処理を行っている。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来のシステムでは、ＣＰＵが、各レイヤー値の描画を行う度に、シーングラフデータを構成する全てのノードをトラバースするため、処理量が多くなり、処理時間が長いという問題がある。
【０００７】
本発明は、上述した従来技術の問題点に鑑みてなされ、ツリーを構成する複数のノードに処理が割り当てられ、前記ノードの各々に、当該ノードに割り当てられた前記処理を複数の処理段階のうち何れの前記処理段階で実行するかを示す実行段階データが対応付けられ、前記複数の処理段階を順に選択し、当該選択された処理段階で、当該選択された処理段階を示す前記実行段階データに対応付けられた前記ノードに割り当てられた前記処理が実行されるように制御する場合に、処理量の削減、並びに処理時間の短縮が図れるプログラム、データ処理装置およびその方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
第１の発明のプログラムは、ツリーを構成する複数のノードに処理が割り当てられ、前記ノードの各々に、当該ノードに割り当てられた前記処理を複数の処理段階のうち何れの前記処理段階で実行するかを示す実行段階データが対応付けられ、前記複数の処理段階を順に選択し、当該選択された処理段階で、当該選択された処理段階を示す前記実行段階データに対応付けられた前記ノードに割り当てられた前記処理が実行されるように制御するデータ処理装置が実行するプログラムであって、前記実行段階データを基に、前記ツリーを構成する前記複数のノードのうち少なくとも前記ツリー上で下層ノードが存在するノードの各々について、前記選択された処理段階で前記下層ノードの処理を実行するか否かを示す指標データを当該ノードに対応付ける第１の手順と、前記複数の処理段階を順に選択し、当該選択した処理段階において、前記ツリーをルートノードからリーフノードに向けて探索し、当該探索の過程でノードに達すると、当該ノードに前記第１の手順で対応付けられた前記指標データが当該選択された処理段階において前記下層ノードの処理を実行することを示していることを条件に、当該ノードの前記下層ノードを探索し、前記探索によって達したノードのうち、当該ノードに対応付けられた前記実行段階データが前記選択した処理段階を示す前記ノードに割り当てられた処理の実行開始を決定する第２の手順とを前記データ処理装置に実行させる。
【０００９】
第１の発明のプログラムの作用は以下のようになる。
第１の発明のプログラムが、データ処理装置で実行され、当該データ処理装置が、第１の手順に従って、前記実行段階データを基に、前記ツリーを構成する前記複数のノードのうち少なくとも前記ツリー上で下層ノードが存在するノードの各々について、前記選択された処理段階で前記下層ノードの処理を実行するか否かを示す指標データを当該ノードに対応付ける。
次に、前記データ処理装置が、第２の手順に従って、前記複数の処理段階を順に選択し、当該選択した処理段階において、前記ツリーをルートノードからリーフノードに向けて探索し、当該探索の過程でノードに達すると、当該ノードに前記第１の手順で対応付けられた前記指標データが当該選択された処理段階において前記下層ノードの処理を実行することを示していることを条件に、当該ノードの前記下層ノードを探索し、前記探索によって達したノードのうち、当該ノードに対応付けられた前記実行段階データが前記選択した処理段階を示す前記ノードに割り当てられた処理の実行開始を決定する。
【００１０】
第２の発明のデータ処理装置は、ツリーを構成する複数のノードに処理が割り当てられ、前記ノードの各々に、当該ノードに割り当てられた前記処理を複数の処理段階のうち何れの前記処理段階で実行するかを示す実行段階データが対応付けられ、前記複数の処理段階を順に選択し、当該選択された処理段階で、当該選択された処理段階を示す前記実行段階データに対応付けられた前記ノードに割り当てられた前記処理が実行されるように制御するデータ処理装置であって、前記実行段階データを基に、前記ツリーを構成する前記複数のノードのうち少なくとも前記ツリー上で下層ノードが存在するノードの各々について、前記選択された処理段階で前記下層ノードの処理を実行するか否かを示す指標データを当該ノードに対応付ける前処理手段と、前記複数の処理段階を順に選択し、当該選択した処理段階において、前記ツリーをルートノードからリーフノードに向けて探索し、当該探索の過程でノードに達すると、前記前処理手段が当該ノードに対応付けた前記指標データが当該選択された処理段階において前記下層ノードの処理を実行することを示していることを条件に、当該ノードの前記下層ノードを探索し、前記探索によって達したノードのうち、当該ノードに対応付けられた前記実行段階データが前記選択した処理段階を示す前記ノードに割り当てられた処理の実行開始を決定する実行制御手段とを有する。
【００１１】
第２の発明のデータ処理装置の作用は以下のようになる。
先ず、前処理手段が、実行段階データを基に、前記ツリーを構成する前記複数のノードのうち少なくとも前記ツリー上で下層ノードが存在するノードの各々について、前記選択された処理段階で前記下層ノードの処理を実行するか否かを示す指標データを当該ノードに対応付ける。
次に、実行制御手段が、ツリーをルートノードからリーフノードに向けて探索し、当該探索の過程でノードに達すると、前記前処理手段が当該ノードに対応付けた前記指標データが当該選択された処理段階において前記下層ノードの処理を実行することを示していることを条件に、当該ノードの前記下層ノードを探索し、前記探索によって達したノードのうち、当該ノードに対応付けられた前記実行段階データが前記選択した処理段階を示す前記ノードに割り当てられた処理の実行開始を決定する。
【００１２】
第３の発明のデータ処理方法は、ツリーを構成する複数のノードに処理が割り当てられ、前記ノードの各々に、当該ノードに割り当てられた前記処理を複数の処理段階のうち何れの前記処理段階で実行するかを示す実行段階データが対応付けられ、前記複数の処理段階を順に選択し、当該選択された処理段階で、当該選択された処理段階を示す前記実行段階データに対応付けられた前記ノードに割り当てられた前記処理が実行されるようにデータ処理装置が制御するデータ処理方法であって、前記実行段階データを基に、前記ツリーを構成する前記複数のノードのうち少なくとも前記ツリー上で下層ノードが存在するノードの各々について、前記選択された処理段階で前記下層ノードの処理を実行するか否かを示す指標データを当該ノードに対応付ける第１の工程と、前記複数の処理段階を順に選択し、当該選択した処理段階において、前記ツリーをルートノードからリーフノードに向けて探索し、当該探索の過程でノードに達すると、当該ノードに前記第１の工程で対応付けられた前記指標データが当該選択された処理段階において前記下層ノードの処理を実行することを示していることを条件に、当該ノードの前記下層ノードを探索し、前記探索によって達したノードのうち、当該ノードに対応付けられた前記実行段階データが前記選択した処理段階を示す前記ノードに割り当てられた処理の実行開始を決定する第２の工程とを有する。
【発明の効果】
【００１３】
本発明によれば、ツリーを構成する複数のノードに処理が割り当てられ、前記ノードの各々に、当該ノードに割り当てられた前記処理を複数の処理段階のうち何れの前記処理段階で実行するかを示す実行段階データが対応付けられ、前記複数の処理段階を順に選択し、当該選択された処理段階で、当該選択された処理段階を示す前記実行段階データに対応付けられた前記ノードに割り当てられた前記処理が実行されるように制御する場合に、処理量の削減、並びに処理時間の短縮が図れるプログラム、データ処理装置およびその方法を提供することができる。
【発明を実施するための最良の形態】
【００１４】
以下、本発明の実施の形態を図面を参照しながら説明する。
＜本発明の関連技術＞
本発明の実施形態を説明する前に、本発明の関連技術を説明する。
図１は、シーングラフデータの一例を模式的に表した図である。
このシーングラフデータはロボットのモデルを表現したものである。
図１中、各ノードは円で表現されており、ルートノードｒｏｏｔを基点としてツリーを構成している。
各ノードにはロボットの構成部品の形状や外観データ、及びモデル変換（位置、姿勢、拡大縮尺）に関する情報が含まれている。
これら各ノードが保有している情報のうち、モデル変換はルートから末端へ向かって階層的に定義され、あるノードが保持している位置、姿勢、拡大縮尺の値は、その親ノードを基点としたものである。
従って、例えば図１において、最終的にロボットの右手が描画される３次元空間上の位置は、「ノードｔｏｒｓｏの位置＋ノードｒｉｇｈｔ＿ａｒｍの位置＋ノードｒｉｇｈｔ＿ｈａｎｄの位置」として表現される。
実際には、各ノードのモデル変換は４ｘ４の行列Ｍで表現され、ノードｒｉｇｈｔ＿ｈａｎｄが描画される位置、姿勢、拡大縮小は、「Ｍ（ｔｏｒｓｏ）・Ｍ（ｒｉｇｈｔ＿ａｒｍ）・Ｍ（ｒｉｇｈｔ＿ｈａｎｄ）」という行列演算で規定できる。
【００１５】
このような行列の乗算は前述したグラフィックスハードウエアがサポートするのに適しており、処理の高速化が期待できる。
実際のシーングラフデータのレンダリングにおいては、ルートからリーフ（ツリーの末端）へ向かってツリーを走査（以下トラバースと称する）しながら上記の行列の乗算を積み重ねていけば、各ノードのモデル変換を求めることができ、効率がよい。
【００１６】
図２は、図１のシーングラフデータをトラバースする様子を模式的に示したものである。
図中の矢印に沿ってシーングラフデータを走査していく。ノードを表す円の中の数字はノードが描画される順番を表している。
このような階層構造で３次元空間を構成することには、モデリングを容易にする効果がある。
例えばロボットの肩を回転させるにはノードｒｉｇｈｔ＿ａｒｍの姿勢情報のみを更新すればよく、ノードｒｉｇｈｔ＿ｈａｎｄの位置、姿勢情報を再計算する必要はない。
【００１７】
ところで、図１および図２に示すシーングラフデータは、図３に示すように、ルートノードｒｏｏｔ、ブランチノード１０１〜１１０とリーフノード１２１〜１３０とを用いて表現されることが多い。
【００１８】
図３に示すシーングラフデータでは、例えば、リーフノード１３０に胴体の外観を規定する画像オブジェクトｔｏｒｓｏが割り当てられ、ブランチノード１０１に画像オブジェクトｔｏｒｓｏの位置、姿勢および拡大縮小を規定する行列Ｍ（ｔｏｒｓｏ）が割り当てられる。
また、リーフノード１２１に右腕の外観を規定する画像オブジェクトｒｉｇｈｔ＿ａｒｍが割り当てられ、ブランチノード１０２に画像オブジェクトｒｉｇｈｔ＿ａｒｍの位置、姿勢および拡大・縮小を規定する行列Ｍ（ｒｉｇｈｔ＿ａｒｍ）が割り当てられる。
また、リーフノード１２２に右手の外観を規定する画像オブジェクトｒｉｇｈｔ＿ｈａｎｄが割り当てられ、ブランチノード１０３に画像オブジェクトｒｉｇｈｔ＿ｈａｎｄの位置、姿勢および拡大・縮小を規定する行列Ｍ（ｒｉｇｈｔ＿ｈａｎｄ）が割り当てられる。
【００１９】
このように、シーングラフデータを利用した３Ｄ−ＣＧライブラリには、モデリングが容易で、レンダリングがライブラリによって効率的に行われるという利点がある。アプリケーションの設計者やプログラマは、どのような３Ｄ空間を表現するかに注力して開発を行うことができ、煩雑なレンダリングはライブラリに任せることができる。
ところで、上述したシーングラフデータではノードの描画順が指定できない。そのため、多くのグラフィックスハードウエアでは、半透明の物体が重なり合う場合に、視点から遠い順に描画しないと正しい画像が得られないため、このことは大きな制約となる。
そこでノードの描画順位に関する優先度を持ったシーングラフデータを用いる。
このようなシーングラフデータをサポートしたライブラリの例では、各ノードがレイヤーと呼ばれる整数値を持ち、シーングラフデータ中の位置に関係なく、その値が小さいものから順に描画を行う。
レイヤーの利用法の例として、シーングラフデータ中で背景を表現するノード群には小さな値（例えば「−１」）を割り当てる、などといった使い方が考えられる。
【００２０】
レイヤーの値のとりうる値には範囲があり、デフォルトは「０」とする。またレイヤー値は複数のノードで重複してもよい。さらに、レイヤー値が設定される対象はツリーの末端のノードに限られる。
以降、区別するためツリーの末端に位置するノードをリーフノード、ツリーのルートに位置するノードをルートノード、それ以外の、枝分かれの箇所に位置するノードをブランチノードと称する。
このようなシーングラフデータを描画する際に、前述したようにシーンを単純にトラバースしたのでは、レイヤー値によって指定された優先度が正しく反映されない。
レイヤー値に従って正しく描画するための方法のひとつとして、レイヤー値の取りうる値全てについて、繰り返しシーングラフデータをトラバースすることが考えられる。
【００２１】
以下、図４および図５を用いてこの方法の説明を行う。図４はレイヤー値付のシーングラフデータの例である。図中の円はシーングラフデータＳＣＥＮのノードであり、「Ｌ」はリーフノード、「Ｂ」はブランチノード、「Ｒ」はルートノードを表す。
すなわち、シーングラフデータＳＣＥＮは、ルートノード（Ｒ）と、リーフノード４１〜５４と、ブランチノード６０〜６７を有する。
ノードの左下に示した数値がレイヤー値ＶＬであり、範囲は「−２」〜「２」である。本明細書において、レイヤー値ＶＬが小さくなるに従って、優先度が高くなる、すなわち、描画順が早くなるとする。
【００２２】
図５はこの方法をフローチャートで示したものである。
例えば、レイヤー値として取りえる最小値「ｌａｙｅｒＭｉｎ」である「−２」を変数ｌａｙｅｒに設定（ステップＳＴ１）し、ルートノードからシーングラフのトラバースを開始する（ステップＳＴ２）。
そして、ノードを経てリーフに達すると（ステップＳＴ２〜ＳＴ６）、そのリーフに対応付けられたレイヤー値ＶＬと変数ｌａｙｅｒを比較し（ステップＳＴ７）、これらが一致していれば、そのリーフを描画する（ステップＳＴ８）。
一方、全てのノードについて、トラバースが終了（ルートノードに到達）したら（ステップＳＴ９）、変数ｌａｙｅｒに「１」を加算し（ステップＳＴ１０）、それを基に再びシーングラフのトラバースを行う。これを変数ｌａｙｅｒが取りえる最大値である「２」まで繰り返す。
【００２３】
図４の例で考えてみると、１枚のイメージを作成するのにｌａｙｅｒ「２」〜「−２」まで５回のトラバースを行うことになる。レイヤー値ＶＬが「−２」のリーフノードは存在しないので、その回は全く無駄なトラバースを行っていることになり、またシーングラフの右半分は全てレイヤー値ＶＬが「０」であるのに、繰り返しトラバースを行うことになる。
このように、この方法は冗長な処理が多くなってしまい、描画速度の面からあまり現実的でない。
また、レンダリングの前処理として、なんらかのソートアルゴリズムによってノードを描画順に並べておくことが考えられる。
しかし、レイヤー値は動的に変更されることも考えられるので、シーングラフを描画する度にソートを行わなければならず、ソート処理自体のオーバーヘッドも考慮しなければならない。特に携帯電話など、ＣＰＵの処理速度があまり期待できない環境では十分な描画速度が得られない場合も考えられる。
【００２４】
以下、図４に示すシーングラフデータＳＣＥＮをライブラリプログラムの処理対象として例示して、本実施形態のデータ処理装置を説明する。
＜第１実施形態＞
図６は、本発明の実施形態に係わるデータ処理装置１の構成図である。
図６に示すように、データ処理装置１は、例えば、入力部１０、グラフィックアクセラレータ１１、モニタ１２、メモリ１３およびＣＰＵ１４を有し、これらがデータ線１８を介して接続されている。
図６において、ライブラリプログラムＬＩＢが本発明のプログラムに対応し、ＣＰＵ１４がライブラリプログラムＬＩＢに従って処理を実行することで、本発明のデータ処理装置の各手段が実現される。
また、グラフィックアクセラレータ１１が、本発明のデータ処理装置の実行手段に対応している。
【００２５】
入力部１０は、例えば、キーボードなどの操作ボタン、タッチパネルなどであり、ユーザの操作に応じた操作データ、あるいは、データ処理装置１の外部からのデータを入力する。
グラフィックアクセラレータ１１は、ＣＰＵ１４から描画に用いる行列データを入力し、当該行列データを基に演算を行い、ＣＰＵ１４によるゲームなどのプログラムＰＲＧの進行状況に応じた３次元画像をモニタ１２に表示する。
【００２６】
メモリ１３は、ゲームなどのグラフィック処理を規定したプログラムＰＲＧ、ライブラリプログラムＬＩＢ、並びにＣＰＵ１４の処理に用いられる種々のデータを記憶する。
ＣＰＵ１４は、メモリ１３から読み出したプログラムＰＲＧおよびライブラリプログラムＬＩＢを実行し、これらの規定した種々の処理を実行する。
【００２７】
図７は、図６に示すデータ処理装置１における処理手順を説明するための図である。
図７に示すように、データ処理装置１は、例えば、ＣＰＵ１４がプログラムＰＲＧおよびライブラリプログラムＬＩＢを実行する。
ＣＰＵ１４は、プログラムＰＲＧの実行に従って、図４に示すシーングラフデータＳＣＥＮを生成し、これをライブラリプログラムＬＩＢに提供する。
そして、ＣＰＵ１４は、ライブラリプログラムＬＩＢの実行に従って、プログラムＰＲＧから受け取ったシーングラフデータＳＣＥＮを基に、３次元画像を構成する各オブジェクトを表示するための行列データＭＩＸを描画順にグラフィックアクセラレータ１１に出力する。
そして、グラフィックアクセラレータ１１は、ライブラリプログラムＬＩＢを入力した行列データＭＩＸを基に演算を行って、ＶＲＡＭ(Video RAM) などに表示データを書き込む。そして、当該書き込まれた表示データに応じた３次元画像がモニタ１２に表示される。
【００２８】
図８は、ＣＰＵ１４が、ライブラリプログラムＬＩＢに従って実行する処理の手順を説明するためのフロ−チャートである。
図８において、ステップＳＴ２が本発明のプログラムの第１の手順に対応し、ステップＳＴ３が本発明のプログラムの第２の手順に対応している。
また、ＣＰＵ１４がステップＳＴ２の処理を実行することで本発明のデータ処理装置の前処理手段が実現され、ＣＰＵ１４がステップＳＴ３の処理を実行することで本発明のデータ処理装置の実行制御手段が実現される。
【００２９】
図８に示すように、ＣＰＵ１４は、プログラムＰＲＧからシーングラフデータＳＣＥＮを入力する（ステップＳＴ１）。
次に、ＣＰＵ１４は、シーングラフデータＳＣＥＮを構成するルートノードおよびブランチノードに、各レイヤー値ＶＬの処理段階で、その下層ノードをトラバースするか否かを判断するために用いられるマスクデータＭＳＫを対応付けたシーングラフデータＳＣＥＮａを生成する。
（ステップＳＴ２）。
次に、ＣＰＵ１４は、複数のレイヤー値の各々について、シーングラフデータＳＣＥＮａで規定されるマスタデータＭＳＫを基に、ツリーを構成するブランチノードおよびリーフノードをトレースして、描画するオブジェクトの行列データＭＩＸを生成し、これをグラフィックアクセラレータ１１に出力する（ステップＳＴ３）。
【００３０】
以下、図８に示すマスクデータ生成処理（ステップＳＴ２）と、行列データＭＩＸの生成処理（ステップＳＴ３）を詳細に説明する。
〔マスクデータ生成処理（ステップＳＴ２）〕
ＣＰＵ１４は、前述したように、ライブラリプログラムＬＩＢを基に、以下に示すように、マスタデータ生成処理を行う。
ＣＰＵ１４は、レイヤー値ＶＬの範囲をｌａｙｅｒＭｉｎ（最小）〜ｌａｙｅｒＭａｘ（最大）とする。
ＣＰＵ１４は、（ｌａｙｅｒＭａｘ−ｌａｙｅｒＭｉｎ＋１）ビットのビット列を基に、対応するレイヤーのビットを「１」（第１の論理値）にし、それ以外のビットを「０」（第２の論理値）にしたレイヤー値ＶＬを規定する。
例えば、本実施形態では、ｌａｙｅｒＭａｘが「２」、ｌａｙｅｒＭｉｎが「−２」であるため、ＣＰＵ１４は、５ビットのレイヤー値ＶＬを規定する。
ＣＰＵ１４は、例えば、「−２」〜「２」のレイヤー値ＶＬを以下に示すように規定する。
【００３１】
（数１）
ＶＬ＝−２    ：１００００
ＶＬ＝−１    ：０１０００
ＶＬ＝０      ：００１００
ＶＬ＝１      ：０００１０
ＶＬ＝２      ：００００１
【００３２】
ＣＰＵ１４は、図４に示すシーングラフデータＳＣＥＮ内のリーフノード（Ｌ）に割り当てられたレイヤー値ＶＬを、図９に示すように、５ビットで表現する。
ＣＰＵ１４は、図４に示すシーングラフデータＳＣＥＮの全てのノードをトラバースし、ルートノード（Ｒ）および各ブランチノード（Ｂ）毎に、当該ノードの下層に位置するリーフノード（Ｌ）（下層ノード）を何れのレイヤー値ＬＶで描画するかを示すマスクデータＭＳＫを生成し、このマスクデータＭＳＫをルートノード（Ｒ）および対応するブランチノード（Ｂ）に対応付ける。
具体的には、ＣＰＵ１４は、図１０に示すように、ルートノードおよび各ブランチノード（Ｂ）のマスクデータＭＳＫを、当該ノードを親とする１つ下層のブランチノード（Ｂ）およびリーフノード（Ｌ）のマスクデータＭＳＫおよびレイヤー値ＬＶの論理和を演算することで生成する。
例えば、ブランチノード６１のマスクデータＭＳＫは、リーフノード４１，４２，４３のレイヤー値ＶＬである「０１０００」、「０１０００」、「０１０００」の論理和である「０１０００」となる。
また、ブランチノード６０のマスクデータＭＳＫは、ブランチノード６１，６２，６３のマスクデータＭＳＫである「０１０００」、「０００１１」、「０００１０」の論理和である「０１０１１」となる。
ＣＰＵ１４は、上述した演算を、シーングラフデータＳＣＥＮを構成するルートノード（Ｒ）および全てのブランチノード（Ｂ）について再帰的に行い、図１０に示すように、ルートノード（Ｒ）および全てのブランチノード（Ｂ）のマスクデータＭＳＫを生成し、これを対応するルートノード（Ｒ）およびブランチノード（Ｂ）に割り当てることで、図１０に示す新たなシーングラフデータＳＣＥＮａを生成する。
【００３３】
〔行列データＭＩＸの生成処理（ステップＳＴ３）〕
ＣＰＵ１４は、前述したように、ライブラリプログラムＬＩＢに従って、ステップＳＴ２で生成された図１０に示すシーングラフデータＳＣＥＮａを基に、以下に示すように、行列データＭＩＸの生成処理を行う。
ＣＰＵ１４は、変数ｌａｙｅｒに、レイヤー値ＶＬのｌａｙｅｒＭｉｎ（最小）からｌａｙｅｒＭａｘ（最大）を順に選択して設定する。
ＣＰＵ１４は、変数ｌａｙｅｒにレイヤー値ＶＬを設定する度に、以下に示すように図１０に示すシーングラフデータＳＣＥＮａをトラバースする。
すなわち、ＣＰＵ１４は、図１０に示すシーングラフデータＳＣＥＮａのトラバースを、ルートノード（Ｒ）から開始する。
ＣＰＵ１４は、ルートノード（Ｒ）に対応付けられたマスクデータＭＳＫ内の変数ｌａｙｅｒが示すレイヤー値ＶＬ（選択されたレイヤー）に対応するビットが論理値「１」を示す場合に、当該レイヤー値ＶＬについてのトラバースを行う。
そして、ＣＰＵ１４は、ルートノード（Ｒ）の子であるブランチノード（Ｂ）およびリーフノード（Ｌ）のうち、それに対応付けられたマスクデータＭＳＫ内の変数ｌａｙｅｒが示すレイヤー値ＶＬ（選択されたレイヤー）に対応するビットが論理値「１」を示すノードを選択する。
【００３４】
そして、ＣＰＵ１４は、上記選択したブランチノード（Ｂ）について、その下層のブランチノード（Ｂ）およびリーフノード（Ｌ）のトラバースを行う。
一方、ＣＰＵ１４は、上記選択しないブランチノード（Ｂ）についてはその下層のブランチノード（Ｂ）およびリーフノード（Ｌ）のトラバースを行わない（すなわち、トラーースをスキップする）。これにより、変数ｌａｙｅｒを更新する度に、全てのリーフノード（Ｌ）をトラバースする必要がなくなり、処理負荷の軽減、処理時間の短縮を図れる。
【００３５】
具体的には、ＣＰＵ１４は、図１０に示すシーングラフデータＳＣＥＮａを処理対象とする場合に、以下に示すように、変数ｌａｙｅｒに「−２」から順に「２」までの変数を順に設定してトラバースを行う。
【００３６】
ＣＰＵ１４は、先ず、最も早い描画順を示す「−２」が変数ｌａｙｅｒに設定されると、ルートノード（Ｒ）のマスクデータＭＳＫである「０１１１１」を見て、変数ｌａｙｅｒの設定値「−２」に対応する５ビット目が論理値「０」であるため、設定値「−２」についてのトラバースを行わない（スキップする）。
次に、ＣＰＵ１４は、変数ｌａｙｅｒに「−１」を設定する。
【００３７】
図１１は、変数ｌａｙｅｒに「−１」が設定された場合のＣＰＵ１４によるトラバース処理を説明するための図である。
図１１に示すように、ＣＰＵ１４は、例えば、ルートノード（Ｒ）の子であるブランチノード６０，６５のマスクデータＭＳＫである「０１０１１」，「００１００」を見て、変数ｌａｙｅｒの設定値「−１」に対応する４ビット目が論理値「１」を示すブランチノード６０を選択し、ブランチノード６５を選択しない。すなわち、ブランチノード６５の下層ノードのトラバースをスキップする。
次に、ＣＰＵ１４は、上記選択したブランチノード６０の子であるブランチノード６１，６２，６４のマスクデータＭＳＫである「０１０００」，「０００１１」，「０００１０」を見て、変数ｌａｙｅｒの設定値「−１」に対応する４ビット目が論理値「１」を示すブランチノード６１を選択し、ブランチノード６２，６４を選択しない。すなわち、ブランチノード６２，６４の下層ノードのトラバースをスキップする。
次に、ＣＰＵ１４は、上記選択したブランチノード６１の子であるリーフノード４１，４２，４３のレイヤー値である「０１０００」，「０１０００」，「０１０００」を見て、変数ｌａｙｅｒの設定値「−１」に対応する４ビット目が論理値「１」を示すリーフノード４１，４２，４３選択する。
次に、ＣＰＵ１４は、上記選択したリーフノード４１，４２，４３に割り当てられた画像オブジェクトデータを示す行列と、当該リーフノードからルートノード（Ｒ）までの経路に位置するブランチノード６０，６１に対応付けられた演算を示す行列とを、行列データＭＩＸとしてグラフィックアクセラレータ１１に出力する。
次に、ＣＰＵ１４は、変数ｌａｙｅｒに「０」を設定する。
【００３８】
図１２は、変数ｌａｙｅｒに「０」が設定された場合のＣＰＵ１４によるトラバース処理を説明するための図である。
図１２に示すように、ＣＰＵ１４は、例えば、ルートノード（Ｒ）の子であるブランチノード６０，６５のマスクデータＭＳＫである「０１０１１」，「００１００」を見て、変数ｌａｙｅｒの設定値「０」に対応する３ビット目が論理値「１」を示すブランチノード６５を選択し、ブランチノード６０を選択しない。すなわち、ブランチノード６０の下層ノードのトラバースをスキップする。
次に、ＣＰＵ１４は、上記選択したブランチノード６５の子であるブランチノード６６，６７のマスクデータＭＳＫである「００１００」，「００１００」を見て、変数ｌａｙｅｒの設定値「０」に対応する３ビット目が論理値「１」を示すブランチノード６６，６７を選択する。
次に、ＣＰＵ１４は、上記選択したブランチノード６６の子であるリーフノード４９，５０，５１，５２のレイヤー値である「００１００」，「００１００」，「００１００」，「００１００」を見て、変数ｌａｙｅｒの設定値「０」に対応する３ビット目が論理値「１」を示すリーフノード４９，５０，５１，５２を選択する。
次に、ＣＰＵ１４は、上記選択したブランチノード６７の子であるリーフノード５３，５４のレイヤー値である「００１００」，「００１００」を見て、変数ｌａｙｅｒの設定値「０」に対応する３ビット目が論理値「１」を示すリーフノード５３，５４を選択する。
次に、ＣＰＵ１４は、上記選択したリーフノード４９〜５４に割り当てられた画像オブジェクトデータを示す行列と、当該リーフノードからルートノード（Ｒ）までの経路に位置するブランチノード６５，６６，６７に対応付けられた演算を示す行列とを、行列データＭＩＸとしてグラフィックアクセラレータ１１に出力する。
次に、ＣＰＵ１４は、変数ｌａｙｅｒに「１」を設定する。
【００３９】
図１３は、変数ｌａｙｅｒに「１」が設定された場合のＣＰＵ１４によるトラバース処理を説明するための図である。
図１３に示すように、ＣＰＵ１４は、例えば、ルートノード（Ｒ）の子であるブランチノード６０，６５のマスクデータＭＳＫである「０１０１１」，「００１００」を見て、変数ｌａｙｅｒの設定値「１」に対応する２ビット目が論理値「１」を示すブランチノード６０を選択し、ブランチノード６５を選択しない。すなわち、ブランチノード６５の下層ノードのトラバースをスキップする。
次に、ＣＰＵ１４は、上記選択したブランチノード６０の子であるブランチノード６１，６２，６４のマスクデータＭＳＫである「０１０００」，「０００１１」，「０００１０」を見て、変数ｌａｙｅｒの設定値「１」に対応する２ビット目が論理値「１」を示すブランチノード６２，６４を選択する。すなわち、ブランチノード６１の下層ノードのトラバースをスキップする。
次に、ＣＰＵ１４は、上記選択したブランチノード６２の子であるブランチノード６３のマスクデータＭＳＫである「０００１１」を見て、変数ｌａｙｅｒの設定値「１」に対応する２ビット目が論理値「１」であるため、これを選択する。
次に、ＣＰＵ１４は、上記選択したブランチノード６３の子であるリーフノード４４，４５のレイヤー値ＶＬである「０００１０」，「００００１」を見て、変数ｌａｙｅｒの設定値「１」に対応する２ビット目が論理値「１」のリーフノード４４を選択し、リーフノード４５を選択しない。
一方、ＣＰＵ１４は、上記選択したブランチノード６２の子であるリーフノード４６，４７のレイヤー値ＶＬである「０００１０」，「０００１０」を見て、変数ｌａｙｅｒの設定値「１」に対応する２ビット目が論理値「１」であるため、これらを選択する。
また、ＣＰＵ１４は、上記選択したブランチノード６４の子であるリーフノード４８のレイヤー値ＶＬである「０００１０」を見て、変数ｌａｙｅｒの設定値「１」に対応する２ビット目が論理値「１」であるため、これを選択する。
次に、ＣＰＵ１４は、上記選択したリーフノード４４，４６，４７，４８に割り当てられた画像オブジェクトデータを示す行列と、当該リーフノードからルートノード（Ｒ）までの経路に位置するブランチノード６０，６２，６３，６４に対応付けられた演算を示す行列とを、行列データＭＩＸとしてグラフィックアクセラレータ１１に出力する。
次に、ＣＰＵ１４は、変数ｌａｙｅｒに「２」を設定する。
【００４０】
図１４は、変数ｌａｙｅｒに「２」が設定された場合のＣＰＵ１４によるトラバース処理を説明するための図である。
図１４に示すように、ＣＰＵ１４は、例えば、ルートノード（Ｒ）の子であるブランチノード６０，６５のマスクデータＭＳＫである「０１０１１」，「００１００」を見て、変数ｌａｙｅｒの設定値「２」に対応する１ビット目が論理値「１」を示すブランチノード６０を選択し、ブランチノード６５を選択しない。すなわち、ブランチノード６５の下層ノードのトラバースをスキップする。
次に、ＣＰＵ１４は、上記選択したブランチノード６０の子であるブランチノード６１，６２，６４のマスクデータＭＳＫである「０１０００」，「０００１１」，「０００１０」を見て、変数ｌａｙｅｒの設定値「２」に対応する１ビット目が論理値「１」を示すブランチノード６２を選択し、ブランチノード６１，６４を選択しない。すなわち、ブランチノード６１，６４の下層ノードのトラバースをスキップする。
次に、ＣＰＵ１４は、上記選択したブランチノード６２の子であるブランチノード６３のマスクデータＭＳＫである「０００１１」を見て、変数ｌａｙｅｒの設定値「２」に対応する１ビット目が論理値「１」であるため、これを選択する。
次に、ＣＰＵ１４は、上記選択したブランチノード６３の子であるリーフノード４４，４５のレイヤー値ＶＬである「０００１０」，「００００１」を見て、変数ｌａｙｅｒの設定値「２」に対応する１ビット目が論理値「１」のリーフノード４５を選択し、リーフノード４４を選択しない。
一方、ＣＰＵ１４は、上記選択したブランチノード６２の子であるリーフノード４６，４７のレイヤー値ＶＬである「０００１０」，「０００１０」を見て、変数ｌａｙｅｒの設定値「２」に対応する１ビット目が論理値「１」ではないため、これらを選択しない。
次に、ＣＰＵ１４は、上記選択したリーフノード４５に割り当てられた画像オブジェクトデータを示す行列と、当該リーフノードからルートノード（Ｒ）までの経路に位置するブランチノード６０，６２，６３に対応付けられた演算を示す行列とを、行列データＭＩＸとしてグラフィックアクセラレータ１１に出力する。
【００４１】
図１５は、ＣＰＵ１４によるトラバース処理を説明するためのフローチャートである。
以下、図１５に示す各ステップを説明する。
ステップＳＴ２１：
ＣＰＵ１４は、レイヤー値ＶＬの最小値であるｌａｙｅｒＭｉｎを変数ｌａｙｅｒに設定する。
ステップＳＴ２２：
ＣＰＵ１４は、図１０に示すシーングラフデータＳＣＥＮａのルートノード（Ｒ）に割り当てられたマスクデータＭＳＫの変数ｌａｙｅｒの設定値に対応するビットが論理値「１」であるか否かを判断し、論理値「１」である場合に、ステップＳＴ２３に進み、そうでない場合に、ステップＳＴ３２に進む。
ステップＳＴ２３：
ＣＰＵ１４は、シーングラフデータＳＣＥＮａ内のルートノ−ドＲの下層ノードのトラバースを開始する。
【００４２】
ステップＳＴ２４：
ＣＰＵ１４は、上記トラバースにより、ノードに到達する。
ステップＳＴ２５：
ＣＰＵ１４は、ステップＳＴ２４で到達したノードがブランチノード（Ｂ）であるか否かを判断し、ブランチノード（Ｂ）である場合にステップＳＴ２７に進み、そうでない場合にステップＳＴ２６に進む。
ステップＳＴ２６：
ＣＰＵ１４は、ステップＳＴ２４で到達したノードがルートノード（Ｒ）であるか否かを判断し、ルートノード（Ｒ）である場合にステップＳＴ３２に進み、そうでない場合にステップＳＴ２９に進む。
【００４３】
ステップＳＴ２７：
ＣＰＵ１４は、ステップＳＴ２４で到達したブランチノード（Ｂ）のマスクデータＭＳＫのうち、変数ｌａｙｅｒの設定値に対応するビットが論理値「１」を示すか否かを判断し、論理値「１」を示す場合には、当該ブランチノード（Ｂ）の下層ノードのトラバースに進む。
一方、ＣＰＵ１４は、変数ｌａｙｅｒの設定値に対応するビットが論理値「１」を示さないと判断した場合には、ステップＳＴ２８に進む。
ステップＳＴ２８：
ＣＰＵ１４は、ステップＳＴ２４で到達した上記ブランチノード（Ｂ）の下層ノードのトラバースに行わない（スキップする）。
ＣＰＵ１４は、ステップＳＴ２８の処理を終了した後に、再び、シーングラフデータＳＣＥＮａ内の上記スキップした下層ノード以外のノードのトラバースを行う。
【００４４】
ステップＳＴ２９：
ＣＰＵ１４は、ステップＳＴ２４で到達したノードがリーフノード（Ｌ）であると判断する。
ステップＳＴ３０：
ＣＰＵ１４は、ステップＳＴ２４で到達したリーフノード（Ｌ）に対応付けられたレイヤー値ＶＬのうち、変数ｌａｙｅｒ値の設定値に対応するビットが論理値「１」であるか否かを判断し、論理値「１」である場合にステップＳＴ３１に進み、そうでない場合にステップＳＴ２３に戻る。
ステップＳＴ３１：
ＣＰＵ１４は、ステップＳＴ２４で到達したリーフノード（Ｌ）に割り当てられた画像オブジェクトデータを示す行列と、当該リーフノードからルートノード（Ｒ）までの経路に位置するブランチノードに対応付けられた演算を示す行列とを行列データＭＩＸとしてグラフィックアクセラレータ１１に出力する。すなわち、ＣＰＵ１４は、当該リーフノード（Ｌ）に対応した描画処理をグラフィックアクセラレータ１１に行わせる。
【００４５】
ステップＳＴ３２：
ＣＰＵ１４は、変数ｌａｙｅｒの設定値が、レイヤー値ＶＬの最大値であるｌａｙｅｒＭａｘであるか否かを判断し、そうである場合に処理をシーングラフデータＳＣＥＮａについて処理を終了し、そうでない場合にステップＳＴ３３に進む。
ステップＳＴ３３：
ＣＰＵ１４は、変数ｌａｙｅｒに「１」を加算して変数ｌａｙｅｒを更新し、続いて、ステップＳＴ２２の処理に進む。
【００４６】
以上説明したように、データ処理装置１によれば、ＣＰＵ１４がライブラリプログラムＬＩＢに従って上述したようにシーングラフデータＳＣＥＮのトラバースのスキップを必要に応じて行うことで、各レイヤー値ＶＬ毎にシーングラフデータＳＣＥＮ内の全てのノードをトラバースする従来のシステムに比べて、トラバースに伴う処理量を削減でき、処理時間を短縮できる。そのため、携帯電話などのＣＰＵのパフォーマンスが低い機器にも導入できる。
また、データ処理装置１によれば、マスクデータＭＳＫの生成を上述したように論理和演算で規定することで、その処理を短時間で行うことができる。
【００４７】
＜第２実施形態＞
本実施形態のデータ処理装置は、ライブラリプログラムに基づくＣＰＵの処理を除いて、第１実施形態のデータ処理装置１と同じである。
図６に示すように、データ処理装置１ａは、例えば、入力部１０、グラフィックアクセラレータ１１、モニタ１２、メモリ１３ａおよびＣＰＵ１４ａを有する。
図６において、第１実施形態と同じ符号を付した入力部１０、グラフィックアクセラレータ１１およびモニタ１２は第１実施形態で説明したものと同じである。
データ処理装置１ａのメモリ１３ａは、プログラムＰＲＧと、ライブラリプログラムＬＩＢａを記憶する。
【００４８】
ＣＰＵ１４ａは、メモリ１３ａから読み出したライブラリプログラムＬＩＢａを基に以下にマーク値ＭＡＲＫの生成処理、並びに行列データＭＩＸの生成処理を行う。
図１６は、ＣＰＵ１４ａが、ライブラリプログラムＬＩＢａに従って実行する処理の手順を説明するためのフロ−チャートである。
図１６に示すように、ＣＰＵ１４ａは、プログラムＰＲＧからシーングラフデータＳＣＥＮを入力する（ステップＳＴ５１）。
次に、ＣＰＵ１４ａは、シーングラフデータＳＣＥＮを構成するルートノード（Ｒ）およびブランチノード（Ｂ）にマーク値ＭＡＲＫを対応付けてシーングラフデータＳＣＥＮｂを生成する（ステップＳＴ５２）。
次に、ＣＰＵ１４ａは、シーングラフデータＳＣＥＮｂのマーク値ＭＡＲＫを基に、シーングラフデータＳＣＥＮｂを構成するブランチノードおよびリーフノードをトレースして、描画するオブジェクトの行列データＭＩＸを生成し、これをグラフィックアクセラレータ１１に出力する（ステップＳＴ３）。
【００４９】
以下、図１６に示すマーク値ＭＡＲＫの生成処理（ステップＳＴ５２）と、行列データＭＩＸの生成処理（ステップＳＴ５３）を詳細に説明する。
〔マーク値ＭＡＲＫの生成処理（ステップＳＴ５２）〕
ＣＰＵ１４ａは、前述したように、ライブラリプログラムＬＩＢａを基に、以下に示すように、マーク値ＭＡＲＫの生成処理を行う。
ＣＰＵ１４ａは、レイヤー値ＶＬの範囲をｌａｙｅｒＭｉｎ（最小）〜ｌａｙｅｒＭａｘ（最大）とする。
ＣＰＵ１４ａは、図４に示すシーングラフデータＳＣＥＮをトラバースし、ルートノード（Ｒ）および各ブランチノード（Ｂ）について、リーフノード（Ｌ）に近い順からマーク値ＭＡＲＫを決定する。
ＣＰＵ１４は、各ブランチノード（Ｂ）について、当該ブランチノード（Ｂ）の子であるリーフノード（Ｌ）およびブランチノード（Ｂ）に割り当てられたレイヤー値ＶＬのうち、最も小さい（優先順位が高い）レイヤー値ＶＬを特定し、当該特定したレイヤー値ＶＬを示すマーク値ＭＡＲＫを、当該ブランチノード（Ｂ）に対応付ける。
ＣＰＵ１４ａは、ルートノード（Ｒ）につても同様に、マーク値ＭＡＲＫを対応付ける。
具体的には、ＣＰＵ１４ａは、図１７に示すように、ルートノード（Ｒ）および各ブランチノード（Ｂ）のマーク値ＭＡＲＫを対応付ける。
【００５０】
例えば、ブランチノード６１のマーク値ＭＡＲＫは、リーフノード４１，４２，４３のレイヤー値ＶＬが全て「−１」であるため、「−１」となる。
また、ブランチノード６０のマーク値ＭＡＲＫは、ブランチノード６１，６２，６３のマーク値ＭＡＲＫがそれぞれ「−１」，「１」，「１」であるため、最も小さい「−１」となる。
ＣＰＵ１４ａは、上述した演算を、シーングラフデータＳＣＥＮを構成するルートノード（Ｒ）および全てのブランチノード（Ｂ）について再帰的に行い、図１７に示すように、ルートノード（Ｒ）および全てのブランチノード（Ｂ）のマーク値ＭＡＲＫを生成し、これを対応するルートノード（Ｒ）およびブランチノード（Ｂ）に割り当てて、図１７に示す新たなシーングラフデータＳＣＥＮｂを生成する。
【００５１】
〔行列データＭＩＸの生成処理（ステップＳＴ５３）〕
ＣＰＵ１４ａは、前述したように、ライブラリプログラムＬＩＢａに従って、ステップＳＴ５２で生成された図１７に示すシーングラフデータＳＣＥＮｂを基に、以下に示すように、行列データＭＩＸの生成処理を行う。
ＣＰＵ１４ａは、変数ｌａｙｅｒに、レイヤー値ＶＬのｌａｙｅｒＭｉｎ（最小）からｌａｙｅｒＭａｘ（最大）を順に選択して設定する。
ＣＰＵ１４ａは、変数ｌａｙｅｒにレイヤー値ＶＬを設定する度に、以下に示すように図１７に示すシーングラフデータＳＣＥＮｂをトラバースする。
すなわち、ＣＰＵ１４ａは、図１７に示すシーングラフデータＳＣＥＮｂのトラバースを、ルートノード（Ｒ）から開始する。
ＣＰＵ１４ｂは、ルートノード（Ｒ）の子となるブランチノード（Ｂ）のうち、当該ブランチノード（Ｂ）に割り当てられたマーク値ＭＡＲＫと変数ｌａｙｅｒが示すレイヤー値ＶＬ（選択されたレイヤー）とが一致するブランチノード（Ｂ）を選択する。
【００５２】
そして、ＣＰＵ１４ａは、上記選択したブランチノード（Ｂ）について、その下層のブランチノード（Ｂ）およびリーフノード（Ｌ）のトラバースを行う。
一方、ＣＰＵ１４ａは、上記選択しないブランチノード（Ｂ）についてはその下層のブランチノード（Ｂ）およびリーフノード（Ｌ）のトラバースを行わない（すなわち、トラースをスキップする）。これにより、変数ｌａｙｅｒを更新する度に、全てのリーフノード（Ｌ）をトラバースする必要がなくなり、処理負荷の軽減、処理時間の短縮を図れる。
ＣＰＵ１４ａは、上記トラバースにより、選択したリーフノード（Ｌ）に対応した行列データＭＩＸをグラフィックアクセラレータ１１に出力した後に、当該選択したリーフノード（Ｌ）に対応付けられたマーク値ＭＡＲＫを、変数ｌａｙｅｒの設定範囲より大きい値、例えば「１００」に更新する。
【００５３】
以下、ＣＰＵ１４ａが、変数ｌａｙｅｒに「−２」〜「２」を順に設定して行うトラバース処理を説明する。
変数ｌａｙｅｒに「−２」が設定された場合：
ＣＰＵ１４ａは、ルートノード（Ｒ）のマーク値ＭＡＲＫである「−１」を見て、変数ｌａｙｅｒの設定値「−１」と一致しないため、その下層ノードのトラバースをスキップする。
次に、ＣＰＵ１４ａは、変数ｌａｙｅｒに「−１」を設定する。
【００５４】
変数ｌａｙｅｒに「−１」が設定された場合：
変数ｌａｙｅｒに「−１」が設定された場合に、ＣＰＵ１４ａは、例えば、図１７に示すルートノード（Ｒ）の子であるブランチノード６０，６５のマーク値ＭＡＲＫである「−１」，「０」を見て、変数ｌａｙｅｒの設定値「−１」と一致するブランチノード６０を選択し、ブランチノード６５を選択しない。すなわち、ブランチノード６５の下層ノードのトラバースをスキップする。
次に、ＣＰＵ１４ａは、上記選択したブランチノード６０の子であるブランチノード６１，６２，６４のマーク値ＭＡＲＫである「−１」，「１」，「１」を見て、変数ｌａｙｅｒの設定値「−１」と一致するブランチノード６１を選択し、ブランチノード６２，６４を選択しない。すなわち、ブランチノード６２，６４の下層ノードのトラバースをスキップする。
次に、ＣＰＵ１４ａは、上記選択したブランチノード６１の子であるリーフノード４１，４２，４３のレイヤー値である「−１」，「−１」，「−１」を見て、変数ｌａｙｅｒの設定値「−１」と一致するリーフノード４１，４２，４３選択する。
次に、ＣＰＵ１４ａは、上記選択したリーフノード４１，４２，４３に割り当てられた画像オブジェクトデータを示す行列と、当該リーフノードからルートノード（Ｒ）までの経路に位置するブランチノード６０，６１に対応付けられた演算を示す行列とを、行列データＭＩＸとしてグラフィックアクセラレータ１１に出力する。
そして、ＣＰＵ１４ａは、図１８に示すように、下層に位置するリーフノード（Ｌ）が全て選択されたブランチノード６１のマーク値ＭＡＲＫを「１００」に更新する。
【００５５】
変数ｌａｙｅｒに「０」が設定された場合：
変数ｌａｙｅｒに「０」が設定された場合に、ＣＰＵ１４ａは、図１８に示すシーングラフデータＳＣＥＮｂのルートノード（Ｒ）の子であるブランチノード６０，６５のマーク値ＭＡＲＫである「１」，「０」を見て、変数ｌａｙｅｒの設定値「０」と一致するブランチノード６５を選択し、ブランチノード６０を選択しない。すなわち、ブランチノード６０の下層ノードのトラバースをスキップする。
次に、ＣＰＵ１４ａは、上記選択したブランチノード６５の子であるブランチノード６６，６７のマーク値ＭＡＲＫである「０」，「０」を見て、変数ｌａｙｅｒの設定値「０」と一致するため、ブランチノード６６，６７の双方を選択する。
次に、ＣＰＵ１４ａは、上記選択したブランチノード６６の子であるリーフノード４９，５０，５１，５２のレイヤー値である「０」，「０」，「０」，「０」を見て、変数ｌａｙｅｒの設定値「０」と一致するため、これらを全て選択する。
次に、ＣＰＵ１４ａは、上記選択したブランチノード６７の子であるリーフノード５３，５４のレイヤー値である「０」，「０」を見て、変数ｌａｙｅｒの設定値「０」と一致するため、これらを全て選択する。
次に、ＣＰＵ１４ａは、上記選択したリーフノード４９〜５４に割り当てられた画像オブジェクトデータを示す行列と、当該リーフノードからルートノード（Ｒ）までの経路に位置するブランチノード６５，６６，６７に対応付けられた演算を示す行列とを、行列データＭＩＸとしてグラフィックアクセラレータ１１に出力する。
そして、ＣＰＵ１４ａは、図１９に示すように、下層に位置するリーフノード（Ｌ）が全て選択されたブランチノード６５，６６，６７のマーク値ＭＡＲＫを「１００」に更新する。
【００５６】
変数ｌａｙｅｒに「１」が設定された場合：
変数ｌａｙｅｒに「１」が設定された場合に、ＣＰＵ１４ａは、例えば、図１９に示すシーングラフデータＳＣＥＮｂのルートノード（Ｒ）の子であるブランチノード６０，６５のマーク値ＭＡＲＫである「１」，「１００」を見て、変数ｌａｙｅｒの設定値「１」と一致するブランチノード６０を選択し、ブランチノード６５を選択しない。すなわち、ブランチノード６５の下層ノードのトラバースをスキップする。
次に、ＣＰＵ１４ａは、上記選択したブランチノード６０の子であるブランチノード６１，６２，６４のマーク値ＭＡＲＫである「１００」，「１」，「１」を見て、変数ｌａｙｅｒの設定値「１」と一致するため、ブランチノード６２，６４を選択し、ブランチノード６１を選択しない。すなわち、ブランチノード６１の下層ノードのトラバースをスキップする。
次に、ＣＰＵ１４ａは、上記選択したブランチノード６２の子であるブランチノード６３のマーク値ＭＡＲＫである「１」を見て、変数ｌａｙｅｒの設定値「１」と一致するため、ブランチノード６３を選択する。
次に、ＣＰＵ１４ａは、上記選択したブランチノード６３の子であるリーフノード４４，４５のレイヤー値ＶＬである「１」，「２」を見て、変数ｌａｙｅｒの設定値「１」と一致するリーフノード４４を選択し、リーフノード４５を選択しない。
一方、ＣＰＵ１４ａは、上記選択したブランチノード６２の子であるリーフノード４６，４７のレイヤー値ＶＬである「１」，「１」を見て、変数ｌａｙｅｒの設定値「１」と一致するため、リーフノード４６，４７を選択する。
また、ＣＰＵ１４ａは、上記選択したブランチノード６４の子であるリーフノード４８のレイヤー値ＶＬである「１」を見て、変数ｌａｙｅｒの設定値「１」と一致するため、リーフノード４８を選択する。
次に、ＣＰＵ１４ａは、上記選択したリーフノード４４，４６，４７，４８に割り当てられた画像オブジェクトデータを示す行列と、当該リーフノードからルートノード（Ｒ）までの経路に位置するブランチノード６０，６２，６３，６４に対応付けられた演算を示す行列とを、行列データＭＩＸとしてグラフィックアクセラレータ１１に出力する。
そして、ＣＰＵ１４ａは、図２０に示すように、下層に位置するリーフノード（Ｌ）が全て選択されたブランチノード６４のマーク値ＭＡＲＫを「１００」に更新する。
【００５７】
変数ｌａｙｅｒに「２」が設定された場合：
変数ｌａｙｅｒに「２」が設定された場合に、ＣＰＵ１４ａは、例えば、図２０に示すシーングラフデータＳＣＥＮｂのルートノード（Ｒ）の子であるブランチノード６０，６５のマーク値ＭＡＲＫである「２」，「１００」を見て、変数ｌａｙｅｒの設定値「２」と一致するブランチノード６０を選択し、ブランチノード６５を選択しない。
次に、ＣＰＵ１４ａは、上記選択したブランチノード６０の子であるブランチノード６１，６２，６４のマーク値ＭＡＲＫである「１００」，「２」，「１００」を見て、変数ｌａｙｅｒの設定値「２」と一致するブランチノード６２を選択し、ブランチノード６１，６４を選択しない。すなわち、ブランチノード６１，６４の下層ノードのトラバースをスキップする。
次に、ＣＰＵ１４ａは、上記選択したブランチノード６２の子であるブランチノード６３のマーク値ＭＡＲＫである「２」を見て、変数ｌａｙｅｒの設定値「２」と一致するため、これを選択する。
次に、ＣＰＵ１４ａは、上記選択したブランチノード６３の子であるリーフノード４４，４５のレイヤー値ＶＬである「１」，「２」を見て、変数ｌａｙｅｒの設定値「２」と一致するリーフノード４５を選択し、リーフノード４４を選択しない。
一方、ＣＰＵ１４ａは、上記選択したブランチノード６２の子であるリーフノード４６，４７のレイヤー値ＶＬである「１」，「１」を見て、変数ｌａｙｅｒの設定値「２」と一致しないため、これらを選択しない。
次に、ＣＰＵ１４ａは、上記選択したリーフノード４５に割り当てられた画像オブジェクトデータを示す行列と、当該リーフノードからルートノード（Ｒ）までの経路に位置するブランチノード６０，６２，６３に対応付けられた演算を示す行列とを、行列データＭＩＸとしてグラフィックアクセラレータ１１に出力する。
そして、ＣＰＵ１４ａは、図２１に示すように、下層に位置するリーフノード（Ｌ）が全て選択されたルートノード（Ｒ）およびブランチノード６０，６２，６３のマーク値ＭＡＲＫを「１００」に更新する。
【００５８】
図２２は、ＣＰＵ１４ａによるトラバース処理を説明するためのフローチャートである。  以下、図２２に示す各ステップを説明する。
ステップＳＴ８１：
ＣＰＵ１４ａは、ルートノード（Ｒ）に対応付けられたマーク値ＭＡＲＫを、ｌａｙｅｒＭｉｎを変数ｌａｙｅｒに設定する。
ステップＳＴ８２：
ＣＰＵ１４ａは、図１７に示すシーングラフデータＳＣＥＮｂ内のルートノ−ドＲの下層ノードのトラバースを開始する。
【００５９】
ステップＳＴ８３：
ＣＰＵ１４ａは、上記トラバースにより、ノードに到達する。
ステップＳＴ８４：
ＣＰＵ１４ａは、ステップＳＴ８３で到達したノードがブランチノード（Ｂ）であるか否かを判断し、ブランチノード（Ｂ）である場合にステップＳＴ８７に進み、そうでない場合にステップＳＴ８５に進む。
ステップＳＴ８５：
ＣＰＵ１４ａは、ステップＳＴ８３で到達したノードがルートノード（Ｒ）であるか否かを判断し、ルートノード（Ｒ）である場合にステップＳＴ９２に進み、そうでない場合にステップＳＴ８６に進む。
ステップＳＴ８６：
ＣＰＵ１４ａは、ステップＳＴ８３で到達したノードがリーフノード（Ｌ）であると判断する。
ステップＳＴ８７：
ＣＰＵ１４ａは、ステップＳＴ８３で到達したノードのマーク値ＭＡＲＫが、変数ｌａｙｅｒの設定値と一致するか否かを判断し、一致する場合にステップＳＴ８９に進み、一致しない場合にステップＳＴ８８に進む。
【００６０】
ステップＳＴ８８：
ＣＰＵ１４ａは、ステップＳＴ８３で到達した上記ブランチノード（Ｂ）の下層ノードのトラバースに行わない（スキップする）。
ＣＰＵ１４ａは、ステップＳＴ８８の処理を終了した後に、再び、シーングラフデータＳＣＥＮｂ内の上記スキップした下層ノード以外のノードのトラバースを行う。
ステップＳＴ８９：
ＣＰＵ１４ａは、ステップＳＴ８３で到達したノード（ブランチノード（Ｂ））の下層のトラバースに進む。
【００６１】
ステップＳＴ９０：
ＣＰＵ１４ａは、ステップＳＴ８３で到達したリーフノード（Ｌ）に対応付けられたマーク値ＭＡＲＫと、変数ｌａｙｅｒ値の設定値とが一致するか否かを判断し、一致する場合にステップＳＴ９１に進む。
一方、ＣＰＵ１４ａは、上記一致しない場合に、ステップＳＴ８２に進み、他の下層ノードをトラバースする。
ステップＳＴ９１：
ＣＰＵ１４ａは、ステップＳＴ８３で到達したリーフノード（Ｌ）に割り当てられた画像オブジェクトデータを示す行列と、当該リーフノードからルートノード（Ｒ）までの経路に位置するブランチノードに対応付けられた演算を示す行列とを行列データＭＩＸとしてグラフィックアクセラレータ１１に出力する。すなわち、ＣＰＵ１４ａは、当該リーフノード（Ｌ）に対応した描画処理をグラフィックアクセラレータ１１に行わせる。
【００６２】
ステップＳＴ９２：
ＣＰＵ１４ａは、最終的に描画を行ったリーフノード（Ｌ）を基に、下層に位置するリーフノード（Ｌ）が全て選択されたルートノード（Ｒ）およびブランチノードのマーク値ＭＡＲＫを「１００」に更新する。
ステップＳＴ９３：
ＣＰＵ１４ａは、ルートノード（Ｒ）のマーク値ＭＡＲＫが、レイヤー値ＶＬの最大値であるｌａｙｅｒＭａｘであるか否かを判断し、そうである場合に処理をシーングラフデータＳＣＥＮｂについて処理を終了し、そうでない場合にステップＳＴ８１に進む。
【００６３】
本実施形態のデータ処理装置１ａによれば、ＣＰＵ１４ａがライブラリプログラムＬＩＢａに従って上述したようにシーングラフデータＳＣＥＮのトラバースのスキップを必要に応じて行うことで、各レイヤー値ＶＬ毎にシーングラフデータＳＣＥＮ内の全てのノードをトラバースする従来のシステムに比べて、トラバースに伴う処理量を削減でき、処理時間を短縮できる。そのため、携帯電話などのＣＰＵのパフォーマンスが低い機器にも導入できる。
また、データ処理装置１ａによれば、ビット演算を伴わないため、ビット演算をサポートしていないプログラム言語でも実装できる。
【００６４】
上述した第１および第２実施形態は、例えばシーングラフに含まれるノードのうち、大部分のノードのレイヤー値がデフォルトの値で、一部にのみ局所的に他の値が設定されている場合や、使われているレイヤーの数が少数の場合、さらには全てのノードのレイヤー値がデフォルトの値の場合など、シーングラフの構成によってはソート処理を行わなくて良い分、ソートアルゴリズムよりもパフォーマンスが良い。
さらに、シーングラフの一部分のみを描画する場合でも全く同じ手順でよく、アルゴリズムが簡潔なこととあわせ、プログラムサイズを小さくすることができる。これは携帯電話など計算機のリソースが限られた環境に対しては有効な実装方法である。
【産業上の利用可能性】
【００６５】
本発明は、例えば、３次元画像の表示を行うデータ処理装置に適用可能である。
【図面の簡単な説明】
【００６６】
【図１】図１は、シーングラフの一例を模式的に表した図である。
【図２】図２は、図１のシーングラフをトラバースする様子を模式的に示したものである。
【図３】図３は、ブランチノードを用いたシーングラフの一例を説明するための図である。
【図４】図４は、本発明の関連技術を説明するたべの図である。
【図５】図５は、本発明の関連技術を説明するたべの図である。
【図６】図６は、本発明の第１実施形態に係わるデータ処理装置の構成図である。
【図７】図７は、図６に示すデータ処理装置の処理手順を説明するための図である。
【図８】図８は、図６に示すＣＰＵが、ライブラリプログラムに従って実行する処理の手順を説明するためのフロ−チャートである。
【図９】図９は、図６に示すＣＰＵが、プログラムＲＰＧを基に生成するシーングラフを説明するための図である。
【図１０】図１０は、図６に示すＣＰＵが、ライブラリプログラムを基に生成するシーングラフデータを説明するための図である。
【図１１】図１１は、変数ｌａｙｅｒに「−１」が設定された場合の図６に示すＣＰＵによるトラバース処理を説明するための図である。
【図１２】図１２は、変数ｌａｙｅｒに「０」」が設定された場合の図６に示すＣＰＵによるトラバース処理を説明するための図である。
【図１３】図１３は、変数ｌａｙｅｒに「１」が設定された場合の図６に示すＣＰＵによるトラバース処理を説明するための図である。
【図１４】図１４は、変数ｌａｙｅｒに「２」が設定された場合の図６に示すＣＰＵによるトラバース処理を説明するための図である。
【図１５】図１５は、本発明の第１実施形態において図６に示すＣＰＵによるトラバース処理を説明するためのフローチャートである。
【図１６】図１６は、本発明の第２実施形態におけるデータ処理装置の処理手順を説明するためのフローチャートである。
【図１７】図１７は、本発明の第２実施形態におけるデータ処理装置が、ライブラリプログラムに従って生成するシーングラフデータを説明するための図である。
【図１８】図１８は、本発明の第２実施形態において、変数ｌａｙｅｒに「−１」についての処理が完了した後のシーングラフの各ノードに割り当てられたマーク値を説明するための図である。
【図１９】図１９は、本発明の第２実施形態において、変数ｌａｙｅｒに「０」についての処理が完了した後のシーングラフの各ノードに割り当てられたマーク値を説明するための図である。
【図２０】図２０は、本発明の第２実施形態において、変数ｌａｙｅｒに「１」についての処理が完了した後のシーングラフの各ノードに割り当てられたマーク値を説明するための図である。
【図２１】図２１は、本発明の第２実施形態において、変数ｌａｙｅｒに「２」についての処理が完了した後のシーングラフの各ノードに割り当てられたマーク値を説明するための図である。
【図２２】図２２は、本発明の第２実施形態においてＣＰＵによるトラバース処理を説明するためのフローチャートである。
【符号の説明】
【００６７】
１，１ａ…データ処理装置、１０…入力部、１１…グラフィックアクセラレータ、１２…モニタ、１３，１３ａ…メモリ、１４，１４ａ…ＣＰＵ、ＰＲＧ…プログラム、ＬＩＢ，ＬＩＢａ…ライブラリプログラム
【図１】
2005250799.tif 000003
【図２】
2005250799.tif 000004
【図３】
2005250799.tif 000005
【図４】
2005250799.tif 000006
【図５】
2005250799.tif 000007
【図６】
2005250799.tif 000008
【図７】
2005250799.tif 000009
【図８】
2005250799.tif 000010
【図９】
2005250799.tif 000011
【図１０】
2005250799.tif 000012
【図１１】
2005250799.tif 000013
【図１２】
2005250799.tif 000014
【図１３】
2005250799.tif 000015
【図１４】
2005250799.tif 000016
【図１５】
2005250799.tif 000017
【図１６】
2005250799.tif 000018
【図１７】
2005250799.tif 000019
【図１８】
2005250799.tif 000020
【図１９】
2005250799.tif 000021
【図２０】
2005250799.tif 000022
【図２１】
2005250799.tif 000023
【図２２】
2005250799.tif 000024