(57)【要約】【課題】制御部と描画処理部を含む画像処理装置において、描画処理に係る制御部の負荷を低減する。【解決手段】ＣＰＵ１８は、木構造４０において、根ノードであるノード４２ｒから、描画対象のｔｉｌｅ０に対応するノード４２ｔへ向かう経路に含まれる複数のノード４２であって、平行移動及び拡大縮小のいずれかを示すアフィン行列Ｌが定義された上位ノード群（４２ｒ、４２ｆ、４２）を識別する。ＣＰＵ１８は、上位ノード群の複数のアフィン行列の上位行列積Ｇｂｇ＝Ｌｒｏｏｔ・Ｌｆｉｅｌｄ・Ｌｂｇを演算し、上位行列積Ｇｂｇ、及び、下位ノード４２ｔに定義されたアフィン行列Ｌｔｉｌｅ０をＧＰＵ２０に送信する。ＧＰＵ２０は、上位行列積Ｇｂｇと下位ノードのアフィン行列Ｌｔｉｌｅ０との行列積Ｇｔｉｌｅ０＝Ｇｂｇ・Ｌｔｉｌｅ０を演算し、行列積Ｇｔｉｌｅ０に基づいてｔｉｌｅ０の描画位置を特定する。【選択図】図６
2019219985.tif 000002
【特許請求の範囲】
【請求項１】
複数の描画要素に対応する複数のノードを含み、各ノードにアフィン行列が定義された木構造で表される画面の描画処理を行う画像処理装置であって、
前記木構造の根ノードは表示画像全体に対応し、
前記根ノードに定義された前記アフィン行列は、表示部上における前記表示画像全体のアフィン変換を表し、
前記根ノード以外の各ノードに定義された前記アフィン行列は、親ノードに対応する前記描画要素に対する相対的な位置関係においての、当該ノードに対応する前記描画要素のアフィン変換を表し、
前記画像処理装置は、
前記根ノードからの経路に含まれる複数の前記ノードから構成される上位ノード群であって、平行移動及び拡大縮小のいずれかを示すアフィン行列が定義されたノードで構成される上位ノード群に定義された複数の前記アフィン行列の積である上位行列積を演算し、前記上位行列積と、前記上位ノード群の末端ノードの子ノードから、前記末端ノードの下位にある対象ノードまでの経路に含まれる１又は複数の下位ノードに定義された１又は複数の前記アフィン行列を描画処理部へ送信する制御部と、
前記上位行列積と、前記下位ノードに定義された前記アフィン行列との積を演算することで、前記対象ノードに対応する前記描画要素の前記表示部上の描画位置を特定して、当該描画要素の描画を行う描画処理部と、
を備えることを特徴とする画像処理装置。
【請求項２】
前記木構造に含まれる複数のノードに定義されたアフィン行列を解析することで、前記上位ノード群を特定する上位ノード群特定部、
をさらに備えることを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記上位ノード群特定部は、前記木構造の変動に応じて、前記上位ノード群に含まれるノードを変更する、
ことを特徴とする請求項２に記載の画像処理装置。
【請求項４】
前記表示部上の入力位置を指定した入力をユーザから受け付ける入力部と、
をさらに備え、
前記制御部は、前記上位行列積と、前記下位ノードに定義された前記アフィン行列との積の逆行列に基づいて、各前記ノードに対応する前記描画要素における前記入力位置の相対位置を演算し、演算された相対位置に基づいて、前記入力位置に対応する前記ノードを特定する、
ことを特徴とする請求項１から３のいずれか１項に記載の画像処理装置。
【請求項５】
複数の描画要素に対応する複数のノードを含み、各ノードにアフィン行列が定義された木構造で表される画面の描画処理を行う画像処理プログラムであって、
前記木構造の根ノードは表示画像全体に対応し、
前記根ノードに定義された前記アフィン行列は、表示部上における前記表示画像全体のアフィン変換を表し、
前記根ノード以外の各ノードに定義された前記アフィン行列は、親ノードに対応する前記描画要素に対する相対的な位置関係においての、当該ノードに対応する前記描画要素のアフィン変換を表し、
コンピュータを、
前記根ノードからの経路に含まれる複数の前記ノードから構成される上位ノード群であって、平行移動及び拡大縮小のいずれかを示すアフィン行列が定義されたノードで構成される上位ノード群に定義された複数の前記アフィン行列の積である上位行列積を演算し、前記上位行列積と、前記上位ノード群の末端ノードの子ノードから、前記末端ノードの下位にある対象ノードまでの経路に含まれる１又は複数の下位ノードに定義された１又は複数の前記アフィン行列を描画処理部へ送信する制御部と、
前記上位行列積と、前記下位ノードに定義された前記アフィン行列との積を演算することで、前記対象ノードに対応する前記描画要素の前記表示部上の描画位置を特定して、当該描画要素の描画を行う描画処理部と、
として機能させることを特徴とするプログラム。
【請求項６】
複数の描画要素に対応する複数のノードを含み、各ノードにアフィン行列が定義された木構造で表される画面の描画処理を行う画像処理方法であって、
前記木構造の根ノードは表示画像全体に対応し、
前記根ノードに定義された前記アフィン行列は、表示部上における前記表示画像全体のアフィン変換を表し、
前記根ノード以外の各ノードに定義された前記アフィン行列は、親ノードに対応する前記描画要素に対する相対的な位置関係においての、当該ノードに対応する前記描画要素のアフィン変換を表し、
前記画像処理方法は、
制御部が、前記根ノードからの経路に含まれる複数の前記ノードから構成される上位ノード群であって、平行移動及び拡大縮小のいずれかを示すアフィン行列が定義されたノードで構成される上位ノード群に定義された複数の前記アフィン行列の積である上位行列積を演算し、前記上位行列積と、前記上位ノード群の末端ノードの子ノードから、前記末端ノードの下位にある対象ノードまでの経路に含まれる１又は複数の下位ノードに定義された１又は複数の前記アフィン行列を描画処理部へ送信する上位行列積演算ステップと、
描画処理部が、前記上位行列積と、前記下位ノードに定義された前記アフィン行列との積を演算することで、前記対象ノードに対応する前記描画要素の前記表示部上の描画位置を特定して、当該描画要素の描画を行う描画処理ステップと、
を含むことを特徴とする画像処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理装置、画像処理プログラム、及び、画像処理方法に関する。
【背景技術】
【０００２】
従来、表示部に表示させる画面の描画処理を行う画像処理装置が知られている。画像処理装置は、ユーザからの入力の受付を含む一般的な処理及び描画処理を行う制御部（例えばＣＰＵ（Central Processing Unit））と、描画処理を専門に行う描画処理部（例えばＧＰＵ（Graphics Processing Unit））とを含んで構成される場合がある。
【０００３】
例えば、特許文献１には、ゲームを提供するゲーム装置であって、ゲームの進行処理あるいはユーザがタッチしているタッチパネルの位置を取得する処理などを含む処理を実行するＣＰＵと、ゲーム画面の描画処理を行うＧＰＵを含むゲーム装置が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−７８６４９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
制御部と描画処理部を含む画像処理装置においては、描画処理は、制御部と描画処理部の双方で実行されるのが一般的である。通常、描画処理の処理能力は、制御部よりも描画処理部の方が優れている（高速に処理できる）。また、制御部は、描画処理以外にも種々の処理（入力検出処理など）を行う必要がある。したがって、描画処理において制御部の負荷が高いと、制御部がボトルネックとなって描画処理が遅れるなどの不具合が生じ得る。
【０００６】
このことに鑑み、制御部と描画処理部を含む画像処理装置において、描画処理に係る制御部の負荷を低減させたいという要望がある。
【０００７】
描画処理に係る制御部の負荷を低減させるべく、描画処理の全てを描画処理部に行わせることが考えられる。しかしながら、描画処理の全てを描画処理部が行う場合、制御部が画像に含まれる各描画要素（例えばオブジェクト）の描画位置を把握できなくなるという問題が生じ得る。制御部が各描画要素の描画位置を把握できないと、ユーザが表示上の入力位置を指定した上で入力を行った場合に、入力位置に描画された描画要素（ユーザ指定の描画要素）を制御部が識別できなくなるなどの問題が生じる。なお、描画処理の全てを描画処理部に行わせた上で、描画処理部から各描画要素の位置を制御部に逐一知らせることも考えられるが、これを行うと、制御部と描画処理部との間の通信負荷が増大し、かえって描画処理が遅くなることも考えられるため適切ではない。
【０００８】
本発明の目的は、制御部と描画処理部を含む画像処理装置において、描画処理に係る制御部の負荷を低減することにある。
【課題を解決するための手段】
【０００９】
本発明は、複数の描画要素に対応する複数のノードを含み、各ノードにアフィン行列が定義された木構造で表される画面の描画処理を行う画像処理装置であって、前記木構造の根ノードは表示画像全体に対応し、前記根ノードに定義された前記アフィン行列は、表示部上における前記表示画像全体のアフィン変換を表し、前記根ノード以外の各ノードに定義された前記アフィン行列は、親ノードに対応する前記描画要素に対する相対的な位置関係においての、当該ノードに対応する前記描画要素のアフィン変換を表し、前記画像処理装置は、前記根ノードからの経路に含まれる複数の前記ノードから構成される上位ノード群であって、平行移動及び拡大縮小のいずれかを示すアフィン行列が定義されたノードで構成される上位ノード群に定義された複数の前記アフィン行列の積である上位行列積を演算し、前記上位行列積と、前記上位ノード群の末端ノードの子ノードから、前記末端ノードの下位にある対象ノードまでの経路に含まれる１又は複数の下位ノードに定義された１又は複数の前記アフィン行列を描画処理部へ送信する制御部と、前記上位行列積と、前記下位ノードに定義された前記アフィン行列との積を演算することで、前記対象ノードに対応する前記描画要素の前記表示部上の描画位置を特定して、当該描画要素の描画を行う描画処理部と、を備えることを特徴とする画像処理装置である。
【００１０】
望ましくは、前記木構造に含まれる複数のノードに定義されたアフィン行列を解析することで、前記上位ノード群を特定する上位ノード群特定部、をさらに備えることを特徴とする。
【００１１】
望ましくは、前記上位ノード群特定部は、前記木構造の変動に応じて、前記上位ノード群に含まれるノードを変更する、ことを特徴とする。
【００１２】
望ましくは、前記表示部上の入力位置を指定した入力をユーザから受け付ける入力部と、をさらに備え、前記制御部は、前記上位行列積と、前記下位ノードに定義された前記アフィン行列との積の逆行列に基づいて、各前記ノードに対応する前記描画要素における前記入力位置の相対位置を演算し、演算された相対位置に基づいて、前記入力位置に対応する前記ノードを特定する、ことを特徴とする。
【００１３】
また、本発明は、複数の描画要素に対応する複数のノードを含み、各ノードにアフィン行列が定義された木構造で表される画面の描画処理を行う画像処理プログラムであって、前記木構造の根ノードは表示画像全体に対応し、前記根ノードに定義された前記アフィン行列は、表示部上における前記表示画像全体のアフィン変換を表し、前記根ノード以外の各ノードに定義された前記アフィン行列は、親ノードに対応する前記描画要素に対する相対的な位置関係においての、当該ノードに対応する前記描画要素のアフィン変換を表し、コンピュータを、前記根ノードからの経路に含まれる複数の前記ノードから構成される上位ノード群であって、平行移動及び拡大縮小のいずれかを示すアフィン行列が定義されたノードで構成される上位ノード群に定義された複数の前記アフィン行列の積である上位行列積を演算し、前記上位行列積と、前記上位ノード群の末端ノードの子ノードから、前記末端ノードの下位にある対象ノードまでの経路に含まれる１又は複数の下位ノードに定義された１又は複数の前記アフィン行列を描画処理部へ送信する制御部と、前記上位行列積と、前記下位ノードに定義された前記アフィン行列との積を演算することで、前記対象ノードに対応する前記描画要素の前記表示部上の描画位置を特定して、当該描画要素の描画を行う描画処理部と、として機能させることを特徴とするプログラムである。
【００１４】
また、本発明は、複数の描画要素に対応する複数のノードを含み、各ノードにアフィン行列が定義された木構造で表される画面の描画処理を行う画像処理方法であって、前記木構造の根ノードは表示画像全体に対応し、前記根ノードに定義された前記アフィン行列は、表示部上における前記表示画像全体のアフィン変換を表し、前記根ノード以外の各ノードに定義された前記アフィン行列は、親ノードに対応する前記描画要素に対する相対的な位置関係においての、当該ノードに対応する前記描画要素のアフィン変換を表し、前記画像処理方法は、制御部が、前記根ノードからの経路に含まれる複数の前記ノードから構成される上位ノード群であって、平行移動及び拡大縮小のいずれかを示すアフィン行列が定義されたノードで構成される上位ノード群に定義された複数の前記アフィン行列の積である上位行列積を演算し、前記上位行列積と、前記上位ノード群の末端ノードの子ノードから、前記末端ノードの下位にある対象ノードまでの経路に含まれる１又は複数の下位ノードに定義された１又は複数の前記アフィン行列を描画処理部へ送信する上位行列積演算ステップと、描画処理部が、前記上位行列積と、前記下位ノードに定義された前記アフィン行列との積を演算することで、前記対象ノードに対応する前記描画要素の前記表示部上の描画位置を特定して、当該描画要素の描画を行う描画処理ステップと、を含むことを特徴とする画像処理方法である。
【発明の効果】
【００１５】
本発明によれば、制御部と描画処理部を含む画像処理装置において、描画処理に係る制御部の負荷を低減することができる。
【図面の簡単な説明】
【００１６】
【図１】本実施形態に係る画像処理装置の構成概略図である。
【図２】本実施形態に係るゲーム画面の例を示す図である。
【図３】ゲーム画面の階層構造を示す図である。
【図４】ゲーム画面を構成する各ノードの木構造を示す概念図である。
【図５】アフィン行列を示す図である。
【図６】上位行列積を生成する範囲を示す概念図である。
【図７】平行移動又は拡大縮小を行うアフィン行列を示す図である。
【図８】本実施形態の描画処理の流れを示すフローチャートである。
【図９】本実施形態の入力処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００１７】
以下、本発明の実施形態について説明する。
【００１８】
＜画像処理装置の構成概略＞
図１には、本実施形態に係る画像処理装置１０の構成概略図が示されている。本実施形態では、画像処理装置１０はスマートフォンやタブレット端末などの携帯端末であるが、画像処理装置１０としては、以下に説明する機能を発揮可能な限りにおいてどのような装置であってもよい。
【００１９】
画像処理装置１０は、表示部１２に表示される画面の描画処理を行う。本実施形態では、画像処理装置１０はゲームを提供するゲーム装置であり、画像処理装置１０が処理する画面はゲーム画面であるが、以下に説明する木構造で表される画面である限り、画像処理装置１０が処理する画面はゲーム画面に限るものではない。
【００２０】
表示部１２は、例えば液晶ディスプレイなどを含んで構成される。表示部１２には、画像処理装置１０で実行されるゲームに関するゲーム画面などの種々の画面が表示される。
【００２１】
入力部１４は、タッチパネルを含んで構成される。あるいは、画像処理装置１０がパーソナルコンピュータである場合には、入力部１４としてマウス、キーボード、又はポインティングデバイスなどが含まれていてもよい。本実施形態では、表示部１２としての液晶ディスプレイがタッチパネルとなっている。つまり、画像処理装置１０においては、ユーザ（ゲームのプレイヤ）は、ゲーム画面が表示されたタッチパネルに対して入力操作することが可能となっている。特に、入力部１４は、ユーザからの、表示部１２上の入力位置を指定した入力を受け付ける。入力部１４に対するプレイヤの操作を示す入力信号は後述のＣＰＵ１８に送られる。
【００２２】
記憶部１６は、例えばＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、あるいはハードディスクなどを含んで構成される。記憶部１６には、画像処理装置１０の各部を動作させるための画像処理プログラムが記憶される。本実施形態においては、画像処理装置１０上でゲームが動作するため、当該画像処理プログラムはゲームプログラムである。また、記憶部１６には、各種の制御データあるいは各種の処理結果データなどが記憶される。
【００２３】
制御部としてのＣＰＵ１８は、記憶部１６に記憶された画像処理プログラムに従って、画像処理装置１０の各部を制御する。また、ＣＰＵ１８は、ゲームプログラム（画像処理プログラム）に従ってゲームの進行処理を行い、ゲーム処理において入力部１４へのプレイヤ入力操作の検出（入力位置の検出あるいは操作対象のゲーム内の描画要素（例えばプレイヤキャラクタなどのオブジェクト）の特定など）を行う。
【００２４】
また、ＣＰＵ１８は画面の描画処理を行う。本明細書における描画処理とは、レンダリング処理のみならず、描画位置の特定処理を含む概念である。本実施形態では、ＣＰＵ１８は、描画処理のうち、描画位置の特定処理の一部を実行する。
【００２５】
描画処理部としてのＧＰＵ２０は、画面の描画処理を行う。描画処理において、ＧＰＵ２０はＣＰＵ１８よりも高速に処理可能となっている。ＧＰＵ２０は、描画処理のうち、描画位置の特定処理の一部、及びレンダリング処理を実行する。
【００２６】
＜画面の論理的構成＞
図２には、表示部１２に表示されるゲーム画面の一例が示されている。図２に示されたゲーム画面を参照しつつ、画像処理装置１０で処理される画面の論理的構成を説明する。
【００２７】
ゲーム画面は、複数の描画要素３０を含んで構成される。具体的には、フィールド３０ａ、フィールド３０ａを構成するバックグラウンド３０ｂ及び背景オブジェクト３０ｃ（草や木など）、バックグラウンド３０ｂを構成する複数のタイル３０ｄ、並びに、プレイヤキャラクタ３０ｅ及び敵キャラクタ３０ｆを含んで構成される。さらに、ゲーム画面は、ヘッダ３０ｈ及びフッタ３０ｉを含むＧＵＩ３０ｇを含んで構成される。
【００２８】
図３には、各描画要素３０が区分けされて図示されている。すなわち、図３（ａ）にはバックグラウンド３０ｂ及びバックグラウンド３０ｂを構成するタイル３０ｄが図示され、図３（ｂ）には背景オブジェクト３０ｃが図示され、図３（ｃ）にはプレイヤキャラクタ３０ｅ及び敵キャラクタ３０ｆが図示され、図３（ｄ）にはＧＵＩ３０ｇが図示されている。
【００２９】
なお、各タイル３０ｄは、複数画素分の面積を有した領域となっている。タイル３０ｄの形状は、適宜設定されてよいが、本実施形態では菱形となっている。複数のタイル３０ｄが敷き詰められることによってバックグラウンド３０ｂが形成されている。
【００３０】
本実施形態におけるゲーム画面の論理的構成は、図４に示されるような木構造４０で表すことができる。木構造４０には、複数のノード４２が含まれる。各ノード４２は、ゲーム画面に含まれる各描画要素３０に対応している。例えば、ノード４２ｒは表示画像全体に対応し、ノード４２ｆはフィールド３０ａに対応し、ノード４２ｇはＧＵＩ３０ｇに対応し、ノード４２ｂはバックグラウンド３０ｂに対応し、ノード４２ｔはタイル３０ｄに対応している。
【００３１】
木構造４０においては、各描画要素３０の階層構造が表現されている。例えば、表示画像全体（ルート）に対応するノード４２ｒが根ノードであり、ノード４２ｒの子ノードとしてフィールド３０ａに対応するノード４２ｆが定義されている。さらに、ノード４２ｆの子ノードとしてバックグラウンド３０ｂに対応するノード４２ｂが定義され、ノード４２ｂの子ノードとして複数のタイル３０ｄに対応する複数のノード４２ｔが定義されている。
【００３２】
根ノードであるノード４２ｒには、表示部１２上における表示画像全体のアフィン変換を示すアフィン行列Ｌｒｏｏｔが定義されている。また、根ノード（ノード４２ｒ）以外の各ノード４２には、親ノードに対応する描画要素３０に対する相対的な位置関係における、当該ノード４２に対応する描画要素のアフィン変換を表すアフィン行列Ｌ（以下、「親ノードに対する相対アフィン行列Ｌ」と記載する場合がある）が定義されている。アフィン変換とは、変換対象（本実施形態では描画要素３０）を平行移動、拡大縮小、回転、あるいはスキューさせる処理である。なお、本実施形態では、各ノード４２のアフィン行列Ｌは、その親ノードに対応する描画要素３０の左上隅の画素に対する相対位置を表すものとなっている。
【００３３】
例えば、ノード４２ｆには、ノード４２ｒに対応する表示画像全体に対する相対的な位置関係におけるフィールド３０ａのアフィン変換を示すアフィン行列Ｌｆｉｅｌｄが定義され、ノード４２ｂには、ノード４２ｆに対応するフィールド３０ａに対する相対的な位置関係におけるバックグラウンド３０ｂのアフィン変換を示すアフィン行列Ｌｂｇが定義され、ノード４２ｔには、ノード４２ｂに対応するバックグラウンド３０ｂに対する相対的な位置関係におけるタイル３０ｄのアフィン変換を示すアフィン行列Ｌｔｉｌｅが定義されている。
【００３４】
図５には、アフィン行列Ｌの一般式が示されている。図５に示されたアフィン行列Ｌの変数ａ、ｂ、ｃ、ｄ、ｔｘ、及びｔｙの値を適宜決定することで、アフィン変換の変換種別を決定することができる。例えば、ａ＝ｂ＝ｃ＝ｄ＝０とすると、ｘ方向にｔｘ分移動し、ｙ方向にｔｙ分移動する平行移動を示すアフィン行列Ｌとなる。また、ｂ＝ｃ＝ｔｘ＝ｔｙ＝０とすると、ｘ方向にａ倍し、ｙ方向にｄ倍する拡大縮小を示すアフィン行列Ｌとなる。また、ｔｘ＝ｔｙ＝０とし、ａ＝ｄ＝ｃｏｓθ、ｂ＝ｓｉｎθ、ｃ＝−ｓｉｎθとすると、回転を示すアフィン行列Ｌとなる。また、ｔｘ＝ｔｙ＝０とし、ａ＝ｃｏｓθｙ、ｂ＝ｓｉｎθｙ、ｃ＝−ｓｉｎθｘ、ｄ＝ｃｏｎθｘとすると、スキューを示すアフィン行列Ｌとなる。
【００３５】
上述のように、各ノード４２に定義されたアフィン行列Ｌは、親ノードに対する相対アフィン行列Ｌであるが、子ノードに定義されたアフィン行列Ｌと孫ノードに定義されたアフィン行列Ｌとの積は、親ノードに対応する描画要素３０に対する相対的な位置関係における、孫ノード４２に対応する描画要素のアフィン変換を表すアフィン行列Ｌとなる。例えば、ノード４２ｆに定義されたアフィン行列Ｌｆｉｅｌｄとノード４２ｂに定義されたアフィン行列Ｌｂｇの積Ｌｆｉｅｌｄ・Ｌｂｇは、ノード４２ｒに対応する表示画像全体に対するバックグラウンド３０ｂの相対的な位置関係（すなわち表示部１２の絶対位置となる）においてのアフィン変換を示す。
【００３６】
図４に示すように、画面の構造を階層化した上で、各ノード４２に対して、親ノードに対する相対アフィン行列Ｌを定義することで、画面の描画をより効率的に行うことができる。例えば、フィールド３０ａが平行移動した場合、バックグラウンド３０ｂあるいは各タイル３０ｄも平行移動されることになるが、フィールド３０ａに対するバックグラウンド３０ｂあるいは各タイル３０ｄの相対位置は変動しない。したがって、この場合、アフィン行列Ｌｆｉｅｌｄのみを変更すればよく、ノード４２ｆの下位にある各ノード４２ｂ、４２ｔに対応するアフィン行列ＬｂｇあるいはＬｔｉｌｅを変更する必要がない。
【００３７】
＜従来の描画処理及び入力処理＞
本実施形態のゲーム画面における描画処理及び入力処理を説明する前に、従来の描画処理及び入力処理について説明する。まず、従来における描画要素３０の描画処理について説明する。ここでは、特定のタイル（ｔｉｌｅ０）を描画する場合を例に説明する。
【００３８】
描画要素３０の描画処理を行うにあたり、当該描画要素３０を描画する描画位置を特定する必要がある。描画位置とは、表示部１２上の絶対位置であり、すなわち画素の座標である。上述のように、ゲーム画面の論理的構成を示す木構造４０においては、各描画要素３０は、親ノードに対応する描画要素３０に対する相対位置で表されているため、ＣＰＵ１８は、木構造４０に基づいて、描画したい描画要素３０の描画位置を特定する。
【００３９】
描画要素３０の描画位置は、当該描画要素３０に対応するノード４２からルートに対応するノード４２ｒ（木構造４０の根ノード）までの各ノード４２に定義されている複数のアフィン行列Ｌの積で表される。したがって、ｔｉｌｅ０の描画位置は、以下の式で算出されるＧｔｉｌｅ０で表される。
Ｇｔｉｌｅ０＝Ｌｒｏｏｔ・Ｌｆｉｅｌｄ・Ｌｂｇ・Ｌｔｉｌｅ０
【００４０】
ＣＰＵ１８は、算出した行列積Ｇｔｉｌｅ０をＧＰＵ２０に送信し、ＧＰＵ２０は、行列積Ｇｔｉｌｅ０が表す座標の画素に対してｔｉｌｅ０の描画を行う。
【００４１】
このように、従来、ＣＰＵ１８は、描画要素３０を描画する度に、当該描画要素３０について行列積Ｇを演算してＧＰＵ２０に送信していた。複数のタイルを描画する際に、行列積Ｇｂｇ＝Ｌｒｏｏｔ・Ｌｆｉｅｌｄ・Ｌｂｇを保持しておき、Ｇｂｇと、各タイルに対応するＬｔｉｌｅ*との積を演算するなどの演算方法を用いることで演算量を低減させることができるが、描画要素３０を描画する度に行列積Ｇを演算する必要があることは変わらず、また、行列積Ｇの演算は比較的処理量が多くなることから、描画処理（特に描画位置の特定処理）におけるＣＰＵ１８の負荷が大きかった。なお、フィールド３０ａが表示部１２上を平行移動した場合、あるいはバックグラウンド３０ｂがフィールド３０ａに対して平行移動した場合などは、ＬｆｉｅｌｄあるいはＬｂｇが変化するため、ＣＰＵ１８は、再度行列積Ｇｂｇを演算する必要がある。
【００４２】
木構造４０の管理をＧＰＵ２０に任せ、行列積Ｇの演算をＧＰＵ２０に行わせた場合、ユーザからの入力処理を受け付けるＣＰＵ１８が各描画要素３０の描画位置を把握できなくなってしまう。また、ＧＰＵ２０から各描画要素３０の描画位置をＣＰＵ１８に逐一送信する処理を行った場合、ＣＰＵ１８とＧＰＵ２０間の通信負荷が増大してしまう。したがって、従来においては、木構造４０の管理及び行列積Ｇの演算はＣＰＵ１８が行っている。
【００４３】
次に、従来における入力処理について説明する。入力処理とは、ユーザが表示部１２上の入力位置（画素）を特定して、ゲーム画面に含まれるいずれかの描画要素３０を選択する処理である。ここでは、バックグラウンド３０ｂを構成する複数のタイル３０ｄのうち、いずれのタイル３０ｄがユーザによって選択されたかを判定する処理について説明する。
【００４４】
ユーザにより指定された入力位置は、表示部１２上の絶対位置であり、木構造４０においては各タイル３０ｄの位置はフィールド３０ａ及びバックグラウンド３０ｂに対する相対位置で示されているから、入力処理においては、描画処理とは反対に、ＣＰＵ１８は、入力位置をフィールド３０ａ及びバックグラウンド３０ｂに対する相対位置に変換する必要がある。
【００４５】
絶対位置の相対位置への変換は、上述のように演算した行列積Ｇの逆行列Ｇ’を用いて行うことができる。ＣＰＵ１８は、ｔｉｌｅ０に対応する行列積Ｇｔｉｌｅ０の逆行列Ｇ’ｔｉｌｅ０に基づいて、ユーザが指定した入力位置をｔｉｌｅ０の左上隅の画素からの相対位置に変換する。そして、変換された相対位置が、ｔｉｌｅ０の内部であるか否かを判定する。なお相対位置がｔｉｌｅ０の内部であるか否かは、相対位置とｔｉｌｅ０の大きさ（面積）とに基づいて判定することができる。相対位置がｔｉｌｅ０の内部である場合は、ユーザがｔｉｌｅ０を選択したと判定でき、相対位置がｔｉｌｅ０の内部でない場合には、次のタイル（例えばｔｉｌｅ１）について同様の処理を繰り返す。このように、相対位置が内部にあるタイルが見つかるまで処理を繰り返し、ユーザが選択したタイルを特定する。
【００４６】
＜本実施形態の描画処理及び入力処理＞
以下、本実施形態における描画処理及び入力処理について説明する。まず、本実施形態における描画要素３０の描画処理について説明する。ここでも、特定のタイル（ｔｉｌｅ０）を描画する場合を例に説明する。
【００４７】
まず、ＣＰＵ１８は、木構造４０において、根ノードであるノード４２ｒから、描画対象の描画要素３０であるｔｉｌｅ０に対応する対象ノードであるノード４２ｔへ向かう経路に含まれる複数のノード４２から構成される上位ノード群を識別する。
【００４８】
上位ノード群は、上述の経路に含まれるノード４２のうち、平行移動及び拡大縮小のいずれかを示すアフィン行列Ｌが定義された複数のノード４２により構成される。図６に、木構造４０の一部であって、根ノードであるノード４２ｒからｔｉｌｅ０に対応するノード４２ｔまでの経路が示されている。本実施形態では、ノード４２ｒに定義されたアフィン行列Ｌｒｏｏｔ、ノード４２ｆに定義されたアフィン行列Ｌｆｉｅｌｄ、及び、ノード４２ｂに定義されたアフィン行列Ｌｂｇが、それぞれ平行移動又は拡大縮小を示すものであるとする。したがって、ＣＰＵ１８は、ノード４２ｒ、４２ｆ、及び４２ｂを上位ノード群として識別する。
【００４９】
ゲーム画面その他の種々の画面においては、木構造において根ノードに近い描画要素（例えば背景など）は、回転及びスキューがほとんど行われず、根ノードから遠い描画要素（例えばキャラクタなどの細かいオブジェクト）は回転及びスキューを含めた処理が行われることが多い。本実施形態におけるゲームにおいても、フィールド３０ａ及びバックグラウンド３０ｂは、平行移動及び拡大縮小はされ得るものの、回転及びスキューは行われず、タイル３０ｄなどにおいては回転及びスキューを含めた処理が行われる。したがって、画面を表す木構造においては、複数のノードを上位ノード群に含めることができる場合が多い。
【００５０】
ある特定の画面において、平行移動又は拡大縮小のみのアフィン変換が行われるノード４２が固定的に決定されている場合は、上位ノード群に含まれるノード４２は予め決められていてもよい。例えば、図６の例において、フィールド３０ａ及びバックグラウンド３０ｂが平行移動又は拡大縮小のみ行う（つまり回転及びスキューを行わない）と決まっている場合には、予め、ノード４２ｒ、４２ｆ、及び４２ｂが上位ノード群であると決められていてよい。
【００５１】
また、ＣＰＵ１８が木構造４０に含まれる各ノード４２に定義されたアフィン行列Ｌを解析することで、上位ノード群に含まれるノード４２を特定するようにしてもよい。例えば、ＣＰＵ１８は、根ノードから対象ノードへ向かって順番に、ノード４２に定義されたアフィン行列Ｌのうち、行列要素ｂ及びｃ（図５参照）が０であるか否かを解析し、ｂ及びｃが０ならば当該ノードを上位ノード群に加え、ｂ又はｃが０でなければその直前のノード４２までが上位ノード群であると特定する。このように、ＣＰＵ１８は上位ノード群特定部としても機能し得る。
【００５２】
また、例えばゲームモードが切り替わる、あるいは画面の表示モードが切り替わるなどして木構造４０に内容が変動する場合がある。例えば、あるゲームモードではバックグラウンド３０ｂは平行移動及び拡大縮小のみで、回転及びスキューは行われなかったが、他のゲームモードに遷移した場合に、当該他のゲームモードにおいては、バックグラウンド３０ｂが回転又はスキューが行われる場合がある。このように、木構造４０が変動した場合であっても、ＣＰＵ１８は各ノード４２のアフィン行列Ｌを解析することで、木構造４０の変動に応じて上位ノード群に含まれるノード４２を変更することで、常に適切な上位ノード群を特定することができる。
【００５３】
一方、上述の経路（図６参照）に含まれるノード４２のうち、上位ノード群以外のノード４２、すなわち、上位ノード群の末端ノードであるノード４２ｂの子ノードから対象ノードまでの経路に含まれるノード４２が下位ノードとなる。下位ノードに対応する描画要素３０は、回転及びスキューを行い得るものである。図６の例では、当該子ノードと対象ノードが同一であり、すなわち下位ノードがｔｉｌｅ０に対応するノード４２ｔの１つのみとなっているが、下位ノードは複数あってもよい。
【００５４】
ＣＰＵ１８は、上位ノード群に含まれる複数のノード４２それぞれに定義された複数のアフィン行列Ｌの積である上位行列積を演算する。図６の例では、ＣＰＵ１８は、上位行列積Ｇｂｇ＝Ｌｒｏｏｔ・Ｌｆｉｅｌｄ・Ｌｂｇを演算する。
【００５５】
ここで、上位ノード群に定義された各アフィン行列Ｌは、平行移動又は拡大縮小を行うものである。図７に示す通り、平行移動又は拡大縮小を行うアフィン行列Ｌは、行列要素のｂ及びｃ（図５参照）が０となる。したがって、上位ノード群に定義された複数のアフィン行列Ｌの積を算出する際の演算量はそれほど大きくならない。少なくとも、演算量は、回転やスキューを示すアフィン行列Ｌ（すなわち行列要素のｂ及びｃが０でない行列）を含む行列の積を算出する際の演算量よりも小さくなる。つまり、上位行列積を演算しても、ＣＰＵ１８にはそれほど負荷がかからない。
【００５６】
ＣＰＵ１８は、演算した上位行列積（図６の例ではＧｂｇ）と、下位ノードに定義されたアフィン行列（図６の例ではＬｔｉｌｅ０）をＧＰＵ２０に送信する。
【００５７】
ＧＰＵ２０は、ＣＰＵ１８から受け取った上位行列積と、下位ノードに定義されたアフィン行列との積を演算する。本実施形態では、上位行列積Ｇｂｇと下位ノードのアフィン行列Ｌｔｉｌｅ０との行列積Ｇｔｉｌｅ０＝Ｇｂｇ・Ｌｔｉｌｅ０を演算する。上述のように、行列積Ｇｔｉｌｅ０はｔｉｌｅ０の表示部１２上の絶対位置を表す。したがって、ＧＰＵ２０は、行列積Ｇｔｉｌｅ０に基づいて、ｔｉｌｅ０の表示部１２上の描画位置を特定する。そして、ＧＰＵ２０は、特定した描画位置にｔｉｌｅ０の描画を行う。
【００５８】
上述のように、本実施形態においては、描画要素３０の描画位置の特定のために必要な行列積Ｇの演算のうち、演算量が少ない部分、すなわち、上位ノード群に定義された、平行移動及び拡大縮小のいずれかを示す複数のアフィン行列Ｌの積である上位行列積の演算をＣＰＵ１８が行い、比較的演算量が多くなる、回転及びスキューを示すアフィン行列Ｌを含む行列積の演算はＧＰＵ２０が行う。これにより、描画処理に係るＣＰＵ１８の負荷が低減される。
【００５９】
しかも、本実施形態においては、ＣＰＵ１８が木構造４０の管理を行っているから、ＣＰＵ１８が各描画要素３０の描画位置を把握できなくなることがない。したがって、描画要素３０を指定するための、表示部１２上の入力位置を指定した入力をユーザから受け付けた場合であっても、ＣＰＵ１８は、ユーザが指定した描画要素３０を特定することができる。
【００６０】
以下、本実施形態における入力処理について説明する。ここでも、バックグラウンド３０ｂを構成する複数のタイル３０ｄのうち、いずれのタイル３０ｄがユーザによって選択されたかを判定する処理について説明する。
【００６１】
従来同様、本実施形態においても、入力処理はＣＰＵ１８が行う。まず、ＣＰＵ１８は、演算済みの上位行列積と、下位ノードに定義されたアフィン行列との行列積Ｇを演算する。本実施形態では、上位行列積Ｇｂｇと下位ノードに定義されたアフィン行列Ｌｔｉｌｅ０との行列積Ｇｔｉｌｅ０＝Ｇｂｇ・Ｌｔｉｌｅ０を演算する。
【００６２】
さらに、ＣＰＵ１８は演算した行列積Ｇの逆行列Ｇ’を演算する。本実施形態では、行列積Ｇｔｉｌｅ０の逆行列Ｇ’ｔｉｌｅ０を演算する。
【００６３】
ＣＰＵ１８は、演算した逆行列Ｇ’に基づいて、各ノード４２に対応する描画要素３０における入力位置の相対位置を演算し、演算された相対位置に基づいて、入力位置に対応する描画要素３０を特定する。本実施形態では、ＣＰＵ１８は、逆行列Ｇ’ｔｉｌｅ０に基づいて、ユーザが指定した入力位置をｔｉｌｅ０の左上隅の画素からの相対位置に変換する。そして、変換された相対位置が、ｔｉｌｅ０の内部であるか否かを判定する。相対位置がｔｉｌｅ０の内部である場合は、ユーザがｔｉｌｅ０を選択したと判定でき、相対位置がｔｉｌｅ０の内部でない場合には、次のタイル（例えばｔｉｌｅ１）について同様の処理を繰り返す。このように、相対位置が内部にあるタイルが見つかるまで処理を繰り返し、ユーザが選択したタイルを特定する。
【００６４】
以下、図８に示すフローチャートに従って、画像処理装置１０における描画処理の流れについて説明する。図８のフローチャートは、ｔｉｌｅ０を描画する場合の処理の流れを示すものである。
【００６５】
ステップＳ１０において、ＣＰＵ１８は、木構造４０の中から、上位ノード群（ノード４２ｒ、４２ｆ、４２ｂ）を特定し、上位行列積Ｇｂｇ＝Ｌｒｏｏｔ・Ｌｆｉｅｌｄ・Ｌｂｇを演算する。
【００６６】
ステップＳ１２において、ＣＰＵ１８は、上位行列積Ｇｂｇ、及び、下位ノード（ｔｉｌｅ０に対応するノード４２ｔ）に定義されたアフィン行列Ｌｔｉｌｅ０をＧＰＵ２０に送信する。
【００６７】
ステップＳ１０及びＳ１２が上位行列積演算ステップに相当する。
【００６８】
ステップＳ１４において、ＧＰＵ２０は、ステップＳ１２でＣＰＵ１８から受信した上位行列積Ｇｂｇと下位ノードのアフィン行列Ｌｔｉｌｅ０との行列積Ｇｔｉｌｅ０＝Ｇｂｇ・Ｌｔｉｌｅ０を演算する。そして、演算した行列積Ｇｔｉｌｅ０に基づいて、ｔｉｌｅ０の表示部１２上の描画位置を特定する。
【００６９】
ステップＳ１６において、ＧＰＵ２０は、ステップＳ１４で特定した描画位置にｔｉｌｅ０の描画を行う。
【００７０】
ステップＳ１４及びＳ１６が描画処理ステップに相当する。
【００７１】
次に、図９に示すフローチャートに従って、画像処理装置１０における入力処理の流れについて説明する。図９のフローチャートは、バックグラウンド３０ｂを構成する複数のタイル３０ｄのうち、ユーザがいずれのタイル３０ｄを指定したのかを特定する処理の流れを示すものである。
【００７２】
ステップＳ３０において、入力部１４は、表示部１２上の入力位置を指定したユーザからの入力を受け付ける。
【００７３】
ステップＳ３２において変数ｎが０に初期化される。変数ｎはタイル番号に相当する変数である。
【００７４】
ステップＳ３４において、ＣＰＵ１８は、上位行列積Ｇｂｇと下位ノードのアフィン行列Ｌｔｉｌｅｎとの行列積Ｇｔｉｌｅｎ＝Ｇｂｇ・Ｌｔｉｌｅｎを演算する。さらに、ＣＰＵ１８は行列積Ｇｔｉｌｅｎの逆行列Ｇ’ｔｉｌｅｎを演算する。
【００７５】
ステップＳ３６において、ＣＰＵ１８は、逆行列Ｇ’ｔｉｌｅｎに基づいて、ユーザが指定した入力位置をｔｉｌｅｎの左上隅の画素からの相対位置に変換する。
【００７６】
ステップＳ３８において、ＣＰＵ１８は、ステップＳ３６で変換された相対位置がｔｉｌｅｎの内部であるか否かを判定する。ｔｉｌｅｎの内部でない場合、ステップＳ４０に進み、ステップＳ４０で変数ｎが１インクリメントされた後、再度ステップＳ３４からの処理を繰り返す。つまり、次のタイルに対する処理を行う。
【００７７】
ステップＳ３８で相対位置がｔｉｌｅｎの内部であると判定された場合、ステップＳ４２に進み、ステップＳ４２において、ＣＰＵ１８は、ｔｉｌｅｎがユーザにより指定された描画要素３０であると特定する。
【００７８】
以上、本発明に係る実施形態を説明したが、本発明は上記実施形態に限られるものではなく、本発明の趣旨を逸脱しない限りにおいて種々の変更が可能である。
【００７９】
例えば、本実施形態では、表示部１２に表示される画面は２次元の画面であったが、３次元の画像に対する処理においても本発明を適用することができる。なお、３次元の画像に対する処理の場合、各ノード４２に定義されるアフィン行列の次元数が１つ増え、４×４の行列となる。
【００８０】
また、画像処理装置１０が有する構成要件の一部が別の装置（例えばサーバなど）に設けられていてもよい。例えば、ＣＰＵ１８とＧＰＵ２０とが異なる装置に設けられていてもよい。
【符号の説明】
【００８１】
１０  画像処理装置、１２  表示部、１４  入力部、１６  記憶部、１８  ＣＰＵ、２０  ＧＰＵ、３０  描画要素、４０  木構造、４２  ノード。
【図１】
2019219985.tif 000003
【図２】
2019219985.tif 000004
【図３】
2019219985.tif 000005
【図４】
2019219985.tif 000006
【図５】
2019219985.tif 000007
【図６】
2019219985.tif 000008
【図７】
2019219985.tif 000009
【図８】
2019219985.tif 000010
【図９】
2019219985.tif 000011