説明

画像処理装置、画像処理プログラムおよび画像処理方法

【課題】CPUに多大な処理負担をかけることなく任意の境界図形を基準とした図形の描き分けを実現すること。
【解決手段】画像処理装置100は、外部から入力された描画対象図形の頂点データから生成されたx,y座標の2次元座標にて特定される画素と、画素ごとの深度値とが設定された図形データを取得すると、取得された図形データが境界図形に指定されていた場合、図形データにおいて、x座標の値が同じ画素列の中のいずれか一つの画素に設定されている深度値をx座標の値ごとに抽出し、抽出された深度値を1D深度バッファ120のx座標の値ごとに書き込む。その後、あらたな図形データが読み込まれると、この図形データに含まれる任意の画素の深度値と、1D深度バッファ120におけるx座標の値ごとに書き込まれている深度値の中の同一のx座標の値に書き込まれている深度値とを比較し、比較結果に応じて図形データを描画するか否かを判断する。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、3次元画像を描画するための画像処理装置、画像処理プログラムおよび画像処理方法に関する。
【背景技術】
【0002】
従来より、カーナビゲーションシステムや、ゲームコンソールなどでは、即時的に画像を描画するリアルタイムグラフィックスシステムが適用されている。特に近年のリアルタイムグラフィックスシステムでは、地図描画アプリケーションのように、真上から垂直に見下ろした2次元的な道路表示だけでなく、運転者による視点、あるいは、鳥瞰視点からの3次元的な道路表示と、3次元的なビル表示を組み合わせた、写実的な表現を実現する機能が要求されることが多くなった。
【0003】
ところが、従来のリアルタイムグラフィックスシステムによって3次元地図描画をおこなう場合、通常の3次元画像のコンピューターグラフィックスの手法をそのまま適用しても利用者の所望する品質の画像描写は期待できなかった。たとえば、経路誘導すべき道路が手前のビルの陰に隠れてしまってナビゲーションとしての機能を果たせなかったり、視点に近いビルが前方クリップ面で切断されて断面が見えてしまったり、といった不都合が生じることが多かった。
【0004】
そこで、手前のビルを描画した上で隠された道路をビルの上から上書きしたり、ビルが道路を隠した部分だけビルを半透明で描画したりすることにより、表示すべき道路が隠蔽されるのを防ぐ技術が開示されている(たとえば、下記特許文献1、2参照。)。また、経路誘導の目的で着目する道路を境界線として、その境界線よりも奥に建っているビルのみ立体的に描画し、境界線より手前のビルは立体的には描画しないといった描き分けをおこなう技術も提供されている。
【0005】
【特許文献1】特開2007−26201号公報
【特許文献2】特許第3351760号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
しかしながら、上述したような従来技術を利用したとしても、境界線となる道路(以下、「境界道路」という)の前後でビルを描き分ける場合には多くの問題が発生していた。たとえば、上述したように手前の建物や物体によって陰になってしまう面(以下、「陰面」という)を消去するには、陰面を検出して描画しないようにグラフィックLSIに指示する隠面消去処理が必要となる。この陰面消去処理には、奥行き方向(Z軸方向)に関する情報を蓄積する深度バッファを用いた深度テストにより実現される。
【0007】
しかしながら、一般的なグラフィックスLSIの構成では深度バッファは1セットしか実装されていないため、境界道路による描き分けはハードウェアでアシストできない。上述のような描き分けをハードウェアによって実行するためには、2セットの深度バッファが必要となる。さらに、用意した2セットのバッファは、それぞれの深度比較結果を適切に組み合わせなければならず、実装が難しいという問題があった。
【0008】
一方、上述のようにハードウェア資源に依存せずにソフトウェア処理によって陰面消去処理をおこなうこともできる。しかしながら、ソフトウェア処理によって隠面消去処理をおこなう場合には、ナビゲーションシステムのアプリケーションプログラムにおいてアルゴリズムを実装し、CPU上で深度バッファに相当する処理を実行させる必要がある。したがって、ソフトウェア処理によって隠面消去処理を実現するにはCPUの処理負担が大きく、大幅な性能低下の原因となるという問題があった。
【0009】
この発明は、上述した従来技術による問題点を解消するため、CPUに多大な処理負担をかけることなく任意の境界図形を基準とした図形の描き分けを実現する画像処理装置、画像処理プログラムおよび画像処理方法を提供することを目的とする。
【課題を解決するための手段】
【0010】
上述した課題を解決し、目的を達成するため、この画像処理装置、画像処理プログラムおよび画像処理方法は、ラインバッファにアクセス可能な装置によって実現され、外部から入力された描画対象図形の頂点データから生成されたx,y座標による2次元座標にて特定される画素と、当該画素ごとの深度値とが設定された図形データを取得する処理と、取得された図形データを描画する処理と、取得された図形データが境界図形に指定されていた場合、当該図形データにおいて、x座標の値が同じ画素列の中のいずれか一つの画素に設定されている深度値を前記x座標の値ごとに抽出する処理と、抽出された深度値を前記ラインバッファにおけるx座標の値ごとに書き込む処理と、前記ラインバッファに深度値が書き込まれた後、あらたな描画対象図形の頂点データから生成された図形データが読み込まれると、当該図形データに含まれる任意の画素の深度値と、前記ラインバッファにおけるx座標の値ごとに書き込まれている深度値の中の前記画素と同一のx座標の値に書き込まれている深度値とを比較する処理と、比較結果に応じて前記あらたな描画対象図形の頂点データから生成された図形データの描画を禁止する処理と、を含むことを要件とする。
【0011】
この画像処理装置、画像処理プログラムおよび画像処理方法によれば、メモリ容量の少ないラインバッファに境界図形の深度値を書き込み、他の図形データを構成する画素の深度値と比較することによって、他の図形データが境界図形の手前に位置するか、奥に位置するかに応じて描き分けることができる。
【発明の効果】
【0012】
この画像処理装置、画像処理プログラムおよび画像処理方法によれば、CPUに多大な処理負担をかけることなく任意の境界図形を基準とした図形の描き分けを実現することができるという効果を奏する。
【発明を実施するための最良の形態】
【0013】
以下に添付図面を参照して、画像処理装置、画像処理プログラムおよび画像処理方法の好適な実施の形態を詳細に説明する。この画像処理装置、画像処理プログラムおよび画像処理方法では、1次元のラインバッファをあらたに深度バッファとして追加し、この深度バッファを用いて、任意の境界図形を基準として描画する図形か、描画しない(消去する)図形かの判断をおこなって描画させたい図形のみを選別して描画させることができる。
【0014】
(画像処理の概要)
まず、本実施の形態にかかる画像処理の概要について説明する。図1は、本実施の形態にかかる画像処理の概要を示す説明図である。本実施の形態にかかる画像処理装置100は、描画処理部110と、1D深度バッファ120と、2D深度バッファ130と、フレームバッファ140とを備えている。これら各機能部は、具体的には、グラフィックスLSIやグラフィックスメモリによって実現される。
【0015】
描画処理部110は、外部から描画対象図形の頂点データが入力されると、画素データを生成し(ステップS111)、描画判断をおこない(ステップS112)、判断結果に応じて画素データを描画する(ステップS113)。
【0016】
上述のステップS112の描画判断では大別して2種類の判断がおこなわれる。1つめの判断は、1D深度バッファ120と、画素データとの深度比較による境界道路の手前か奥かの判断処理である。1D深度バッファ120には、境界道路の横方向の深度値が書き込まれている。この判断によって境界道路の手前に位置すると判断された場合には、その画素データは境界道路を遮蔽してしまうため、フレームバッファ140に描画されない。一方、境界道路の奥に位置すると判断された場合には、その画素データに対しては、つぎに説明する2つめの判断がおこなわれる。
【0017】
2つめの判断は、2D深度バッファ130と、境界道路の奥にあると判断された画素データとの深度比較による陰面消去に関する判断処理である。2D深度バッファ130には、すでにフレームバッファ140に描画されている画素データの深度値が書き込まれている。この判断によってすでにフレームバッファ140に描画されている画素データよりも手前に位置すれば描画する画素データとして判断され、奥に位置すれば陰面に位置するため描画しない画素データと判断される。
【0018】
ステップS113では、ステップS112よって描画すると判断された画素データを描画し、フレームバッファ140に書き込む。フレームバッファ140に書き込まれた画素データはディスプレイなどの出力機器150に出力されることによって画像として表示される。
【0019】
上述したように、本実施の形態では、1D深度バッファ120を用いて境界道路との深度比較をおこなうことによって、ハードウェア面の構成が容易であり、なおかつ、ソフトウェア面でCPUへの処理負担の少ない画像処理を実現する。この1D深度バッファ120の構成は、本実施の形態独自のものである。したがって、以下1D深度バッファ120について説明する。
【0020】
図2は、グラフィックスLSIによる地図画像の描画例を示す説明図である。グラフィックスLSIは、入力された画像データ(たとえば、地図画像)に含まれている図形の頂点データに応じて画素データを生成し、描画例200のように描画する。描画例200の場合、画像データは地図画像であり、図形情報として建築物や道路をあらわす頂点データが含まれている。
【0021】
描画例200に描画されている道路のいずれかを境界道路に設定した場合は、この境界道路を基準として手前に位置する図形か、奥に位置する図形かを判断する。そして、手前に位置する図形は描画されず、奥に位置する図形のみ描画される。
【0022】
ここで、仮に陰面消去用の2D深度バッファ130と同じ構成の2D深度バッファ130を追加した場合の構成について説明する。従来にも、2D深度バッファが2セット実装された画像処理装置(たとえば、特開平3−269687)は提供されていた。この描画処理装置では、2セットの2D深度バッファ130を用いることによって3次元CADで物体の切断面を描画することができるため、境界道路を基準としたビルの手前か奥かの選別にも応用できる。しかしながら、実際には2D深度バッファ130を2セット使用しただけでは多くの問題が生じてしまう。
【0023】
まず、第1の問題としては、あらたな2D深度バッファ130が追加された分、2D深度バッファ130相当のソフトウェア処理を軽減できる一方で、追加された2D深度バッファ130へのメモリアクセスが必要となる点が挙げられる。この問題によって、2D深度バッファ130が1セットの構成と比べた場合に、追加となる性能ペナルティがあらたに発生してしまう。
【0024】
また、第2の問題として、2D深度バッファ130として利用するためのメモリ領域が2倍必要になり、結果としてリソースを逼迫してしまう点が挙げられる。2D深度バッファを複数実装する場合には必然的に同じ問題に直面する。したがって、3セット以上の多面深度バッファを実装した構成は現実的ではないことがわかる。
【0025】
また、第3の問題として、境界道路の深度値をそのまま2D深度バッファ130に書き込んだとしても、境界道路を挟んでのビルの選別はできない場合がある点が挙げられる。図3は、境界道路を含んだ描画例を示す模式図である。図3のように、描画例300には境界道路301が含まれているとする。この描画例300にさらに建築物をあらわす図形を描画する場合に、境界道路301の深度値が書き込まれた2D深度バッファ130に基づいて、手前か奥かを判断しなければならない。
【0026】
しかしながら、たとえば、建築物をあらわす図形データ302を描画する場合、境界道路301と重複していない部分では、比較する2D深度バッファ130の深度値が記録されていないため、境界道路301の手前か奥かが判断できない。この問題の対応策として深度値が反映された境界道路301を壁のように天地方向に引き伸ばして、判断基準面を用意する必要がある。
【0027】
図4は、判断基準面の一例を示す模式図である。図4のような判断基準面400を用いれば、境界道路301を基準とした手前か奥かの判断が可能となる。ところが、判断基準面400を用意するためには、具体的には境界道路用の深度バッファに境界道路301の深度値を書き込む際に、境界道路301自身の画素座標だけでなく、同じx座標を持ち深度バッファ上で上下に並んだ画素にも、同じ深度値を書き込む処理が必要となる。この処理は、上記の第1の問題で指摘した性能ペナルティをも上回るメモリアクセスを発生させ、グラフィックスLSIの処理速度を大きく低下させてしまう。
【0028】
さらに、第4の問題として、画素データを描画する際の視点がある程度上空に設定されているような場合、すなわち、地表面を深い角度で見下ろすような鳥瞰条件の場合、上述したような判断基準面400を用意したとしても手前か奥かの判断が破綻してしまう可能性が高い点が挙げられる。
【0029】
図5は、鳥瞰視点の地図画像描画時の描き分け判断処理を示す説明図である。図5の視点501から建築物502を見下ろした画像を描画する際、境界道路301の幅よりもビルの高さの方が大きい場合、建築物502の上層部が判断基準面によってあらわされた深度を突き破ってしまう。したがって、境界道路301の幅よりもビルの高さの方が大きい場合には、天地方向に深度値の傾斜を持つような、傾いた判断基準面400を用意する必要がある。すなわち、判断基準面400の傾斜の大きさと、判断基準面400の上端あるいは下端での深度値とを、演算により別途求めなければならず、処理負担が増加してしまう。
【0030】
このように、境界道路301を挟んで手前か奥かの判断をおこなうための深度バッファとして、2D深度バッファ130を単純に追加しても効率的に描画処理を実現することはできない。そこで、本実施の形態では、1次元のラインバッファである1D深度バッファ120を追加する。
【0031】
1D深度バッファ120は、境界道路301を構成する画素データのうち、横方向の深度値の変化のみを記憶する。このような構成にすることにより、図4、5にて説明した判断基準面400を用意する必要性が排除され、性能ペナルティを抑制することができる。このとき、境界道路301自体は3次元空間を2次元画面に投影した図形を持つ。
【0032】
ここで、図6は、1D深度バッファの構成を示す説明図である。図6の上段の2次元座標図600は、境界道路301を構成する図形601を構成する画素の一部をあらわしている。図形601の各画素素には、深度値Z(Z0〜Z22)が設定されている。このように、図形601を構成する画素はx,y座標値(横方向と縦方向)に加えてz軸(奥行き方向)の座標値も含む。したがって、本来であれば、境界道路301の深度値を記録するには、2次元座標図600のように、x,y座標値単位で深度値を記録できなければならなかった。
【0033】
そこで、今回あらたに追加する1D深度バッファ120は、2次元情報を1次元情報に適切に縮退させるために、x軸方向のx座標の値ごとに1つの深度値のみを記録するように処理する。したがって、1D深度バッファ120のように、x座標が同じ値の画素データであれば、y座標の値にかかわらず同じ深度値として扱われる。
【0034】
ここで、2次元情報を1次元情報へ適切に縮退する手法としては、幾つかの手法が用いられる。最も簡易なものとしては、図形601の画素のx座標の値が同じ画素列の中のいずれか一つの画素に設定されている深度値をランダムに抽出して、1D深度バッファ120に書き込めばよい。これは、境界道路301上に描画する建築物が存在しないことを利用している。すなわち、どのような建築物であっても、必ず境界道路301を構成する画素の手前か奥に位置するため、判断が破綻することはない。
【0035】
また、上述のように、境界道路301の画素のx座標の値が同じ画素列の中のいずれか一つを抽出する処理が、ハードウェア構成上、もしくは、ソフトウェアのプログラム上難しいようであれば、指定したルールにしたがって抽出する処理にしてもよい。たとえば、図6では、x座標の値が同じ画素列の中のy座標が最小となる画素に設定されている深度値を抽出している。これと反対に、x座標の値が同じ画素列の中のy座標が最大となる画素に設定されている深度値を抽出してもよい。あるいは、深度比較を有効にしてx座標の値が同じ画素列の中の最小深度値が最終的に上書きされず残るようにしてもよい(下記の実施の形態1,2ではこの抽出手法を採用した例を説明する)。なお、ここでは、一例としてx座標の値が同じ画素列をひとまとめにして画素を集約しているが、境界道路301の描画例によっては、y座標の値が同じ画素列をひとまとめにして画素を集約してもよい。
【0036】
そして、境界道路301を描画後、さらに、3Dビルなどの建築物を地図画像に描画する場合、境界道路301と描画対象となる建築物との深度比較をおこなう。その際には、建築物の任意の2次元座標の画素、たとえば[x1,y1]に設定されている深度値Zと、1D深度バッファ120に記録されている[x1]の深度値Zとを比較する。すなわち、1D深度バッファ120に記録されている1次元の座標値を同じくする2次元の座標値に拡張して比較していることになる。
【0037】
また、陰面消去処理などで用いられる従来の一般的な深度比較は、描画対象画素の深度値と深度バッファの対応座標の深度値との比較であった。すなわち、描画対象図形の頂点座標から図形を構成する画素を算出した後におこなう処理であった。これに対して本実施の形態では、描画対象図形の頂点座標から図形を構成する画素を算出する前段、すなわち、頂点座標の深度値と深度バッファの対応座標の深度値との深度比較をおこなう処理として提供できる。このように、ビル底面部の頂点(相当の画素)に設定されている深度値を利用することによって、描画処理の初期段階にて深度比較がおこなえる。したがって、効率的に建築物全体を描画するか否かを判断することができる。また、描画しないと判断された場合は、描画の初期段階でキャンセルされるため、無駄な描画処理を未然に防ぐことができる。
【0038】
また、1D深度バッファ120を境界道路301の深度値として、描画対象図形となる建築物の頂点座標の深度値を比較することによって、図5にて説明した問題も発生しない。さらに、上述のように頂点における深度値と、境界道路301の深度値を深度比較することにより、画素レベルでの深度比較よりも圧倒的に比較回数を削減でき、画像処理性能を大幅に向上させることができる。
【0039】
なお、3Dビルを描画するか否かを選別する境界道路として、複数の道路を組み合わせるような場合も、1D深度バッファ120を複数用意し、それぞれの境界道路用に割り当てればよい。そして、それぞれの1D深度バッファ120からの深度比較結果を、論理和や論理積などによって合成することにより、複合的な深度境界を構築することができる。このとき、2D深度バッファ130と比較して1D深度バッファ120をあらたに構成する場合のメモリ容量は極小で済むため、容易に実現可能となる。
【0040】
なぜならば、境界道路用の1D深度バッファ120は、通常の2D深度バッファ130に対して数百分の一の画素数に対応した深度値が記録できるメモリ容量しか必要としない。したがって、複数の1D深度バッファ120をグラフィックスLSI上に混載することは十分に実現可能である。また、1D深度バッファ120を複数搭載するのであれば、グラフィックスLSI上のメモリ資源で実現できるため外部メモリを利用する必要もない。これは、外部メモリへのアクセスの排除を意味し、従来からのグラフィックスメモリバンド幅を逼迫せずに済むことを意味する。
【0041】
また、従来の陰面消去処理の際の2D深度バッファ120を用いた深度比較処理では、深度比較を有効にした場合に書込みマスクによって2D深度バッファ130やフレームバッファ140の更新を禁止する機能は存在した。しかしながら、2D深度バッファ130とフレームバッファ140との双方の深度比較が実行された場合に、フレームバッファ140のみの深度比較を無効にする機能は存在しなかった。結果として、深度比較結果を反映したバッファについての更新はおこなわれるが、フレームバッファ140では、深度比較結果を無視して無条件に図形を書き込むような処理を実行することはできなかった。
【0042】
本実施の形態にて求められるような境界道路を基準とした建築物の描き分けをおこなう場合には、上述のようにフレームバッファ140に対して深度比較結果を無視して無条件に図形を書き込むような処理が必要となる。1D深度バッファ120は、1次元座標の値ごとの深度値を持ち、フレームバッファ140は2次元座標の値ごとの深度値を持つ。すなわち対応関係が1対多数となる。そのため、たとえば、まずx座標方向の値がx1、y座標方向の値がy1の画素を描画し、つぎにx座標方向の値がx1、y座標方向の値がy2の画素を描画するときに、y1の深度値がy2の深度値よりも小さければ、1D深度バッファ120上での深度比較によって描画しないと判断されてしまい、フレームバッファ140に描画されなくなってしまう。したがって、本実施の形態にかかる画像処理装置100では、境界道路301のように陰面消去処理を必要としない描画対象に関しては、フレームバッファ140に限って深度比較を無効化するように制御する機能を搭載する。
【0043】
このように、本実施の形態にかかる画像処理装置100の描画処理では、メモリ容量の少ないラインバッファに境界図形の深度値を書き込み、他の図形データを構成する画素の深度値と比較することによって、他の図形データが境界図形の手前に位置するか、奥に位置するかに応じて描き分けることができる。したがって、CPUに多大な処理負担をかけることなく任意の境界図形を基準とした図形の描き分けを実現することができる。
【0044】
つぎに、上述した画像処理を実現するための具体的な構成について説明する。図1では、画像処理装置100の構成を簡易的に示したが、具体的な構成としては以下に説明するような例が挙げられる。
【0045】
<汎用の情報処理装置による構成例>
まず、1つめの構成例としては、汎用の情報処理装置にて図1のハードウェア資源を用いて図1にて説明した画像処理を実現する構成が挙げられる。汎用の情報処理装置を画像処理装置100として利用する場合、汎用の情報処理装置のCPUによって図1の描画処理部110相当の処理を実行する機能部を構成する。また、汎用の情報処理装置に搭載されたメモリ領域に1D深度バッファ120、2D深度バッファ130およびフレームバッファ140をそれぞれ構成する。
【0046】
(画像処理装置のハードウェア構成)
図7−1は、実施の形態にかかる画像処理装置のハードウェア構成を示すブロック図である。図7−1において、画像処理装置100は、汎用の情報処理装置であり、CPU(Central Processing Unit)701と、ROM(Read‐Only Memory)702と、RAM(Random Access Memory)703と、磁気ディスクドライブ704と、磁気ディスク705と、光ディスクドライブ706と、光ディスク707と、ディスプレイ708と、I/F(Interface)709と、キーボード710と、マウス711と、スキャナ712と、プリンタ713と、を備えている。また、各構成部はバス700によってそれぞれ接続されている。
【0047】
ここで、CPU701は、画像処理装置100の全体の制御を司る。ROM702は、ブートプログラム、画像処理プログラムなどのプログラムを記憶している。RAM703は、CPU701のワークエリアとして使用される。磁気ディスクドライブ704は、CPU701の制御にしたがって磁気ディスク705に対するデータのリード/ライトを制御する。磁気ディスク705は、磁気ディスクドライブ704の制御で書き込まれたデータを記憶する。
【0048】
光ディスクドライブ706は、CPU701の制御にしたがって光ディスク707に対するデータのリード/ライトを制御する。光ディスク707は、光ディスクドライブ706の制御で書き込まれたデータを記憶したり、光ディスク707に記憶されたデータをコンピュータに読み取らせたりする。
【0049】
ディスプレイ708は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ708は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【0050】
インターフェース(以下、「I/F」と略する。)709は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク714に接続され、このネットワーク714を介して他の装置に接続される。そして、I/F709は、ネットワーク714と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F709には、たとえばモデムやLANアダプタなどを採用することができる。
【0051】
キーボード710は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス711は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様の機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【0052】
スキャナ712は、画像を光学的に読み取り、画像処理装置内に画像データを取り込む。なお、スキャナ712は、OCR(Optical Character Reader)機能を持たせてもよい。また、プリンタ713は、画像データや文書データを印刷する。プリンタ713には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【0053】
なお、上述した各機能は、一例であり、CPU701、ROM702およびRAM703以外の構成については任意である。
【0054】
(画像処理装置の機能的構成)
つぎに、画像処理装置100の機能的構成について説明する。なお、通常の描画処理および隠面消去処理はすでに公知の技術であるため、ここでは、本実施の形態にかかる描画処理の特徴点となる境界図形を基準とした図形の描き分けを実現するための機能に限定して説明する。
【0055】
図7−2は、画像処理装置の機能的構成を示すブロック図である。画像処理装置100は、取得部721と、描画部722と、抽出部723と、書込部724と、比較部725と、描画制御部726と、1D深度バッファ120と、フレームバッファ140と、を含む構成である。この制御部となる機能(取得部721〜描画制御部726)は、具体的には、たとえば、図7−1に示したROM702、RAM703、磁気ディスク705、光ディスク707などの記憶領域に記憶された描画処理プログラムをCPU701に実行させることにより、または、I/F709により、その機能を実現する。また、メモリとなる機能(1D深度バッファ120と、フレームバッファ140)は、図7−1に示したRAM703などの記憶領域により、その機能を実現する。
【0056】
取得部721は、外部から入力された頂点データに基づいて画像処理装置内で生成された画素データに基づいて、x,y座標による2次元座標にて特定される画素と、当該画素ごとの深度値とが設定された図形データを取得する。なお、取得された図形データは、RAM703、磁気ディスク705、光ディスク707などの記憶領域に記憶される。
【0057】
描画部722は、取得部721によって取得された図形データを描画する。描画部722による描画は、フレームバッファ140に対しておこなわれる。なお、描画部722は、取得部721によって図形データが取得されると、この図形データを一意的に描画するが、この描画処理は、後述する描画制御部726によって制御(禁止/許可)される。
【0058】
抽出部723は、取得部721によって取得された図形データが境界道路などの境界図形に指定されていた場合、当該図形データにおいて、x座標の値が同じ画素列の中のいずれか一つの画素に設定されている深度値を前記x座標の値ごとに抽出する。具体的には、たとえば、抽出部723は、取得部721によって取得された図形データが境界図形に指定されていた場合、当該図形データにおいて、x座標の値が同じ画素列の中のy座標が最小または最大となる画素に設定されている深度値を前記x座標の値ごとに抽出してもよい。
【0059】
書込部724は、抽出部723によって抽出された深度値をラインバッファによって構成された1D深度バッファ120のx座標の値ごとに書き込む。
【0060】
比較部725は、書込部724によってラインバッファ120に深度値が書き込まれた後、取得部721によってあらたな図形データが読み込まれると、当該図形データに含まれる任意の画素の深度値と、ラインバッファ120のx座標の値ごとに書き込まれている深度値の中の上述した任意の画素と同一のx座標の値に書き込まれている深度値とを比較する。比較結果は、RAM703などの記憶領域に記憶される。
【0061】
描画制御部726は、比較部725の比較結果に応じて描画部722によるあらたな図形データの描画を禁止する。具体的には、たとえば、描画制御部726は、比較部725によって、ラインバッファ120に書き込まれている深度値がより小さいと判断された場合に、描画部722によるあらたな図形データの描画を禁止する。
【0062】
以上説明したように、汎用の情報処理装置にて描画処理プログラムを実行させることによって、図7−2のような機能部を構成することができる。描画部722は、取得部721によって取得した図形データを一意的に描画する。その後、描画部722によって境界図形が描画されると、以降取得された図形データは、境界図形との深度比較によって描画制御部726が描画判断をおこない、描画部722の描画を制御する。
【0063】
<グラフィックスLSIによる構成例>
つぎに、2つめの構成例としては、グラフィックスLSIにて図1のハードウェア資源を用いて図1にて説明した画像処理を実現する構成が挙げられる。グラフィックスLSIは、画像描画に特化した構成をもつLSIである。ここではグラフィックスLSIによる実施の形態1〜4について説明する。
【0064】
・実施の形態1
まず、実施の形態1について説明する。実施の形態1は、グラフィックスLSIを用いた描画処理をおこなう場合のもっとも基本的な処理となる。
【0065】
(グラフィックスLSIおよびグラフィックスメモリの構成)
まず、グラフィックスLSIおよびグラフィックスメモリの構成について説明する。図8−1は、実施の形態1におけるグラフィックスLSIとグラフィックスメモリとの構成を示すブロック図である。
【0066】
図8−1のように、実施の形態1におけるグラフィックスLSI810は、画素データ処理部811と、アドレス計算/画素値抽出部812と、深度比較部813と、1D深度バッファ814と、1D深度バッファ先頭アドレスレジスタ815と、フレームバッファ先頭アドレスレジスタ816と、2D深度バッファ先頭アドレスレジスタ817とを含んでいる。また、グラフィックスメモリ820は、フレームバッファ821と、2D深度バッファ822とを含んでいる。なお、上記の1D深度バッファ814は、上述したように2次元座標ごとにあらわされた深度値を、1次元座標ごとの深度値に減退させたラインバッファである。
【0067】
グラフィックスLSI810において、画素データ処理部811は、描画対象となる図形の図形データから頂点データを読み込み画素単位の画素データとして出力する。具体的に説明すると、画素データ処理部811には、頂点シェーダ(バーテックスシェーダ)、三角形セットアップ、ラスタライザ、フラグメントシェーダとの4種類のソフトウェア実行部が搭載されている。そして、画素データ処理部811に頂点データが入力されると、頂点シェーダによって座標変換が施される。座標変換された頂点データは、三角形セットアップ、ラスタライザ、フラグメントシェーダによって各処理を施された後、画素データとして出力される。なお、画素データ処理部811によって実行される4種類のソフトウェアは、グラフィックスLSIにおける標準的な処理であるため詳細な説明は省略する。
【0068】
アドレス計算/画素値抽出部812は、画素データ処理部811から出力された画素データから色値、[x,y]座標値および深度値を抽出する機能と、抽出した[x,y]座標値と各バッファの先頭アドレスとから画素データの読み書き対象アドレスを計算する機能とを備えている。
【0069】
画素データから抽出する値のうち、アドレス計算を必要としない色情報は、色情報抽出器812aによって抽出された後、グラフィックスメモリ820のフレームバッファ821に書き込まれる。また、深度値は、深度値抽出器812dによって抽出された後、1D深度バッファ814とグラフィックスメモリ820の2D深度バッファ822にそれぞれ書き込まれる。さらに、抽出された深度値は、深度比較部813にも送られる。
【0070】
画素データから抽出する値のうち、アドレス計算をおこなう[x,y]座標値は、y座標抽出器812bによって[y]座標値が抽出され、[x]座標値はx座標抽出器812cによって抽出される。そして、抽出された[x,y]座標値は、2次元アドレス計算機812eに入力され、2D深度バッファ822における画素データの読み書き対象アドレスを算出する。また、[x]座標値は、1次元アドレス計算機812fにも入力され、1D深度バッファ814における画素データの読み書き対象アドレスを算出する。
【0071】
なお、2次元アドレス計算機812eにおいてアドレスを計算する際には、2D深度バッファ先頭アドレスレジスタ817に書き込まれている2D深度バッファ822の先頭アドレスと、フレームバッファ先頭アドレスレジスタ816に書き込まれているフレームバッファ821の先頭アドレスとが参照される。同様に、1次元アドレス計算機812fにおいてアドレスを計算する際には、1D深度バッファ先頭アドレスレジスタ815に書き込まれている1D深度バッファ814の先頭アドレスが参照される。
【0072】
また、アドレス計算/画素値抽出部812に配置されたG1,G2,G3の各ゲートは、深度比較部813における深度比較によって不可視と判定された画素の書き込みを抑止するためのスイッチである。各ゲートのON/OFFは、後述する深度比較部813のゲート制御器813cによって制御される。
【0073】
深度比較部813は、あらかじめ設定された深度バッファ比較条件を基準として、入力された画素データから抽出された深度値と、各深度バッファにすでに書き込まれている深度値とを比較する。具体的には、1D深度バッファ比較条件レジスタ813aおよび2D深度バッファ比較条件レジスタ813bには、それぞれ、あらたに読み込んだ画素データとの深度値比較の際に利用する比較条件が書き込まれている。そして、1D深度バッファ比較条件レジスタ813aには、境界道路301を基準とした描き分け判断の際に、2D深度バッファ2D深度バッファ比較条件レジスタ813bには、陰面消去処理の判断の際にそれぞれ、比較条件が読み出される。また、そして、深度比較部813dは、比較結果に応じてゲート制御器813cの振る舞いを変化させる。
【0074】
なお、上述した1D深度バッファ比較条件レジスタ813aおよび2D深度バッファ比較条件レジスタ813bに書き込まれている深度バッファ比較条件としては、たとえば、3DグラフィックスのためのプログラムインターフェイスであるOpenGLの例に倣えば、「NEVER(未処理)」、「LESS(未満:<)」、「EQUAL(同等:=)」、「LEQUAL(以下:≦)」、「GREATER(超過:>)」、「NOTEQUAL(不等:≠)」、「GEQUAL(以上:≧)」、「ALWAIS(常時)」の中からいずれかを選択するものとする。
【0075】
上述した構成のうち、本実施の形態の特有の構成は、アドレス計算/画素値抽出部812における1次元アドレス計算機812fと、ゲートG3と、深度比較部813における1D深度バッファ比較条件レジスタ813a、ゲート制御器813cのゲートG3制御機能、深度比較器813dの最新画素の深度値と1D深度バッファ814の深度値とを比較する機能、1D深度バッファ814、1D深度バッファ先頭アドレスレジスタ815である。
【0076】
また、2次元アドレス計算機812eは、一般的な方式と同様に、画素の[x,y]座標を用いる。これに対して、1次元アドレス計算機812fは、画素のy座標を無視して画素のx座標のみを用いることにより、2次元座標系と1次元座標系との変換を適切におこなうことができる(図6参照)。
【0077】
つぎに、ゲート制御器813cにおける制御内容について説明する。図8−2は、ゲート制御器における制御をあらわす真理値表である。なお、実施の形態1の説明では、図8−2における、ゲートG1〜G3の記載についてのみ説明する。なお、ゲートG4に関しては実施の形態2以降に利用されるゲートであるため、内容については後述する。また、ゲートG4の有無を除いて、他のゲートG1〜G3の制御内容は、全実施の形態にて共通である。
【0078】
各ゲートGの制御内容は、画像処理装置100における処理グループの状態に依存する。処理グループは、画像処理装置100においてどのような図形データを描画しようとしているかによって下記の4つに分類される。
【0079】
処理グループ1:境界道路描画以前の境界道路以外の道路描画
処理グループ2:境界道路描画
処理グループ3:境界道路描画以降の境界道路以外の道路描画
処理グループ4:3Dビル描画
【0080】
なお、処理グループ4のcaseAは、1D深度バッファ814による深度比較と2D深度バッファ822による深度比較の両方の結果、描画図形が可視と判定された場合に相当する。また、処理グループ4のcaseBは、1D深度バッファ814による深度比較の結果、描画図形が不可視と判定された場合に相当する。さらに、処理グループ4のcaseCは、2D深度バッファ822による深度比較の結果、描画図形が不可視と判定された場合に相当する。
【0081】
各ゲートGについて説明すると、まず、ゲートG1は、フレームバッファ821への描画制御である。処理グループ1から処理グループ3までは、2D深度バッファ822による深度比較(陰面消去処理用)をおこなわず、常時描画するためONとなる。また、処理グループ2は、本実施の形態における特徴的な状態である。したがって、1D深度バッファ814による深度比較(境界道路に相当する深度境界の生成)をおこなって1D深度バッファ814に反映させながらも、フレームバッファ821には常時描画するという状態である。そして、処理グループ4では、可視と判定されたcaseA以外は、フレームバッファ821に描画しないためOFFとなる。
【0082】
つぎに、ゲートG2は、2D深度バッファ822への上書き更新制御である。処理グループ1から処理グループ3までは、2D深度バッファ822による深度比較(陰面消去処理用)をおこなわないので、常時OFFとなる。そして、処理グループ4では、可視と判定されたcaseA以外は、2D深度バッファ822を上書き更新しないためOFFとなる。
【0083】
つぎに、ゲートG3は1D深度バッファ814への上書き更新制御である。処理グループ1と処理グループ3とでは、1D深度バッファ814による深度比較(境界道路に相当する深度境界の生成)をおこなわないため、常時OFFとなる。処理グループ2では、1D深度バッファ814による深度比較をおこなって1D深度バッファ814上に深度境界を生成するため、ONとなる。そして、処理グループ4では、1D深度バッファ814上に生成済みの深度境界を保護するため、常時OFFとなる。
【0084】
(描画処理手順)
つぎに実施の形態1における描画処理手順について説明する。図9−1および図9−2は、実施の形態1における描画処理手順を示すフローチャートである。図9−1では、前半の処理グループ1,2の処理手順を説明し、図9−2では、後半の処理グループ3,4の処理手順を説明する。また、図9−1および図9−2の左側の領域は、描画コマンドとしてプログラムに記述された内容が実行されることによってLSIに指示として送られる処理である。一方、右側の領域は、描画コマンドとして受け取った指示を、グラフィックスLSIが内部で自動的に変換して実行する処理をあらわしている。
【0085】
図9−1の処理グループ1は、境界道路を含まない2D地図データ901をフレームバッファ821に描画する処理である。まず、1D深度バッファ814および2D深度バッファ822と、フレームバッファ821とについて、後段の処理にて読み込む2D地図データ901との深度比較を無効化する(ステップS911〜S913)。続いて、外部から2D地図データ901を読み込み、鳥瞰図表現による擬似3D的な2D地図を描画する(ステップS914)。なお、ここで読み込む2D地図データ901には、境界道路は含まれていないものとする。また、ステップS914では、ステップS911〜S913によって深度比較を無効化しているので、各深度バッファへの深度値の書込みはおこなわれない。一方、グラフィックスLSIでは、ステップS914の描画指示を受けて2D地図データ901の図形をフレームバッファ821に描画し(ステップS915)、処理グループ1の処理が終了する。
【0086】
つぎに、処理グループ2は、境界道路部分の2D地図データ902をフレームバッファ821に描画する処理である。また境界道路を描画する際は、境界道路の深度値を1D深度バッファ814に上書きする処理も追加される。まず、1D深度バッファ814の深度比較を有効化(ステップS921)するとともに、1D深度バッファ814への書込み(深度値の更新)を許可する(ステップS922)。続いて、1D深度バッファ814を、最遠方に相当する深度値でクリアする(ステップS923)。グラフィックスLSIでは、ステップS923のクリア指示に応じて、最遠方に相当する深度値で1D深度バッファ814が塗りつぶす(ステップS924)。
【0087】
さらに、外部から境界道路に相当する2D地図データ902を読み込み、ステップS914と同様に、鳥瞰図表現による擬似3D的な2D地図を描画する(ステップS925)。なお、ここで読み込まれた2D地図データ902は、境界道路であるが、必ずしも処理グループ2において境界道路を描画する必然性はなく、一例に過ぎない。すなわち、ここでは、2次元地図データ中の任意の読み出し順序に位置するデータが境界道路として採用される可能性があることをあらわしている。
【0088】
グラフィックスLSI810では、フレームバッファ821については2D地図データ902との深度比較をおこなわずに、境界道路を構成する画素の色値をそのまま描画する(ステップS926)。1D深度バッファ814については2D地図データ902との画素の重なり合いが発生した場合、深度比較をおこなう(ステップS927)。このときの深度比較ルールはLESSである。すなわち、深度値が小さい方(視点に近い方)の値が採用される。
【0089】
したがって、ステップS927において、境界道路に相当する2D地図データ902の深度が1D深度バッファ814よりも手前である場合(ステップS927:Yes)、1D深度バッファ814に境界道路の深度が上書き更新される(ステップS928)。なお、境界道路に相当する2D地図データ902の深度が1D深度バッファ814よりも奥である場合(ステップS927:No)、1D深度バッファ814はステップS924において更新せずに、処理グループ3に移行する。
【0090】
ここで、ステップS927の処理についてさらに説明する。境界道路が単一の図形で構成される場合、本来であれば2次元的に境界道路の画素は他の図形の画素と重なり合わない。しかしながら、本実施の形態の場合、境界道路の2次元の深度値分布をx座標(横方向)のみの1次元の深度値に縮退させている。この1次元の深度値は、x座標が同じであれば、異なるy座標(縦方向)すべての深度値が同じ値として扱われる。したがって、図形では、重なり合っていないながら、深度比較処理上は必然的に重なりが発生してしまう。結果的に、ステップS927の処理によって、境界道路の視点に近い側の端に相当する深度値が1D深度814バッファ上に残ることになる。
【0091】
また、ステップS926にて説明したように、フレームバッファ821については、1D深度バッファ814とは対照的に、深度比較をおこなわない。これは、境界道路の深度値が1D深度バッファ814上で縮退されているためである。具体的には、境界道路301の視点に近い側の比較が終了した後に、同じx座標を持つより遠方側の画素を描画する場合に、深度比較で正しく手前か奥かを判断できない。結果として、フレームバッファ821上の境界道路の画素に欠損が生じてしまう可能性がある。なお、従来の一般的なグラフィックスシステムでは、深度比較の有効無効は深度バッファとフレームバッファ821の両方に共通に作用してしまうので、本発明のように独立に制御できない。
【0092】
つぎに、図9−2の処理グループ3は、処理グループ1と同様に境界道路を含まない2D地図データ903をフレームバッファ821に描画する処理である。処理グループ1との違いは、すでに境界道路が描画されており、1D深度バッファ814に境界道路の深度が上書きされている点である。まず、1D深度バッファ814との深度比較を再び無効化し(ステップS931)、境界道路以外の残りの2D地図データ903を鳥瞰図表現で擬似3次元的に描画する(ステップS932)。一方、グラフィックスLSI810では、ステップS932の描画指示を受けて2D地図データ903の図形をフレームバッファ821に描画し(ステップS933)、処理グループ3の処理が終了する。
【0093】
最後に処理グループ4は、描画データの中の3Dビルデータ904をフレームバッファ821に描画する。まず、描画のための準備として、1D深度バッファ814、2D深度バッファ822およびフレームバッファ821それぞれと3Dビルデータ904との深度比較をすべて有効化する(ステップS941〜S943)。また、ステップS941〜S943の処理と併せて1D深度バッファ814への書込みを禁止し(ステップS944)、2D深度バッファ822への書込みを許可する(ステップS945)。
【0094】
ステップS944のように1D深度バッファ814への書込みを禁止することによって、3Dビルデータ904の描画がすべて完了するまでの間、境界道路の深度値を1D深度バッファ814上に保持して保護することができる。また、2D深度バッファ822に関しては、一般的なグラフィックスシステムと同様に陰面消去処理をおこなう必要がある。したがって、視点により近いビルの深度値で上書きされるように、ステップS945のように書込みを許可しておく必要がある。
【0095】
続いて、2D深度バッファ822を、最遠方に相当する深度値でクリアする(ステップS946)。したがって、グラフィックスLSI810では、ステップS946のクリア指示に応じて、最遠方に相当する深度値で2D深度バッファ822を塗りつぶす(ステップS947)。
【0096】
そして、3Dビルデータ904が読み込まれると、3Dビルデータ904に含まれている複数の3Dビルを順番に描画する(ステップS948)。グラフィックスLSI810では、フレームバッファ821に3Dビルを描画するための処理がおこなわれる。なお、グラフィックスLSI810は、ステップS948による3Dビルデータ904の描画指示に応じて3Dビルデータ904に含まれている複数の3Dビルを順番に描画する。したがって、以下に説明する処理は、3Dビルデータ904に含まれている複数の3Dビルについてそれぞれおこなわれる。
【0097】
まず、1D深度バッファ814と3Dビルとの深度比較をおこない、3Dビルが境界道路の奥か否かを判断する(ステップS949)。このステップS949における深度比較はGREATERである。すなわち、1D深度バッファ814に書き込まれている境界道路の深度値より大きい、言い換えるとより遠方側のビルであれば(ステップS949:Yes)、その3Dビルは可視である(描画する必要がある)可能性があるため、つぎに、2D深度バッファ822との深度比較に移行する。
【0098】
一方、ステップS949において、境界道路の深度値より小さい、すなわち境界道路よりより視点に近い3Dビルであれば(ステップS949:No)、描画によって境界道路より手前の道路を遮蔽してしまうため、この段階で描画をキャンセルして3Dビルデータ904の中のつぎの3Dビルに対する処理に移行する。
【0099】
ステップS949によって境界道路の奥にあると判断された(ステップS949:Yes)3Dビルは、さらに、2D深度バッファ822と深度比較をおこない、3Dビルが2D深度バッファ822に書き込まれている深度値よりも手前か否かを判断する(ステップS950)。したがってステップS950における深度比較ルールはLESSとなる。
【0100】
ステップS950の判断は、一般的な陰面消去処理時の処理である。2D深度バッファ822は、ステップS947によって最遠方に相当する深度値に塗りつぶされている。したがって、3Dビルデータ904に含まれる3Dビルのうち最初に処理された3Dビルは、必然的に2D深度バッファ822の深度値よりも手前と判断される。
【0101】
ステップS950の判断において、3Dビルが2D深度バッファ822に書き込まれている深度値よりも手前であれば(ステップS950:Yes)、3Dビルの他の図形の陰面にならない。そこで、3Dビルを正しい遠近関係でフレームバッファ821に描画する(ステップS951)。また、フレームバッファ821に描画された3Dビルの深度値を2D深度バッファ822に上書き更新する(ステップS952)。このステップS952によって上書き更新された3Dビルの深度値は、つぎに描画される3Dビルに対する陰面消去処理の判断に利用される。
【0102】
なお、ステップS950の判断において、3Dビルが2D深度バッファ822に書き込まれている深度値よりも奥であれば(ステップS950:No)、他の3Dビルの陰面に位置することになる。したがって、この段階で描画をキャンセルして3Dビルデータ904の中のつぎの3Dビルに対する処理に移行する。そして、3Dビルデータ904に含まれるすべての3Dビルの処理が終わると、そのまま一連の処理を終了する。なお、図9−1および図9−2において説明した各処理は、グラフィックスLSI内部においては、一つの図形の処理中にその図形を構成するすべての画素にわたってループ実行される。
【0103】
このように、実施の形態1では、境界道路を描画する際に、あらたな構成である1D深度バッファに境界道路の深度値を書き込むことによって境界道路を基準とした図形データの描き分けが可能になった。また、ステップS949における1D深度バッファ814との深度比較によって境界道路の手前と判断された場合は(ステップS949:No)、2D深度バッファとの深度比較をおこなう必要がない。したがってグラフィックスLSI外部のグラフィックスメモリへのアクセスが発生せず、性能向上効果も得られる。
【0104】
以上、図9−1および図9−2にて説明した各手順を従来の3次元画像処理と比較して論理的なパイプラインとして簡潔に説明する。ここで、図10−1は、従来の3次元画像処理のデータの流れを示すブロック図である。また、図10−2は、実施の形態1における3次元画像処理のデータの流れを示すブロック図である。
【0105】
図10−1のように、従来は、入力された頂点データは、頂点シェーダ(ステップS1001)、三角形セットアップ(ステップS1002)、ラスタライザ(ステップS1003)、フラグメントシェーダ(ステップS1004)を施した後、2D深度バッファによる深度テストをおこない(ステップS1005)、描画処理が実行され(ステップS1006)、出力された画素データがフレームバッファ821に書き込まれる。なお、ステップS1005における深度テストは陰面消去処理に利用される。
【0106】
一方、実施の形態1の場合は、上述のステップS1001〜ステップS1004の処理をおこなった後、追加した1D深度バッファ814による深度テストがおこなわれる(ステップS1007)。このステップS1007における深度テストは境界道路を基準として描画判断に利用される。その後、従来と同様に、2次元バッファによる深度テストをおこない(ステップS1005)、描画処理が実行され(ステップS1006)、出力された画素データがフレームバッファ821に書き込まれる。
【0107】
図11は、実施の形態1による地図画像の描画例を示す説明図である。図10−2にて説明した処理をおこなうことにより、描画例1100のような境界道路301を基準とした3Dビルの描き分けがなされた3D地図画像が描画される。
【0108】
・実施の形態2
つぎに、実施の形態2について説明する。実施の形態2では、描画対象図形として入力された図形データから頂点情報を優先的に抽出して、境界道路との深度比較に利用する。
【0109】
(グラフィックスLSIおよびグラフィックスメモリの構成)
まず、グラフィックスLSIおよびグラフィックスメモリの構成について説明する。図12は、実施の形態2におけるグラフィックスLSIとグラフィックスメモリとの構成を示すブロック図である。以下、図8−1に示した実施の形態1のグラフィックスLSI810との相違点について説明する。
【0110】
図12のように、実施の形態2におけるグラフィックスLSI1210は、図8−1のグラフィックスLSI810の画素データ処理部811に代わって、頂点シェーダ1211と、画素データ処理部1212を備えている。また、これら頂点シェーダ1211と、画素データ処理部1212とを制御するためのゲートG4が追加されている。
【0111】
頂点シェーダ1211は、独立した機能ブロックとなっているため、ゲートG4によって画素データ処理部1212に出力するデータを遮断することができる。また、頂点シェーダ1211には、ジオメトリシェーダのプログラムも含まれている。なお、図8−2に示しているように、ゲートG4は、ゲート制御器813cによって、頂点データの深度値と1D深度バッファ814との深度比較が不合格になった場合に遮断されるよう制御される。
【0112】
ゲートG4が遮断されると、頂点シェーダ1211から出力された頂点データが画素データ処理部1212の三角形セットアップに送られない。すなわち、上述したように、頂点データの深度値と1D深度バッファ814との深度比較が不合格になった場合は、描画対象図形は描画しないと判断されたことになる。したがって、ゲートG4をOFFにすることで描画対象図形の画素化を早期にキャンセルし、無駄な処理を省略することができる。したがって、性能向上にも寄与することができる。
【0113】
また、頂点シェーダ1211、アドレス計算/画素値抽出部812のx座標抽出器812cと深度値抽出器812dとにデータを流す経路が追加されている。この経路を通って、頂点シェーダ1211によって座標変換された頂点データが、画素データに変換されることなく直接供給される。すなわち、画素座標[x,y]の一つ一つの画素データに含まれるx座標と深度値を抽出する代わりに、三角形の頂点座標[x,y]のみのx座標と深度値を抽出し、1D深度バッファ814との深度比較をおこなう。
【0114】
つぎに、実施の形態2においてあらたに追加されたゲートG4の制御内容について説明する。図8−2を用いて説明すると、ゲートG4は、頂点データの読込みキャンセル制御である。したがって処理グループ4のcaseBのみ、1D深度バッファ814による深度比較(深度境界より奥か手前か)により図形描画を事前キャンセルできるので、OFFとなる。
【0115】
(描画処理手順)
つぎに実施の形態2における描画処理手順について説明する。図13および図14は、実施の形態2における描画処理手順を示すフローチャートである。なお、図9−1および図9−2にて説明した実施の形態1の描画処理手順の処理グループ1〜3については、実施の形態2において同様の処理となる。したがって、図13および図14では、処理内容の異なる処理グループ4(3Dビルデータ904の描画処理)について説明する。なお、図13は、処理グループ4の前半の処理を、図14は、処理グループ4の後半の処理をあらわしている。
【0116】
図13の処理グループ4−1は、描画のための準備として各深度バッファを設定する処理である。まず、1D深度バッファ814、2D深度バッファ822およびフレームバッファ821それぞれの深度比較をすべて有効化する(ステップS1311〜S1313)。また、ステップS1311〜S1313の処理と併せて1D深度バッファ814への書込みを禁止し(ステップS1314)、2D深度バッファ822への書込みを許可する(ステップS1315)。
【0117】
ステップS1314のように1D深度バッファ814への書込みを禁止することによって、3Dビルデータ904の描画がすべて完了するまでの間、境界道路の深度値を1D深度バッファ814上に保持して保護することができる。また、2D深度バッファ822に関しては、一般的なグラフィックスシステムと同様に陰面消去処理をおこなう必要がある。したがって、視点により近いビルの深度値で上書きされるように、ステップS1315のように書込みを許可しておく必要がある。
【0118】
続いて、頂点深度比較モードを有効化し(ステップS1316)、2D深度バッファ822を、最遠方に相当する深度値でクリアする(ステップS1317)。したがって、グラフィックスLSI1210では、ステップS1317のクリア指示に応じて、最遠方に相当する深度値で2D深度バッファ814を塗りつぶす(ステップS1318)。
【0119】
つぎに、処理グループ4−2は、3Dビルデータ904に含まれている3Dビルを描画するコマンドを生成する処理である。まず、3Dビルデータ904を読み込むと、この3Dビルデータ904に含まれている複数の3Dビルを順番に描画する(ステップS1321)。グラフィックスLSI1210では、フレームバッファ821に3Dビルを描画するための処理がおこなわれる。なお、グラフィックスLSI1210は、ステップS1321による複数の3Dビルデータ904の描画指示に応じて順番に複数の3Dビルを描画する。したがって、以下に説明する処理は、3Dビルデータ904に含まれている複数の3Dビルについてそれぞれおこなわれる。
【0120】
これを受けてグラフィックスLSI1210では、ビルデータの描画指示に応じて頂点シェーダ1211によって算出された頂点座標を、さらに、3Dビルデータ904に含まれている一つのビルについての先頭入力頂点を頂点シェーダによって座標変換を施す(ステップS1322)。そして、ジオメトリ変換された3Dビルの頂点に対して1D深度バッファ814との深度比較をおこない、処理中の3Dビルの頂点が境界道路301よりも奥か否かを判断する(ステップS1323)。
【0121】
このステップS1323における頂点の深度比較において、1D深度バッファ814の深度値の方が大きい、すなわち、3Dビルが手前にあると判断された場合(ステップS1323:No)、同一の3Dビル中の後続頂点の深度比較を打ち切って、同じ3Dビルデータ904に含まれるつぎの3Dビルの処理に移行する。ここでは、ビルの一つの角が境界道路の手前か奥のどちらにあるかが分かれば、そのビル全体が境界道路のどちら側にあるか判明するという現実的な制約を利用している。そして、ステップS1323において、3Dビルが、境界道路301の奥にあると判断された場合(ステップS1323:Yes)、処理グループ4−3の処理に移行する。
【0122】
つぎに、図14の処理グループ4−3は、画素データ処理部1212において3Dビルデータ904を構成する図形のいずれかの頂点を選択して(ステップS1331)、三角形セットアップ(ステップS1332)と、ラスタライズ(ステップS1333)とを施すことによって描画対象図形を画素に分解する。
【0123】
そして、処理グループ4−4では、隠面消去判断に応じてフレームバッファ821への描画をおこなう。まず、ステップS1333によってラスタライズされた3Dビルの画素を選択し(ステップS1341)、2D深度バッファ822の対応座標に記録されている深度値との深度比較をおこない、選択した図形が2D深度バッファ822の対応座標に記録されている深度値よりも手前か否かを判断する(ステップS1342)。
【0124】
ステップS1342において、3Dビルが2D深度バッファ822に書き込まれている深度値よりも手前であれば(ステップS1342:Yes)、3Dビルの他の図形の陰面にならない。そこで、3Dビルを正しい遠近関係でフレームバッファ821に描画する(ステップS1343)。また、フレームバッファ821に描画された3Dビルの深度値を2D深度バッファ822に上書き更新し(ステップS1344)、ステップS1345の処理に移行する。このステップS1344によって上書き更新された3Dビルの深度値は、つぎに描画される3Dビルに対する陰面消去処理の判断に利用される。
【0125】
なお、ステップS1342の判断において、3Dビルが2D深度バッファ822に書き込まれている深度値よりも奥であれば(ステップS1342:No)、他の3Dビルの陰面に位置することになる。したがって、この段階で描画をキャンセルして3Dビルの全画素の処理が終了したかを判断する(ステップS1345)。ここで、他の画素の処理が残っている場合(ステップS1345:No)、つぎの画素を選択し(ステップS1346)、ステップS1342の処理に戻る。
【0126】
一方、全画素の処理が終了した場合(ステップS1345:Yes)、さらに、3Dビルにおける全頂点の処理が終了したか否かを判断する(ステップS1347)。ここで、他の頂点の処理が残っている場合(ステップS1347:No)、つぎの頂点を選択し(ステップS1348)、ステップS1332の処理に戻る。一方、3Dビルにおける全頂点の処理が終了した場合(ステップS1347:Yes)、3Dビルデータ904に含まれるすべての3Dビルの処理が終わると、そのまま一連の処理を終了する。
【0127】
また、図15は、実施の形態2における3次元画像処理のデータの流れを示すブロック図である。図15では、上述の図9−2のように、実施の形態2の処理を論理的なパイプラインとして簡潔に説明する。
【0128】
まず、入力された頂点データは、頂点シェーダ(ステップS1501)の後、追加した1D深度バッファ814による深度テストがおこなわれる(ステップS1502)。そして、三角形セットアップ(ステップS1503)、ラスタライザ(ステップS1504)、フラグメントシェーダ(ステップS1505)を施した後、2D深度バッファによる深度テストをおこない(ステップS1506)、描画処理が実行され(ステップS1507)、出力された画素データがフレームバッファ821に書き込まれる。
【0129】
・実施の形態3
つぎに、実施の形態3について説明する。実施の形態3では、複数の1D深度バッファを利用して複数の境界道路が設定された場合の描き分けを実現する。
【0130】
(グラフィックスLSIおよびグラフィックスメモリの構成)
まず、グラフィックスLSIおよびグラフィックスメモリの構成について説明する。図16は、実施の形態3におけるグラフィックスLSIとグラフィックスメモリとの構成を示すブロック図である。以下、図8−1に示した実施の形態1のグラフィックスLSI810と、図12に示した実施の形態2のグラフィックスLSI1210との相違点について説明する。
【0131】
グラフィックスLSI1610は、複数の1D深度バッファ1613(1D深度バッファA,B)を備えている。また、図12のグラフィックスLSI1210と同様に、画素データではなく頂点データの段階で、1D深度バッファとの深度比較をおこなう。その他、具体的な相違点として下記の点が挙げられる。
【0132】
・1D深度バッファ先頭アドレスレジスタ1614もA、Bの2つを備えている。
【0133】
・1D深度バッファA,B(1613)のどちらにアクセスするかを制御する1D深度バッファ選択機構1612を含んでいる。この、1D深度バッファ選択機構1612は、プログラムからの指示によりA/Bのいずれかを決定し、接続されているセレクタにより、アドレスおよびデータの通信経路を切り替える機能を備えている。
【0134】
・深度比較機構1611は、複数の1D深度バッファ1613からの判定出力を組み合わせる方法を定義する1次元深度バッファ合成条件レジスタ1611aを含んでいる。(たとえば、AND、ORなどの論理式を選択するための識別情報が格納され、ANDが選択されている場合であれば、1D深度バッファAと1D深度バッファBの両方の深度比較で合格した場合に、ゲートG4が開通する)
【0135】
(描画処理手順)
つぎに実施の形態3における描画処理手順について説明する。図17−1および図17−2は、実施の形態3における描画処理手順を示すフローチャートである。図9−1および図9−2にて説明した実施の形態1の描画処理手順の処理グループ1,3については、実施の形態3においても同様の処理となる。したがって、図17−1および図17−2では、処理内容の異なる処理グループ2(境界道路の描画処理)および処理グループ4(3Dビルデータ904の描画処理)について説明する。なお、図17−1は、処理グループ2の処理を、図17−2は、処理グループ4の処理をあらわしている。
【0136】
まず、図17−1の処理部グループ2は、複数の1D深度バッファに対応しているため、1D深度バッファの数だけループをおこなう。ここでは、ループ処理用に、1D深度バッファの通し番号iを設定し、まず、通し番号i=0に設定する(ステップS1721)。この通し番号は、グラフィックスLSI1610に搭載されたすべての1D深度バッファに付与されており、たとえば、1D深度バッファAであれば、通し番号i:0、1D深度バッファBであれば、通し番号i:1とする。
【0137】
そして、1D深度バッファiの深度比較を有効化(ステップS1722)するとともに、1D深度バッファiへの書込み(深度値の更新)を許可する(ステップS1723)。続いて、1D深度バッファiを、最遠方に相当する深度値でクリアする(ステップS1724)。グラフィックスLSI1610では、ステップS1724のクリア指示に応じて、最遠方に相当する深度値で1D深度バッファiを塗りつぶす(ステップS1725)。
【0138】
さらに、外部から境界道路に相当する2D地図データ902を読み込み、鳥瞰図表現による擬似3D的な2D地図を描画する(ステップS1726)。グラフィックスLSI1610では、フレームバッファ821については2D地図データ902との深度比較をおこなわずに、境界道路を構成する画素の色値をそのまま描画する(ステップS1727)。1D深度バッファiについては2D地図データ902との画素の重なり合いが発生した場合、深度比較をおこなう(ステップS1728)。このときの深度比較ルールはLESSである。すなわち、深度値が小さい方(視点に近い方)の値が採用される。
【0139】
したがって、ステップS1728において、境界道路に相当する2D地図データ902の深度が1D深度バッファiよりも手前である場合(ステップS1728:Yes)、1D深度バッファiに境界道路の深度が上書き更新される(ステップS1729)。なお、境界道路に相当する2D地図データ902の深度が1D深度バッファiよりも奥である場合(ステップS1728:No)、1D深度バッファiはステップS1725において最遠方に相当する深度値で塗りつぶされているため、更新せずに、つぎのステップS1730およびステップS1731の処理に移行する。
【0140】
つぎに、1D深度バッファiの深度比較を無効化する(ステップS1730)とともに、1D深度バッファiへの書込み(深度値の更新)を禁止する(ステップS1731)。そして、1D深度バッファの通し番号iがすべて終了したか否かを判断し(ステップS1732)、まだ1D深度バッファの通し番号iが残っている場合には(ステップS1732:No)、通し番号iをインクリメントし(ステップS1733)、つぎの通し番号iに対応する1D深度バッファiについて同様に処理を開始する。一方、1D深度バッファの通し番号iが終了した場合には(ステップS1732:Yes)、そのままつぎの処理グループ4へ移行する。
【0141】
つぎに、図17−2の処理部グループ4は、描画データの中の3Dビルデータ904をフレームバッファ821に描画する。まず、描画のための準備として、1D深度バッファ1613,1614、2D深度バッファ822およびフレームバッファ821それぞれの深度比較をすべて有効化する(ステップS1741〜S1743)。また、ステップS1741〜S1743の処理と併せて1D深度バッファ1613,1614への書込みを禁止し(ステップS1744)、2D深度バッファ822への書込みを許可する(ステップS1745)。
【0142】
続いて、2D深度バッファ822を、最遠方に相当する深度値でクリアする(ステップS1746)。したがって、グラフィックスLSI1610では、ステップS1746のクリア指示に応じて、最遠方に相当する深度値で2D深度バッファ822を塗りつぶす(ステップS1747)。
【0143】
そして、3Dビルデータ904が読み込まれると、3Dビルデータ904に含まれている複数の3Dビルを順番に描画する(ステップS1748)。グラフィックスLSI1610では、フレームバッファ821に3Dビルを描画するための処理がおこなわれる。なお、グラフィックスLSI810は、ステップS1748による3Dビルデータ904の描画指示に応じて3Dビルデータ904に含まれている複数の3Dビルを順番に描画する。したがって、以下に説明する処理は、3Dビルデータ904に含まれている複数の3Dビルについてそれぞれおこなわれる。
【0144】
まず、1D深度バッファのいずれか一つが選択される(ステップS1749)。そして、選択された1D深度バッファと3Dビルとの深度比較をおこない、3Dビルが境界道路の奥か否かを判断する(ステップS1750)。このステップS1750における深度比較はGREATERである。すなわち、選択された1D深度バッファに書き込まれている境界道路の深度値より大きい、言い換えるとより遠方側のビルであれば(ステップS1750:Yes)、つぎに、1D深度バッファがすべて終了したか否かを判断し(ステップS1751)、終了していなければ(ステップS1751:No)、つぎの1D深度バッファを選択し(ステップS1752)、ステップS1750の処理に戻る。
【0145】
一方、1D深度バッファがすべて終了していると判断された場合(ステップS1751:Yes)、その3Dビルは可視である(描画する必要がある)可能性があるため、つぎに、2D深度バッファ822との深度比較に移行する。なお、いずれかの1D深度バッファを選択した際に、一度でも3Dビルが境界道路の手前であると判断された場合には(ステップS1750:No)、この段階で描画をキャンセルして3Dビルデータ904の中のつぎの3Dビルに対する処理に移行する。
【0146】
一方、ステップS1750の判断では、はじかれずに(Noと判断されずに)、すべての1D深度バッファの処理が終了した場合は(ステップS1751:Yes)、つぎに、3Dビルは、2D深度バッファ822と深度比較をおこない、3Dビルが2D深度バッファ822に書き込まれている深度値よりも手前か否かを判断する(ステップS1753)。したがってステップS1753における深度比較ルールはLESSとなる。
【0147】
ステップS1750の判断は、一般的な陰面消去処理時の処理である。2D深度バッファ822は、ステップS1747によって最遠方に相当する深度値に塗りつぶされている。したがって、3Dビルデータ904に含まれる3Dビルのうち最初に処理された3Dビルは、必然的に2D深度バッファ822の深度値よりも手前と判断される。
【0148】
ステップS1753の判断において、3Dビルが2D深度バッファ822に書き込まれている深度値よりも手前であれば(ステップS1753:Yes)、3Dビルの他の図形の陰面にならない。そこで、3Dビルを正しい遠近関係でフレームバッファ821に描画する(ステップS1754)。また、フレームバッファ821に描画された3Dビルの深度値を2D深度バッファ822に上書き更新する(ステップS1755)。このステップS1755によって上書き更新された3Dビルの深度値は、つぎに描画される3Dビルに対する陰面消去処理の判断に利用される。
【0149】
なお、ステップS1753の判断において、3Dビルが2D深度バッファ822に書き込まれている深度値よりも奥であれば(ステップS1753:No)、他の3Dビルの陰面に位置することになる。したがって、この段階で描画をキャンセルして3Dビルデータ904の中のつぎの3Dビルに対する処理に移行する。そして、3Dビルデータ904に含まれるすべての3Dビルの処理が終わると、そのまま一連の処理を終了する。なお、図17−1および図17−2において説明した各処理は、グラフィックスLSI内部においては、一つの図形の処理中にその図形を構成するすべての画素にわたってループ実行される。
【0150】
図18−1は、実施の形態3における3次元画像処理のデータの流れを示すブロック図である。図18−1では、実施の形態1に、複数の1D深度バッファを搭載した場合の処理を論理的なパイプラインとして簡潔に説明する。
【0151】
まず、入力された頂点データは、頂点シェーダ(ステップS1811)、三角形セットアップ(ステップS1812)、ラスタライザ(ステップS1813)、フラグメントシェーダ(ステップS1814)を施した後、追加した1D深度バッファ1613(深度バッファA,B)によってそれぞれ深度テストがおこなわれる(ステップS1815,S1816)。その後、2D深度バッファ822による深度テストをおこない(ステップS1817)、描画処理が実行され(ステップS1818)、出力された画素データがフレームバッファ821に書き込まれる。
【0152】
また、図18−2は、実施の形態3における頂点単位の深度比較を含む3次元画像処理のデータの流れを示すブロック図である。図18−2では、複数の1D深度バッファを搭載し、さらに、実施の形態2のように、頂点単位の深度比較によって描画を制御する場合を論理的なパイプラインとして簡潔に説明する。
【0153】
まず、入力された頂点データは、頂点シェーダ(ステップS1821)の後、追加した1D深度バッファ1613(深度バッファA,B)によってそれぞれ深度テストがおこなわれる(ステップS1822,S1823)。その後、三角形セットアップ(ステップS1824)、ラスタライザ(ステップS1825)、フラグメントシェーダ(ステップS1826)を施した後、2D深度バッファ822による深度テストをおこない(ステップS1827)、描画処理が実行され(ステップS1828)、出力された画素データがフレームバッファ821に書き込まれる。
【0154】
(実施の形態4)
つぎに、実施の形態4について説明する。実施の形態4では、複数の境界道路を設定し、なおかつ単一の1D深度バッファを用いて深度比較をおこなう。また、実施の形態2,3と同様に、画素データではなく、頂点データの段階で1D深度バッファとの深度比較をおこなう。したがって、グラフィックスLSIの構成は、実施の形態2にて説明したグラフィックスLSI1210と同様であるため、ここでは説明を省略する。
【0155】
(描画処理手順)
つぎに実施の形態4における描画処理手順について説明する。図19−1および図19−2は、実施の形態4における描画処理手順を示すフローチャートである。なお、ここでも、実施の形態3と同様に、図9−1および図9−2にて説明した実施の形態1の描画処理手順の処理グループ1,3については処理に差異がない。したがって、図19−1および図19−2では、処理内容の異なる処理グループ2(境界道路の描画処理)および処理グループ4(3Dビルデータ904の描画処理)について説明する。なお、図19−1は、処理グループ2の処理を、図19−2は、処理グループ4の処理をあらわしている。
【0156】
まず、図19−1の処理部グループ2は、1つの1D深度バッファ814に複数の境界道路301の深度値を書き込む処理がおこなわれる。したがって、まず、1D深度バッファ814の深度比較を有効化(ステップS1921)するとともに、1D深度バッファ814への書込み(深度値の更新)を許可する(ステップS1922)。続いて、1D深度バッファ814を、最遠方に相当する深度値でクリアする(ステップS1923)。グラフィックスLSI1210では、ステップS1923のクリア指示に応じて、最遠方に相当する深度値で1D深度バッファ814を塗りつぶす(ステップS1924)。
【0157】
その後、複数の境界道路に対して順番に処理をおこなうため、ここでは、ループ処理用に、境界道路の通し番号jを設定し、まず、通し番号j=0に設定する(ステップS1925)。そして、複数の境界道路から境界道路jに相当する2D地図データ1701を読み込み、鳥瞰図表現による擬似3D的な2D地図を描画する(ステップS1926)。
【0158】
そして、グラフィックスLSI1210では、フレームバッファ821については2D地図データ1701との深度比較をおこなわずに、境界道路jを構成する画素の色値をそのまま描画する(ステップS1927)。そして、1D深度バッファ814については境界道路jの2D地図データ1701との画素の重なり合いが発生した場合、深度比較をおこなう(ステップS1928)。このときの深度比較ルールはLESSである。すなわち、深度値が小さい方(視点に近い方)の値が採用される。
【0159】
したがって、ステップS1928において、境界道路jに相当する2D地図データ1701の深度が1D深度バッファ814よりも手前である場合(ステップS1928:Yes)、1D深度バッファ814に境界道路の深度が上書き更新される(ステップS1929)。そして、境界道路jに相当する2D地図データ1701がすべて終了したか否かの判断をおこない(ステップS1930)、他の境界道路jが残っていれば(ステップS1930:No)、境界道路jをインクリメントし(ステップS1931)、ステップS1926の処理に戻る。なお、ステップS1928において、境界道路jに相当する2D地図データ1701の深度が1D深度バッファ814よりも奥である場合(ステップS1928:No)、つぎの境界道路jの処理へ切り替えるため、ステップS1930の処理へ移行する。
【0160】
一方、ステップS1930において、すべての境界道路jへの処理が終了していれば(ステップS1930:Yes)、複数の境界道路の深度値が1D深度バッファ814に集約して書き込まれたため、1D深度バッファ814の深度比較を無効化(ステップS1932)するとともに、1D深度バッファ814への書込み(深度値の更新)を禁止し(ステップS1933)、処理グループ3へ移行する。
【0161】
そして、図19−2では、処理グループ4として、描画データの中の3Dビルデータ904をフレームバッファ821に描画する。このステップS1941〜ステップS1952までの処理は、図9−2のステップS941〜952までの処理と同じであるため説明を省略する。
【0162】
しかしながら、実施の形態4の処理グループ4では、複数の境界道路の深度値が集約された1D深度バッファ814と3Dビルとの深度比較がなされている。ここで、実施の形態4における、複数の境界道路の深度値が集約された1D深度バッファ814について説明する。
【0163】
図20は、複数の境界道路の深度値が集約された1D深度バッファを示す模式図である。また、図21は、複数の境界道路の設定例を示す説明図である。図20の模式図2000は、1D深度バッファ814に書き込まれている深度値を濃淡によって表現している。ここでは、濃→淡が、手前→奥に対応している。すなわち、図20の模式図は、図21に示した複数の境界道路の設定例2100を反映した深度値をあらわしている。
【0164】
設定例2100では、複数の境界道路(たとえば、301A,301B)とが交差している場合、道路の輪郭のうち、視点から遠いものを破線および1点鎖線で表示している。1D深度バッファ814に境界道路301の深度値を描き込む際、判定式をLESS(描き込み済み深度より小さい深度値を持つ画素なら、その深度値で1D深度バッファ814を更新する)に設定する。この結果、破線や1点鎖線で示した道路輪郭や、道路内部の深度値は上書きされ、最終的に実線で示した道路輪郭の深度値が、1D深度バッファ814上に残る。
【0165】
上述した振る舞いは、境界道路301を何本追加してもかわらず、常に視点に近い側の道路輪郭が深度境界になる。逆に、1点鎖線で示した輪郭を深度境界にしたい場合は、判定式をLESSからGREATER(描き込み済み深度より大きい深度値を持つ画素なら、その深度値で1次元深度バッファを更新する)に変更すれば対応できる。なお、さらに、複雑な深度境界が必要な場合は、1つの1D深度バッファ814で対応できない状況がありうる。したがって、画像処理装置100のメモリ容量に応じて、実施の形態3にて説明したような複数の1D深度バッファを搭載する構成を選択してもよい。
【0166】
以上説明したように、本実施の形態によれば、境界道路の深度値の書込用に、ラインバッファである、1D深度バッファを搭載して、深度比較をおこなうため、実装が容易である。また、1D深度バッファを用いることによって、境界道路の深度値の比較をハードウェア的に実現するため、CPUへの処理負担も軽減される。たとえ、図7−1のように、汎用の情報処理装置を用いてソフトウェア的に実現する場合であっても、1D深度バッファは、情報処理装置のメモリ資源を利用するため、処理負荷を抑えることができる。したがって、CPUに多大な処理負担をかけることなく任意の境界図形を基準とした図形の描き分けを実現することができる。
【0167】
なお、本実施の形態で説明した画像処理方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVDなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネットなどのネットワークを介して配布することが可能な媒体であってもよい。
【0168】
また、本実施の形態で説明した画像処理装置100は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けIC(以下、単に「ASIC」と称す。)やFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。具体的には、たとえば、上述した画像処理装置100の機能(取得部721〜描画制御部726)をHDL記述によって機能定義し、そのHDL記述を論理合成してASICやPLDに与えることにより、画像処理装置100を製造することができる。
【0169】
上述した実施の形態に関し、さらに以下の付記を開示する。
【0170】
(付記1)ラインバッファと、
外部から入力された描画対象図形の頂点データから生成されたx,y座標による2次元座標にて特定される画素と、当該画素ごとの深度値とが設定された図形データを取得する取得手段と、
前記取得手段によって取得された図形データを描画する描画手段と、
前記取得手段によって取得された図形データが境界図形に指定されていた場合、当該図形データにおいて、x座標の値が同じ画素列の中のいずれか一つの画素に設定されている深度値を前記x座標の値ごとに抽出する抽出手段と、
前記抽出手段によって抽出された深度値を前記ラインバッファにおけるx座標の値ごとに書き込む書込手段と、
前記書込手段によって前記ラインバッファに深度値が書き込まれた後、前記取得手段によって、あらたな描画対象図形の頂点データから生成された図形データが読み込まれると、当該図形データに含まれる任意の画素の深度値と、前記ラインバッファにおけるx座標の値ごとに書き込まれている深度値の中の前記画素と同一のx座標の値に書き込まれている深度値とを比較する比較手段と、
前記比較手段の比較結果に応じて前記描画手段による前記あらたな描画対象図形の頂点データから生成された図形データの描画を禁止する描画制御手段と、
を備えることを特徴とする画像処理装置。
【0171】
(付記2)前記抽出手段は、前記取得手段によって取得された図形データが境界図形に指定されていた場合、当該図形データにおいて、x座標の値が同じ画素列の中のy座標が最小となる画素に設定されている深度値を前記x座標の値ごとに抽出することを特徴とする付記1に記載の画像処理装置。
【0172】
(付記3)前記抽出手段は、前記取得手段によって取得された図形データが境界図形に指定されていた場合、当該図形データにおいて、x座標の値が同じ画素列の中のy座標が最大となる画素に設定されている深度値を前記x座標の値ごとに抽出することを特徴とする付記1に記載の画像処理装置。
【0173】
(付記4)前記比較手段は、前記書込手段によって前記ラインバッファに深度値が書き込まれた後、前記取得手段によってあらたな図形データが読み込まれると、当該図形データに含まれる頂点座標の画素の深度値と、前記ラインバッファにおけるx座標の値ごとに書き込まれている深度値の中の前記画素と同一のx座標の値に書き込まれている深度値とを比較することを特徴とする付記1〜3のいずれか一つに記載の画像処理装置。
【0174】
(付記5)前記描画制御手段は、前記比較手段によって、前記ラインバッファに書き込まれている深度値がより小さいと判断された場合に、前記あらたな図形データの描画を禁止することを特徴とする付記1〜4のいずれか一つに記載の画像処理装置。
【0175】
(付記6)前記描画制御手段は、前記取得手段によって取得された図形データが前記境界図に指定されていたか否かに応じて、前記描画手段による描画の禁止/許可を制御することを特徴とする付記1〜5のいずれか一つに記載の画像処理装置。
【0176】
(付記7)前記ラインバッファを複数備え、
前記抽出手段は、前記取得手段によって境界図形に指定された図形データが複数取得された場合、各図形データにおいて、x座標の値が同じ画素列の中のいずれか一つの画素に設定されている深度値を前記x座標の値ごとに抽出し、
前記書込手段は、前記抽出手段によって抽出された各図形データの深度値を前記ラインバッファ群の中の異なるラインバッファにおけるx座標の値ごとに書き込み、
前記比較手段は、前記書込手段によって前記ラインバッファ群に深度値が書き込まれた後、前記取得手段によってあらたな図形データが読み込まれると、当該図形データに含まれる任意の画素の深度値と、前記ラインバッファ群の各ラインバッファにおけるx座標の値ごとに書き込まれている深度値の中の前記画素と同一のx座標の値に書き込まれている深度値とを比較することを備えることを特徴とする付記1〜6のいずれか一つに記載の画像処理装置。
【0177】
(付記8)前記抽出手段は、前記取得手段によって境界図形に指定された図形データが複数取得された場合、各図形データにおいて、x座標の値が同じ画素列の中のいずれか一つの画素に設定されている深度値を前記x座標の値ごとに抽出し、
前記書込手段は、前記抽出手段によって抽出された各図形データの深度値の最小値を前記ラインバッファにおけるx座標の値ごとに書き込むことを特徴とする付記1〜6のいずれか一つに記載の画像処理装置。
【0178】
(付記9)前記描画手段は、前記取得手段によって取得された図形データが境界図形に指定されていた場合、前記比較手段による比較結果を無効にして前記図形データを描画することを特徴とする付記1〜8のいずれか一つに記載の画像処理装置。
【0179】
(付記10)ラインバッファにアクセス可能なコンピュータを、
外部から入力された描画対象図形の頂点データから生成されたx,y座標による2次元座標にて特定される画素と、当該画素ごとの深度値とが設定された図形データを取得する取得手段、
前記取得手段によって取得された図形データを描画する描画手段、
前記取得手段によって取得された図形データが境界図形に指定されていた場合、当該図形データにおいて、x座標の値が同じ画素列の中のいずれか一つの画素に設定されている深度値を前記x座標の値ごとに抽出する抽出手段、
前記抽出手段によって抽出された深度値を前記ラインバッファにおけるx座標の値ごとに書き込む書込手段、
前記書込手段によって前記ラインバッファに深度値が書き込まれた後、前記取得手段によって、あらたな描画対象図形の頂点データから生成された図形データに含まれる任意の画素の深度値と、前記ラインバッファにおけるx座標の値ごとに書き込まれている深度値の中の前記画素と同一のx座標の値に書き込まれている深度値とを比較する比較手段、
前記比較手段の比較結果に応じて前記あらたな描画対象図形の頂点データから生成された図形データを描画させないように前記描画手段を制御する描画制御手段、
として機能させることを特徴とする画像処理プログラム。
【0180】
(付記11)画像処理装置が、
外部から入力された描画対象図形の頂点データから生成されたx,y座標による2次元座標にて特定される画素と、当該画素ごとの深度値とが設定された図形データを取得する取得工程と、
前記取得工程にて境界図形に指定された図形データが取得された場合、当該図形データにおいて、x座標の値が同じ画素列の中のいずれか一つの画素に設定されている深度値を前記x座標の値ごとに抽出する抽出工程と、
前記抽出工程によって抽出された深度値をラインバッファにおけるx座標の値ごとに書き込む書込工程と、
前記境界図形に指定された図形データを描画する境界描画工程と、
前記取得工程にて境界図形に指定されていない図形データが取得された場合、当該境界図形に指定されていない図形データに含まれる任意の画素の深度値と、前記ラインバッファに書き込まれているx座標ごとの深度値の中から前記画素と同一のx座標の値に書き込まれている深度値とを比較する比較工程と、
前記比較工程による比較結果に応じて、前記境界図形に指定されていない図形データを描画する図形描画工程と、
を実行することを特徴とする画像処理方法。
【0181】
(付記12)描画データに含まれる第1図形データの各画素位置において、前記各画素位置に対応する第1深度値を第1軸方向に拡張して記憶し、
前記第1図形データの第2軸方向の画素位置と前記描画データに含まれる第2図形データの前記第2軸方向の所定の画素位置とを対応付け、
対応付けられた画素位置において、前記第1図形データの前記第1深度値と前記第2図形データの第2深度値とを比較し、
前記第1深度値と前記第2深度値とを比較した結果に応じて、前記第2図形データを描画するか否かを判定することを特徴とする画像処理方法。
【図面の簡単な説明】
【0182】
【図1】本実施の形態にかかる画像処理の概要を示す説明図である。
【図2】グラフィックスLSIによる地図画像の描画例を示す説明図である。
【図3】境界道路を含んだ描画例を示す模式図である。
【図4】判断基準面の一例を示す模式図である。
【図5】鳥瞰視点の地図画像描画時の描き分け判断処理を示す説明図である。
【図6】1D深度バッファの構成を示す説明図である。
【図7−1】実施の形態にかかる画像処理装置のハードウェア構成を示すブロック図である。
【図7−2】画像処理装置の機能的構成を示すブロック図である。
【図8−1】実施の形態1におけるグラフィックスLSIとグラフィックスメモリとの構成を示すブロック図である。
【図8−2】ゲート制御器における制御をあらわす真理値表である。
【図9−1】実施の形態1における描画処理手順を示すフローチャート(その1)である。
【図9−2】実施の形態1における描画処理手順を示すフローチャート(その2)である。
【図10−1】従来の3次元画像処理のデータの流れを示すブロック図である。
【図10−2】実施の形態1における3次元画像処理のデータの流れを示すブロック図である。
【図11】実施の形態1による地図画像の描画例を示す説明図である。
【図12】実施の形態2におけるグラフィックスLSIとグラフィックスメモリとの構成を示すブロック図である。
【図13】実施の形態2における描画処理手順を示すフローチャート(その1)である。
【図14】実施の形態2における描画処理手順を示すフローチャート(その2)である。
【図15】実施の形態2における3次元画像処理のデータの流れを示すブロック図である。
【図16】実施の形態3におけるグラフィックスLSIとグラフィックスメモリとの構成を示すブロック図である。
【図17−1】実施の形態3における描画処理手順を示すフローチャート(その1)である。
【図17−2】実施の形態3における描画処理手順を示すフローチャート(その2)である。
【図18−1】実施の形態3における3次元画像処理のデータの流れを示すブロック図である。
【図18−2】実施の形態3における頂点単位の深度比較を含む3次元画像処理のデータの流れを示すブロック図である。
【図19−1】実施の形態4における描画処理手順を示すフローチャート(その1)である。
【図19−2】実施の形態4における描画処理手順を示すフローチャート(その2)である。
【図20】複数の境界道路の深度値が集約された1D深度バッファを示す模式図である。
【図21】複数の境界道路の設定例を示す説明図である。
【符号の説明】
【0183】
100 画像処理装置
110 描画処理部
120 1D深度バッファ
130 2D深度バッファ
140 フレームバッファ
700 バス
701 CPU(Central Processing Unit)
702 ROM(Read‐Only Memory)
703 RAM(Random Access Memory)
704 磁気ディスクドライブ
705 磁気ディスク
706 光ディスクドライブ
707 光ディスク
708 ディスプレイ
709 I/F(Interface)
710 キーボード
711 マウス
712 スキャナ
713 プリンタ
721 取得部
722 描画部
723 抽出部
724 書込部
725 比較部
726 描画制御部

【特許請求の範囲】
【請求項1】
ラインバッファと、
外部から入力された描画対象図形の頂点データから生成されたx,y座標による2次元座標にて特定される画素と、当該画素ごとの深度値とが設定された図形データを取得する取得手段と、
前記取得手段によって取得された図形データを描画する描画手段と、
前記取得手段によって取得された図形データが境界図形に指定されていた場合、当該図形データにおいて、x座標の値が同じ画素列の中のいずれか一つの画素に設定されている深度値を前記x座標の値ごとに抽出する抽出手段と、
前記抽出手段によって抽出された深度値を前記ラインバッファにおけるx座標の値ごとに書き込む書込手段と、
前記書込手段によって前記ラインバッファに深度値が書き込まれた後、前記取得手段によって、あらたな描画対象図形の頂点データから生成された図形データが読み込まれると、当該図形データに含まれる任意の画素の深度値と、前記ラインバッファにおけるx座標の値ごとに書き込まれている深度値の中の前記画素と同一のx座標の値に書き込まれている深度値とを比較する比較手段と、
前記比較手段の比較結果に応じて前記描画手段による前記あらたな描画対象図形の頂点データから生成された図形データの描画を禁止する描画制御手段と、
を備えることを特徴とする画像処理装置。
【請求項2】
前記抽出手段は、前記取得手段によって取得された図形データが境界図形に指定されていた場合、当該図形データにおいて、x座標の値が同じ画素列の中のy座標が最小となる画素に設定されている深度値を前記x座標の値ごとに抽出することを特徴とする請求項1に記載の画像処理装置。
【請求項3】
前記描画制御手段は、前記比較手段によって、前記ラインバッファに書き込まれている深度値がより小さいと判断された場合に、前記描画手段による前記あらたな図形データの描画を禁止することを特徴とする請求項1または2に記載の画像処理装置。
【請求項4】
前記描画手段は、前記取得手段によって取得された図形データが境界図形に指定されていた場合、前記比較手段による比較結果を無効にして前記図形データを描画することを特徴とする請求項1〜3のいずれか一つに記載の画像処理装置。
【請求項5】
ラインバッファにアクセス可能なコンピュータを、
外部から入力された描画対象図形の頂点データから生成されたx,y座標による2次元座標にて特定される画素と、当該画素ごとの深度値とが設定された図形データを取得する取得手段、
前記取得手段によって取得された図形データを描画する描画手段、
前記取得手段によって取得された図形データが境界図形に指定されていた場合、当該図形データにおいて、x座標の値が同じ画素列の中のいずれか一つの画素に設定されている深度値を前記x座標の値ごとに抽出する抽出手段、
前記抽出手段によって抽出された深度値を前記ラインバッファにおけるx座標の値ごとに書き込む書込手段、
前記書込手段によって前記ラインバッファに深度値が書き込まれた後、前記取得手段によって、あらたな描画対象図形の頂点データから生成された図形データに含まれる任意の画素の深度値と、前記ラインバッファにおけるx座標の値ごとに書き込まれている深度値の中の前記画素と同一のx座標の値に書き込まれている深度値とを比較する比較手段、
前記比較手段の比較結果に応じて前記あらたな描画対象図形の頂点データから生成された図形データを描画させないように前記描画手段を制御する描画制御手段、
として機能させることを特徴とする画像処理プログラム。
【請求項6】
画像処理装置が、
外部から入力された描画対象図形の頂点データから生成されたx,y座標による2次元座標にて特定される画素と、当該画素ごとの深度値とが設定された図形データを取得する取得工程と、
前記取得工程にて境界図形に指定された図形データが取得された場合、当該図形データにおいて、x座標の値が同じ画素列の中のいずれか一つの画素に設定されている深度値を前記x座標の値ごとに抽出する抽出工程と、
前記抽出工程によって抽出された深度値をラインバッファにおけるx座標の値ごとに書き込む書込工程と、
前記境界図形に指定された図形データを描画する境界描画工程と、
前記取得工程にて境界図形に指定されていない図形データが取得された場合、当該境界図形に指定されていない図形データに含まれる任意の画素の深度値と、前記ラインバッファに書き込まれているx座標ごとの深度値の中から前記画素と同一のx座標の値に書き込まれている深度値とを比較する比較工程と、
前記比較工程による比較結果に応じて、前記境界図形に指定されていない図形データを描画する図形描画工程と、
を実行することを特徴とする画像処理方法。
【請求項7】
描画データに含まれる第1図形データの各画素位置において、前記各画素位置に対応する第1深度値を第1軸方向に拡張して記憶し、
前記第1図形データの第2軸方向の画素位置と前記描画データに含まれる第2図形データの前記第2軸方向の所定の画素位置とを対応付け、
対応付けられた画素位置において、前記第1図形データの前記第1深度値と前記第2図形データの第2深度値とを比較し、
前記第1深度値と前記第2深度値とを比較した結果に応じて、前記第2図形データを描画するか否かを判定することを特徴とする画像処理方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7−1】
image rotate

【図7−2】
image rotate

【図8−1】
image rotate

【図8−2】
image rotate

【図9−1】
image rotate

【図9−2】
image rotate

【図10−1】
image rotate

【図10−2】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17−1】
image rotate

【図17−2】
image rotate

【図18−1】
image rotate

【図18−2】
image rotate

【図19−1】
image rotate

【図19−2】
image rotate

【図20】
image rotate

【図21】
image rotate