(57)【要約】【課題】計算負荷を小さくすることのできる描画装置を提供する。【解決手段】三角形のエッジ関数をｆｉ（ｘ、ｙ）＝ａｉｘ＋ｂｉｙ＋ｃｉとし、重なり判定対象の矩形領域の幅と高さを２ｗ、２ｈとしたとき、Ｄ［ｆｉ］＝｜ａｉ｜ｗ＋｜ｂｉ｜ｈという値を考える。そして、矩形領域の中心座標を（ｘｄ、ｙｄ）として、ｆｉ（ｘｄ、ｙｄ）とＤ［ｆｉ］との大小関係をすべてのエッジについて調べることにより、三角形と矩形領域が重なるか否かを判定する。【選択図】図１
2010072917.tif 000002
【特許請求の範囲】
【請求項１】
矩形領域と図形との重なった部分を描画する描画装置であって、
ａ、ｂ、ｃを定数として、該図形を表現する、変数（ｘ、ｙ）についての１以上の直線の式f(x, y) = ax + by + c = 0を設定する図形設定手段と、
該図形と重なるか否かの判断対象である、中心座標が(xd, yd)、幅2w、高さ2hの該矩形領域を設定する矩形領域設定手段と、
D[f] = |a|w + |b|hとして、−D[f] < f(xd, yd) < D[f] ならば、該図形と該矩形領域が重なり、f(xd, yd) ≦ −D[f]、もしくは、D[f] ≦ f(xd, yd) ならば重ならないと判定する判定手段と、
該図形と該矩形領域が重なる場合に、該矩形領域を描画する描画手段と、
を備えることを特徴とする描画装置。
【請求項２】
前記矩形領域の辺が座標軸と平行でない場合に、座標軸を、該矩形領域の辺が座標軸に平行となるように回転変換する回転変換手段を更に備えることを特徴とする請求項１に記載の描画装置。
【請求項３】
矩形領域と凸ｎ角形との重なった部分を描画する描画装置であって、
ａi、ｂi、ｃi（ｉは整数）を定数として、該凸ｎ角形を表現する、変数（ｘ、ｙ）についての１以上のエッジ関数の式fi(x, y) = aix + biy + ci= 0を設定する凸ｎ角形設定手段と、
該凸ｎ角形と重なるか否かの判断対象である、中心座標が(xd, yd)、幅2w、高さ2hの該矩形領域を設定する矩形領域設定手段と、
該凸ｎ角形に外接する四角形領域であるバウンディング領域を設定するバウンディング領域設定手段と、
D[fi] = |ai|w + |bi|hとして、該矩形領域がバウンディング領域の外部に存在すれば重ならないとし、少なくとも一つのfiについて、fi(xd, yd) < −D[fi]となれば重ならないと判定し、矩形領域と凸n 角形の境界領域が重なり、すべてのエッジ関数についてfi(xd, yd) ≧ −D[fi] となれば、重なると判定し、すべてのエッジ関数についてfi(xd, yd)
≧ D[fi] となれば、矩形領域内のすべての点は対象の凸n 角形に含まれると判定する判定手段と、
該凸ｎ角形と該矩形領域が重なる、あるいは、該矩形領域が該凸ｎ角形に含まれる場合に、該矩形領域を描画する描画手段と、
を備えることを特徴とする描画装置。
【請求項４】
矩形領域と図形との重なった部分を描画する描画方法であって、
ａ、ｂ、ｃを定数として、該図形を表現する、変数（ｘ、ｙ）についての１以上の直線の式f(x, y) = ax + by + c = 0を設定し、
該図形と重なるか否かの判断対象である、中心座標が(xd, yd)、幅2w、高さ2hの該矩形領域を設定し、
D[f] = |a|w + |b|hとして、−D[f] < f(xd, yd) < D[f] ならば、該図形と該矩形領域が重なり、f(xd, yd) ≦ −D[f]、もしくは、D[f] ≦ f(xd, yd) ならば重ならないと判定し、
該図形と該矩形領域が重なる場合に、該矩形領域を描画する、
ことを特徴とする描画方法。
【請求項５】
矩形領域と図形との重なった部分を描画する描画方法をコンピュータに実現させるプログラムを格納した記録媒体であって、
ａ、ｂ、ｃを定数として、該図形を表現する、変数（ｘ、ｙ）についての１以上の直線の式f(x, y) = ax + by + c = 0を設定し、
該図形と重なるか否かの判断対象である、中心座標が(xd, yd)、幅2w、高さ2hの該矩形領域を設定し、
D[f] = |a|w + |b|hとして、−D[f] < f(xd, yd) < D[f] ならば、該図形と該矩形領域が重なり、f(xd, yd) ≦ −D[f]、もしくは、D[f] ≦ f(xd, yd) ならば重ならないと判定し、
該図形と該矩形領域が重なる場合に、該矩形領域を描画する、
ことをコンピュータに実現させるプログラムを格納した記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、描画装置に関する。
【背景技術】
【０００２】
現在の３次元グラフィックスの描画処理は立体オブジェクトを細かな三角形により表している。三角形の描画処理を高速化するひとつの手段として、ある矩形領域上に配置されたピクセルを並列に描画する方法がある。
【０００３】
図１４は、三角形による描画処理を説明する図である。
三角形と重なるハッチされた矩形領域が描画処理の対象となり、その矩形領域内部にある一つ一つのピクセルが同時の処理されることになる。このような描画を行う場合、矩形領域と描画対象の三角形との重なりを判定する必要がある。三角形と矩形領域との重なりの判定は、図形の描画処理に限らず様々な処理で利用される。
【０００４】
特許文献１〜３に三角形と矩形領域の従来の判定方法が示されている。
特許文献１〜３はすべて、「矩形領域の４隅の点」が描画対象となる三角形の内部に入るか否かを判定し、その結果を用いて矩形領域と三角形との重なりを判定している。
１．４隅の点すべてが三角形内部にある場合は、三角形と完全に重なると判定する。
２．４隅の点すべてが三角形のひとつの辺から見て外側にある場合は、三角形と重ならないと判定する。
３．１，２が成立せず、矩形領域が三角形のバウンディング領域（境界領域）の外部にあれば三角形と重ならないと判定する。
４．１，２が成立せず、矩形領域が三角形のバウンディング領域（境界領域）の内部にあれば三角形と重なると判定する。
【０００５】
ある１点が三角形の内部に入るか外部に出るかを判定するためにはエッジ関数と呼ばれる式を用いる。この式は２変数の一次式であり、次の形をしている。
f(x, y) = ax + by + c
このエッジ関数を三角形のそれぞれの辺に対して用意し、次の条件を満たすように係数を調節する。
・ひとつの辺の上で関数の値が0 になる
・関数の勾配が三角形の内部を向く
以上のように関数を定義すると、点が三角形の内部に存在するときのみ３つのエッジ関数の値が全て正の値となる。このようにしてある１点が三角形の内部にあるか外部にあるかを判定することが可能である。
【０００６】
図１５は、エッジ関数による判定方法の様子を示す図である。
図中には3 本の直線があり、それぞれの方程式はf0(x, y) = 0, f1(x, y) = 0, f2(x, y) = 0 という形で表されている。そして、f0(x, y), f1(x, y), f2(x, y)の勾配が3 本の直線で形成される三角形の内部を向いているため、この三角形の内部では3 つの関数の値がすべて正の値となり、外部では少なくとも一つの関数の値が負となる。
【特許文献１】特開２０００−１４９０５５号公報
【特許文献２】特表２００２−５２９８６５号公報
【特許文献３】特開２００８−７７６２７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
一つ一つの矩形領域の大きさが小さい場合、ひとつの三角形の描画に関わる矩形領域の数が多くなり。従来のように矩形領域の4 隅の点と三角形との位置関係を用いた判定方法では、エッジ関数を評価する回数が多くなる。その結果、三角形との重なりを判定するコストが大きくなり、計算負荷が大きくなる。
【０００８】
本発明の課題は、計算負荷を小さくすることのできる描画装置を提供することである。
【課題を解決するための手段】
【０００９】
本発明の第１の描画装置は、矩形領域と図形との重なった部分を描画する描画装置であって、ａ、ｂ、ｃを定数として、該図形を表現する、変数（ｘ、ｙ）についての１以上の直線の式f(x, y) = ax + by + c = 0を設定する図形設定手段と、該図形と重なるか否かの判断対象である、中心座標が(xd, yd)、幅2w、高さ2hの該矩形領域を設定する矩形領域設定手段と、D[f] = |a|w + |b|hとして、−D[f] < f(xd, yd) < D[f] ならば、該図形と該矩形領域が重なり、f(xd, yd) ≦ −D[f]、もしくは、D[f] ≦ f(xd, yd) ならば重ならないと判定する判定手段と、該図形と該矩形領域が重なる場合に、該矩形領域を描画する描画手段とを備える。
【００１０】
本発明の第２の描画装置は、矩形領域と凸ｎ角形との重なった部分を描画する描画装置であって、ａi、ｂi、ｃi（ｉは整数）を定数として、該凸ｎ角形を表現する、変数（ｘ、ｙ）についての１以上のエッジ関数の式fi(x, y) = aix + biy + ci= 0を設定する凸ｎ角形設定手段と、該凸ｎ角形と重なるか否かの判断対象である、中心座標が(xd, yd)、幅2w、高さ2hの該矩形領域を設定する矩形領域設定手段と、該凸ｎ角形に外接する四角形領域であるバウンディング領域を設定するバウンディング領域設定手段と、D[fi] = |ai|w + |bi|hとして、該矩形領域がバウンディング領域の外部に存在すれば重ならないとし、少なくとも一つのfiについて、fi(xd, yd) < −D[fi]となれば重ならないと判定し、矩形領域と凸n 角形の境界領域が重なり、すべてのエッジ関数についてfi(xd, yd) ≧ −D[fi] となれば、重なると判定し、すべてのエッジ関数についてfi(xd, yd) ≧ D[fi] となれば、矩形領域内のすべての点は対象の凸n 角形に含まれると判定する判定手段と、該凸ｎ角形と該矩形領域が重なる、あるいは、該矩形領域が該凸ｎ角形に含まれる場合に、該矩形領域を描画する描画手段とを備える。
【発明の効果】
【００１１】
本発明によれば、計算負荷を小さくした描画装置を提供できる。
【発明を実施するための最良の形態】
【００１２】
以下に、本発明の実施形態に従った矩形領域と三角形との重なりを判定する方法を示す。それに先立って、矩形領域と直線との重なりを判定する方法を示す。
＜矩形領域と直線との重なりの判定＞
判定対象の矩形領域の中心点を(xd, yd) とし、幅と高さを2w, 2h とする。そして、直線の方程式をf(x, y) = 0 とする。ただし、f(x, y) はエッジ関数であり、f(x, y) = ax+by +c であるとする。このとき、エッジ関数に対してD[f] = |a|w + |b|h なる量を定義する。D[f] のa, b はそれぞれエッジ関数f のx とy の係数である。
【００１３】
矩形領域と直線との重なりの判定は、矩形領域の中心点(xd, yd) におけるエッジ関数の値f(xd, yd)を用いて以下のように判定する。
・−D[f] ≦ f(xd, yd) ≦ D[f] の場合、矩形領域と直線は重なる。
・f(xd, yd) ≦ −D[f] またはD[f] ≦ f(xd, yd) の場合、矩形領域と直線は重ならない。
【００１４】
以下に証明を記す。
初めに、(x, y) が(xd, yd) から(xd+Δx, yd+Δy) に変化したときのエッジ関数の変化を求める。
f(xd + Δx, yd + Δy) = a(xd + Δx) + b(yd+ Δy) + c
= axd + byd + c + aΔx + bΔy
= f(xd, yd) + aΔx + bΔy
これより、エッジ関数の変化の絶対値は以下の通りとなる。
|f(xd + Δx, yd + Δy) − f(xd, yd)| = |aΔx + bΔy|
≦ |aΔx| + |bΔy|
= |a||Δx| + |b||Δy|
(xd + Δx, yd + Δy) が矩形領域内にあるならば、
|Δx| ≦ w
|Δy| ≦ h
であることから、エッジ関数の変化の絶対値は以下のように押さえられる。
|f(xd + Δx, yd + Δy) − f(xd, yd)| ≦ |a||Δx| + |b||Δy|≦ |a|w + |b|h= D[f]
よって、
−D[f] ≦ f(xd + Δx, yd + Δy) − f(xd, yd ) ≦D[f]
この式より、次のことが言える。
・f(xd, yd) < −D[f] ならば、矩形領域内のすべての点(x, y) でf(x, y) < 0 である。・f(xd, yd) > D[f] ならば、矩形領域内のすべての点(x, y) でf(x, y) > 0 である。
【００１５】
さらに、Δx = w もしくは−w、Δy = h もしくは−h とすることにより、aΔx + bΔy
= |a|w +|b|h = D[f] とすることができる。したがって、次のことも言える。
・−D[f] ≦ f(xd, yd) ≦ D[f] ならば、矩形領域内のある点(x, y) でf(x, y) = 0 となる。すなわち、矩形領域内のある点で、エッジ関数と交差する。
以上の議論で矩形領域と直線（エッジ関数）との重なりの条件が正しいことが示された。
【００１６】
＜矩形領域と三角形との重なりの判定＞
「判定方法」
矩形領域と直線の重なりの判定方法を示したので、次に矩形領域と三角形との重なりの判定を示す。
【００１７】
三角形を構成するエッジ関数を次のように定義する。
f0(x, y) = a0x + b0y + c0
f1(x, y) = a1x + b1y + c1
f2(x, y) = a2x + b2y + c2
また、それぞれのエッジ関数についてD[f0],D[f1],D[f2] を前述と同様に定義する。
【００１８】
以上の式を用いて矩形領域と三角形との重なりの判定を次のように行う。
１．矩形領域が三角形の境界領域（バウンディング領域）外部に存在すれば三角形と重ならないと判定する。
２．３つのエッジ関数のうち、fi(xd, yd) < −D[fi] となるものがあれば矩形領域は三角形と重ならないと判定する。
３．矩形領域と三角形の境界領域（バウンディング領域：三角形に外接する、辺が座標軸に平行な矩形領域）が重なり、３つのエッジ関数すべてが、fi(xd, yd) ≧ −D[fi] となれば、矩形領域は三角形と重なると判定する。
４．３つのエッジ関数すべてが、fi(xd, yd) ≧ D[fi] を満たせば矩形領域は三角形の内部に含まれる、つまり、矩形領域内のすべての点が三角形の内部に含まれる、と判定する。
【００１９】
「判定方法の例」
図１を使って、本発明の実施形態に従った、矩形領域が三角形と重なるか否かの判定の例を示す。
【００２０】
この例では、ひとつの三角形と3 つの領域がある。三角形のエッジ関数は以下の通りとなっている。
f0(x, y) = 2x − y
f1(x, y) = − x + 2y
f2(x, y) = − x − y + 6
【００２１】
また、それぞれの領域のパラメータは表1の 通りとなっている。
【表１】
2010072917.tif 000003
【００２２】
領域1 については2w = 2, 2h = 2 となり、f0(x, y) が−D[f0]以下の値となるため、矩形領域は三角形と重ならないと判定する。
f0(−1/2,5/2) = −7/2 < −(|a0|w + |b0|h) = −3
【００２３】
領域2 も2w = 2, 2h = 2 である。さらに、以下に示すようにエッジ関数がすべて−D[f0],−D[f1],−D[f2]より大きくなり、なおかつ、三角形の境界領域と重なるため、矩形領域は三角形と重なると判定する。
f0(4, 1) = 7 > −(|a0|w + |b0|h) = −3
f1(4, 1) = −2 > −(|a1|w + |b1|h) = −3
f2(4, 1) = 1 > −(|a2|w + |b2|h) = −2
【００２４】
領域3 は2w = 10, 2h = 2 となる。エッジ関数の値はすべてすべて−D[f0],−D[f1],−D[f2] より大きいが、三角形の境界領域と重ならないため、矩形領域は三角形と重ならないと判断する。
f0(5,11/2) =9/2 > −(|a0|w + |b0|h) = −11
f1(5,11/2) = 6 > −(|a1|w + |b1|h) = −7
f2(5,11/2) = −9/2 > −(|a2|w + |b2|h) = −6
【００２５】
「判定方法の証明」
次に、上述の判定方法が正しいということの証明を示す。
1 の場合は、矩形領域が三角形の外部にあるので、重ならないのは自明である。2 の場合、＜矩形領域と直線との重なりの判定＞での議論から、矩形領域内のすべての点(x, y) で、あるエッジ関数がfi(x, y) < 0 となる。これは、矩形領域の全体が三角形の外にあることを意味する。
同様に4 の場合も、矩形領域内のすべての点(x, y) で、すべてのエッジ関数がfi(x, y) ≧ 0 となる。これは、矩形領域の全体が三角形の内部にあることを意味する。
【００２６】
3 の証明は若干の手順を必要とする。
まず、「矩形領域と三角形の境界領域が重なる」という命題をA、「３つのエッジ関数すべてが、fi(xd, yd) ≧ −D[fi]」という命題をB、「矩形領域は三角形が重なる」という命題をC とする。最終的に示したい命題は以下のものである。
A ∧ B → C
【００２７】
この命題を直接証明することは難しいため、命題の対偶をとり、論理式の演算により若干の変形を加える。
¬C → ¬A ∨ ¬B
≡ C ∨ ¬A ∨ ¬B
≡ ¬(¬C ∧ A) ∨ ¬B
≡ (¬C ∧ A) → ¬B
【００２８】
つまり、「矩形領域が三角形と重ならず、境界領域と重なっているならば、あるエッジ関数が存在し、fi(xd, yd) < −D[fi]、すなわち、あるエッジ関数が存在し、領域内のすべての点(x, y) で、fi(x, y) < 0 」という命題が得られる。この命題を証明することにより、3 の証明とすることができる。
【００２９】
まず、矩形領域が三角形と重ならず、境界領域と重なっているならば、矩形領域の4 隅の点のうち、少なくとも一つが境界領域内に含まれる。仮に、この点を(xd − w, yd − h) = (XL, YB) であるとする。
【００３０】
点(XL, YB) が境界領域内に含まれることにより、直線y = YB およびx = XL は三角形と重なる。直線y = YB が三角形と重なる点の一つを(X, YB) とし、直線x = XL が三角形と重なる点の一つを(XL, Y ) と表すことにする。
【００３１】
ここで、直線y = YB に着目する。この直線と三角形が交わる点は、矩形領域との位置関係からX < XL となっている。そして、矩形領域は三角形に含まれていないという仮定からX < x < XLのどこかの点X′で、fi(X′, YB) = 0 となるエッジ関数が存在しなければならない。
この状態を図２に示す。
【００３２】
今までの議論からエッジ関数fi(x, y) に関する性質が明らかとなる。
１．fi(x, y) のx の係数ai は負の値である。
２．直線fi(x, y) = 0 はy 軸に平行ではない。
１であるが、X < X′ となる点でfi(X, YB) > fi(X′, YB) = 0 となることから示せる。また、
２であるが、もし、y 軸に平行であるとすると、1 の性質から、直線x = XL 上の点はすべてfi(XL, y) < 0 となる。これは、直線x = XL 上に三角形と重なる点があるという仮定に矛盾する。
【００３３】
したがって、直線fi(x, y) = 0 はy 軸に平行でなく、y の係数biも0 ではない。
今までの性質をまとめると次の通りとなる。
fi(X, YB) = aiX + biYB + ci > 0 (1)
fi(XL, Y ) = aiXL+ biY + ci > 0 (2)
fi(X′, YB) = aiX′ + biYB + ci = 0 (3)
fi(XL, Y′) = aiXL + biY′ + ci = 0 (4)
X < X′ < XL (5)
Y < YB (6)
ai < 0 (7)
まず、(3), (4) より、
X′ = − 1/ai・(biYB + ci)
XL = − 1/ai・(biY′ + ci)
これと(5), (7) から以下の式を得る。
biYB < biY′ (8)
つぎに、(2), (4) より、以下の式を得る。
biY > biY′ (9)
得られた(8), (9) より、以下の式を得る。
biYB < biY (10)
ここで、(6) より、
bi < 0
でなければならないことがわかり、
Y < Y′< YB
を得る。
【００３４】
以上の結果より、fi(x, y) は矩形領域全体で負の値をとることがわかる。矩形領域の他の点が三角形の境界領域と重なるときでも同様の議論を行うことにより矩形領域全体で負の値をとるエッジ関数の存在を示すことができる。したがって、命題「矩形領域が三角形と重ならず、境界領域と重なっているならば、あるエッジ関数が存在し、fi(xd, yd) <
−D[fi]、すなわち、あるエッジ関数が存在し、領域内のすべての点(x, y) で、fi(x, y) < 0 」が真であることを証明することができた。
ゆえに、矩形領域と三角形との重なりの条件3 も正しいことを示すことができた。
【００３５】
＜座標軸に対して傾いた矩形領域と直線との判定＞
これまでに示した、直線や三角形と矩形領域の重なりの判定では、矩形領域は座標軸に平行な辺をもっていた。ところが、座標軸に対し傾いた辺をもつ矩形領域と直線との重なりの判定を必要とする場合がある。
【００３６】
図３に、x−y 座標に対して傾いた矩形領域と直線を示す。
この矩形領域と直線との重なりを判定するために、座標系x−y を、原点を維持したまま座標軸が矩形領域と平行になるように回転させる。回転して得られた座標系をx′ − y′ とする。そして、変換した座標系の上で矩形領域と直線との重なりの判定を行う。
座標系の変換により影響を受けるものは次のものである。
・矩形領域の中心座標
・エッジ関数の係数
また、以下の量は不変である。
・矩形の幅と高さ
・同じ点に対するエッジ関数の値
特に、同じ点に対するエッジ関数の値が座標変換に対して不変であることから、重なりの判定の為にはD[f] = |a|w + |b|h という量の変化が分かればよい。座標系の変換を表す行列をM とする。変換前の矩形領域の中心座標を(xd, yd)、変換前のエッジ関数をf(x,
y) = ax + by + c とし、変換後の矩形領域の中心座標を(x′d, y′d)、エッジ関数をf′(x′, y′) = a′x′ + b′y′ + c′ とする。それぞれの変換は以下のようにあらわされる。
【数１】
2010072917.tif 000004
ここで求めたa′, b′ の値を用いてD[f] の座標変換後の値を求めれば直線と矩形領域との重なりの判定が可能である。
【００３７】
図４は、本実施形態の描画装置のブロック構成図である。
三角形の頂点データは、バウンディング領域作成部１０とエッジ作成部１３に入力される。バウンディング領域作成部１０では、頂点データで示される三角形に外接する、画面
の座標軸と平行な辺を持つ矩形領域を作成する。エッジ作成部１３では、頂点データから、三角形のエッジ関数を作成する。バウンディング領域作成部１０で作成されたバウンディング領域（矩形領域）の情報は、矩形領域選択部１１に渡される。矩形領域選択部１１では、バウンディング領域に含まれる、描画単位の矩形を特定し、その領域のパラメータを算出する。描画単位の矩形の中心座標は、矩形領域評価部１２に入力される。矩形領域評価部１２には、エッジ作成部１３からエッジのパラメータが入力され、描画単位の矩形領域が三角形と重なるか否かの判定が行われる。描画処理部１４には、矩形領域選択部１１から領域のパラメータが、矩形領域評価部１２からは、三角形と描画単位の矩形領域が重なるか否かの評価結果が、エッジ作成部１３からはエッジのパラメータが入力され、描画単位の矩形領域を描画する処理が行われる。
【００３８】
図５に三角形描画処理全体のフローを示す。
初めに三角形のデータを受け取り、その三角形のバウンディング領域（境界領域）をえる。つぎに、境界領域内の一つの矩形領域を選択して、それが描画対象となる三角形と重なるならばその矩形領域に対して処理を行う。矩形領域が三角形と重ならない場合は次の矩形領域を選択する。すべての矩形領域を処理し終えたら描画処理の終了とする。
【００３９】
図５に沿って説明すると、ステップS１０において、三角形のバウンディング領域を得る。ステップS１１において、バウンディング領域内のすべての矩形領域を処理したか否かを判断する。ステップS１１の判断がＹｅｓの場合には、描画処理を終了する。ステップS１１の判断がＮｏの場合には、ステップＳ１２において、矩形領域を選択し、ステップＳ１３において、三角形との重なりの判定を行い、ステップＳ１４において、三角形と重なるか否かの判断を行う。ステップＳ１４の判断がＮｏの場合には、ステップＳ１１に戻り、ステップＳ１４の判断がＹｅｓの場合には、ステップＳ１５において、矩形領域に対して描画を行い、ステップＳ１１に戻る。
【００４０】
矩形領域と三角形との重なりの判定は図６に示したフローに沿って行う。
初めに三角形のエッジ関数の係数を得る。そして、それぞれのエッジ関数についてfi(C) ≧ −D[fi] = −|ai|w −|bi|hとなるかを確認する。ここで、C は矩形領域の中心の点とする。すべてのエッジ関数について不等式が成り立てば、矩形領域は三角形と重なると判定する。そうでない場合、つまり、少なくとも一つのエッジ関数について不等式が成り立たなければ、矩形領域と三角形は重ならないと判定する。
【００４１】
図６に沿って説明すると、ステップ２０において、エッジ関数ｆ０、ｆ１、ｆ２をロードする。ステップＳ２１において、f0(C)>=−|a0|w−|bo|hか否かを判断する。ステップＳ２１の判断がＮｏの場合には、処理対象の矩形領域は三角形の外であると判断する。ステップS２１の判断がＹｅｓの場合には、ステップＳ２２に進む。ステップＳ２２において、f１(C)>=−|a１|w−|b１|hか否かを判断する。ステップＳ２２の判断がＮｏの場合には、処理対象の矩形領域は三角形の外であると判断する。ステップS２２の判断がＹｅｓの場合には、ステップＳ２３に進む。ステップＳ２３において、f２(C)>=−|a２|w−|b２|hか否かを判断する。ステップＳ２３の判断がＮｏの場合には、処理対象の矩形領域は三角形の外であると判断する。ステップS２３の判断がＹｅｓの場合には、領域は三角形と重なると判断する。
【００４２】
「線分の描画」
本節では、矩形領域と直線との重なりの判定を用いたOpenGL での線分の描画を実施した例を示す。OpenGL での描画において、あるピクセルが線分により描画されるか否かを判定するためにはDiamond−Exit ルールと呼ばれる判定を行う。この判定では描画対象の線分がピクセルのダイヤモンド領域を交差するか否かを判定する。ただし、ダイヤモンド領域内に線分の終点が含まれている場合は、その線分は描画しない。
【００４３】
ここで、ピクセルの中心の座標を(xd, yd) としたとき、ダイヤモンド領域RD は以下のように定義する。
RD = {(x, y) | |x − xd| + |y − yd| <1/2}
ピクセルとダイヤモンド領域の関係を図７に示す。
【００４４】
ピクセルのダイヤモンド領域は正方形であるが、辺が座標軸に対して45 °傾いている。そのため、＜座標軸に対して傾いた矩形領域と直線との判定＞で示した方法で判定を行う。
【００４５】
傾いた矩形領域と直線との重なりの判定を行うためには、座標軸を矩形領域の辺に対して平行になるように変換し、その座標軸におけるエッジ関数の係数a′, b′ を求めて、D[f] = |a′|w +|b′|h との比較を行う。ここで座標系の変換の行列M は、
【数２】
2010072917.tif 000005
また、エッジ関数の係数に対する変換行列M−1 は次の通りである。
【数３】
2010072917.tif 000006
【００４６】
したがって、係数の変換は次の通りとなる。
a′ =√2/2・(a − b)
b′ =√2/2・(a + b)
矩形の幅と高さがそれぞれ
√2/4 であることからD[f] の変換であるD[f′] は以下のように表すことができる。
D[f′] = |a′|w + |b′|h
=√2/2・|a − b|√2/4+√2/2・|a + b|√2/4
=1/4・(|a −b| + |a + b|)
これより、中心座標が(xd, yd)であるピクセルと直線f(x, y) = 0とがダイヤモンド領域で重なるか否かの判定を次のように表すことができる。
・f(xd, yd) ≦ −D[f'] もしくは f(xd, yd) ≧ D[f'] の場合、直線はダイヤモンド領域と交差しない
・−D[f'] < f(xd, yd) < D[f'] の場合、直線はダイヤモンド領域と交差する
この判定と端点に対する判定処理を加えれば線分の描画を行うことができる。
【００４７】
図８に本発明の実施形態に従った描画装置全体のブロック図を示す。
描画装置は、入力から描画コマンドを得て、そのコマンドの内容に従って三次元プリミティブを描画し、その結果を画像イメージとして出力する。
【００４８】
入力インターフェース２０では、外部から与えられる描画コマンドを描画装置に受け渡す。描画コマンドは動作指定部とデータ部からなり、データ部では下記に示す種類のデータが指定可能である。
・頂点データ
・描画装置の状態
頂点データとは、描画するオブジェクトの個々の頂点の座標と属性をまとめたものである。頂点の属性には、色、テクスチャ座標、法線ベクトルなどを指定することができる。頂点データは次のブロックの頂点処理部２３に渡される。
【００４９】
描画装置の状態とは、描画装置の処理の方法を決定するものである。これには、座標変換に用いる行列の値や、光源の位置、ピクセル変換時のアルファブレンディング（AとBのアルファブレンディングとは、０以上１以下のパラメータをαとして、A・α＋B・（１−α）とすることである）のオン、オフの設定、テクスチャデータなどが含まれる。描画装置の状態はすべて、制御装置２１を介して描画装置の内部メモリ２２に格納される。描画装置の状態とは、描画装置の「設定」と考えてもよい。
【００５０】
頂点処理部２３では、入力インターフェース２０で与えられたそれぞれの頂点に対し、予め描画装置に与えられている状態に基づいて座標変換を行い、出力先であるディスプレイ上での頂点の位置と深度を算出する。また、特別な用途の為に属性値を用いた計算を行うことがある。たとえば、照光処理では、描画装置の状態として設定された光源の位置と、頂点の属性として設定された法線ベクトルから、その頂点での光の反射率を計算する。この反射率を用いて光の陰影を表現することが可能となる。
【００５１】
ラスタライズ処理２４では、前ブロックの頂点処理で得られた頂点の情報をもとに、描画すべきプリミティブが覆う画像メモリの画素、すなわち描画すべき画素の位置と、その描画すべき画素を塗りつぶすパラメータを求める。ラスタライズ処理は描画するプリミティブの種類により処理内容が異なる。プリミティブが三角形であれば三角形の描画処理を行い、凸n角形であれば、凸n角形の描画処理を行う。画素を塗りつぶすパラメータとは、一般には色であるが、その他にもテクスチャ座標を与えることもある。それぞれの描画すべき画素に塗りつぶされる色は次のブロックのピクセル処理で決定される。
【００５２】
ピクセル処理部２５では、前のブロックの処理で、それぞれの描画すべき画素に与えられるパラメータをもとに、実際に描画する色を決定する。パラメータとして色が与えられている場合は、その色を出力するが、テクスチャ座標とテクスチャデータが与えられている場合は、対応するテクセル（テクスチャの値）を読みだして出力する。また、アルファブレンディングが
有効であれば、出力先の色と出力する色との混合処理も行う。
ピクセル処理された画像は、画像メモリ２６に格納される。
【００５３】
＜凸n角形の描画＞
凸n角形は三角形と同様に、すべてのエッジ関数の値が正になる領域として指定することができ、凸n角形の内部の点はすべてのエッジ関数の値が正になる点である、とすることができる。三角形との違いは、評価すべきエッジ関数の数が3からnに増えたことである。
【００５４】
したがって、矩形領域と凸n角形との重なりの判定方法は、以下のステップを踏む。
（１）凸n角形のバウンディング領域を算出し、その内部にある矩形領域を得る
（２）（１）で得られた矩形領域に対し、凸n角形を定義するn個のエッジ関数fi (i = 0,
1, ..., n−1) に対し、fi[D] >= − w|ai| − h|bi| ならば、矩形領域は凸n角形と重なると判定する。そうでないならば、矩形領域と重ならないと判定する。
【００５５】
図９は、凸ｎ角形を描画する本実施形態の描画装置のブロック構成図である。
凸ｎ角形の頂点データは、バウンディング領域作成部１０ａとエッジ作成部１３ａに入力される。バウンディング領域作成部１０ａでは、頂点データで示される凸ｎ角形に外接する、画面の座標軸と平行な辺を持つ矩形領域を作成する。エッジ作成部１３ａでは、頂
点データから、凸ｎ角形のエッジ関数を作成する。バウンディング領域作成部１０ａで作成されたバウンディング領域（矩形領域）の情報は、矩形領域選択部１１ａに渡される。矩形領域選択部１１ａでは、バウンディング領域に含まれる、描画単位の矩形を特定し、その領域のパラメータを算出する。描画単位の矩形の中心座標は、矩形領域評価部１２ａに入力される。矩形領域評価部１２ａには、エッジ作成部１３ａからエッジのパラメータが入力され、描画単位の矩形領域が凸ｎ角形と重なるか否かの判定が行われる。描画処理部１４ａには、矩形領域選択部１１ａから領域のパラメータが、矩形領域評価部１２ａからは、凸ｎ角形と描画単位の矩形領域が重なるか否かの評価結果が、エッジ作成部１３ａからはエッジのパラメータが入力され、描画単位の矩形領域を描画する処理が行われる。
【００５６】
図１０に凸ｎ角形の描画処理全体のフローを示す。
ステップS３０において、凸ｎ角形のバウンディング領域を得る。ステップS３１において、バウンディング領域内のすべての矩形領域を処理したか否かを判断する。ステップS３１の判断がＹｅｓの場合には、描画処理を終了する。ステップS３１の判断がＮｏの場合には、ステップＳ３２において、矩形領域を選択し、ステップＳ３３において、凸ｎ角形との重なりの判定を行い、ステップＳ３４において、凸ｎ角形と重なるか否かの判断を行う。ステップＳ３４の判断がＮｏの場合には、ステップＳ３１に戻り、ステップＳ３４の判断がＹｅｓの場合には、ステップＳ３５において、矩形領域に対して描画を行い、ステップＳ３１に戻る。
【００５７】
矩形領域と凸ｎ角形との重なりの判定は図１１に示したフローに沿って行う。
ステップＳ４１において、あるエッジについてエッジ関数fiをロードし、ステップS４２において、処理中のエッジについて、fi(C)>=−|ai|w−|bi|hが成り立つか否かを判断する。ステップS４２の判断がＮｏの場合には、矩形領域は凸ｎ角形の外であると判断する。ステップS４２の判断がＹｅｓの場合には、ステップＳ４０において、すべてのエッジについて判定したか否かが判断され、Ｎｏの場合には、ステップＳ４１に進み、Ｙｅｓの場合には、矩形領域は、凸ｎ角形と重なると判断する。
【００５８】
＜線分の描画＞
線分の描画も、三角形や凸n角形の描画と同様に、初めにバウンディング領域を得てから、その内部に含まれる描画可能なピクセルについて線分とピクセルとの重なりの判定を行う。
【００５９】
線分とピクセルのダイヤモンド領域との判定方法が、三角形や凸n角形とは異なる定数D[f']を用いるため、その計算も行う必要がある。
本実施形態のピクセルと線分との交わりの判定方法を用いて、線分を描画する場合、次のような手順を踏めば良い。
（１）線分のバウンディング領域を得る。線分の端点が(x1, y1), (x2, y2)であれば、バウンディング領域は、(min(x1, x2), min(y1, y2), max(x1, x2), max(y1, y2))となる。（２）バウンディング領域内から描画可能なピクセルを選択し、ピクセルと線分との重なりの判定を行う。ピクセルと線分が重なるのであれば描画処理を行う。
（３）（２）の処理を描画可能なピクセルが存在しなくなるまで続ける。
【００６０】
図１２は、線分を描画する本実施形態の描画装置のブロック構成図である。
線分の頂点データは、バウンディング領域作成部１０ｂとエッジ作成部１３ｂに入力される。バウンディング領域作成部１０ｂでは、頂点データで示される線分に外接する、画面の座標軸と平行な辺を持つ矩形領域を作成する。エッジ作成部１３ｂでは、頂点データから、線分のエッジ関数と前述のD[f']を作成する。バウンディング領域作成部１０ｂで作成されたバウンディング領域（矩形領域）の情報は、矩形領域選択部１１ｂに渡される。矩形領域選択部１１ｂでは、バウンディング領域に含まれる、描画単位の矩形を特定し、その領域のパラメータを算出する。描画単位の矩形の中心座標は、矩形領域評価部１２ｂに入力される。矩形領域評価部１２ｂには、エッジ作成部１３ｂからエッジのパラメータが入力され、描画単位の矩形領域が線分と重なるか否かの判定が行われる。描画処理部１４ｂには、矩形領域選択部１１ｂから領域のパラメータが、矩形領域評価部１２ｂからは、線分と描画単位の矩形領域が重なるか否かの評価結果が、エッジ作成部１３ｂからはエッジのパラメータが入力され、描画単位の矩形領域を描画する処理が行われる。
【００６１】
図１３に線分の描画処理全体のフローを示す。
ステップS５０において、線分のバウンディング領域を得る。ステップS５１において、バウンディング領域内の描画可能なすべてのピクセルを処理したか否かを判断する。ステップS５１の判断がＹｅｓの場合には、描画処理を終了する。ステップS５１の判断がＮｏの場合には、ステップＳ５２において、ピクセルを選択し、ステップＳ５３において、線分との重なりの判定を行い、ステップＳ５４において、線分と重なるか否かの判断を行う。ステップＳ５４の判断がＮｏの場合には、ステップＳ５１に戻り、ステップＳ５４の判断がＹｅｓの場合には、ステップＳ５５において、ピクセルの描画を行い、ステップＳ５１に戻る。
【００６２】
以上の実施形態によれば、矩形領域の中心の点のエッジ関数のみで、矩形領域と直線や三角形との判定が可能となるため、判定に要する時間やコストが従来行われてきた手法に比較しての4 分の1 となることがわかった。
【００６３】
以上の実施形態のほかに、以下の付記を開示する。
（付記１）
矩形領域と図形との重なった部分を描画する描画装置であって、
ａ、ｂ、ｃを定数として、該図形を表現する、変数（ｘ、ｙ）についての１以上の直線の式f(x, y) = ax + by + c = 0を設定する図形設定手段と、
該図形と重なるか否かの判断対象である、中心座標が(xd, yd)、幅2w、高さ2hの該矩形領域を設定する矩形領域設定手段と、
D[f] = |a|w + |b|hとして、−D[f] < f(xd, yd) < D[f] ならば、該図形と該矩形領域が重なり、f(xd, yd) ≦ −D[f]、もしくは、D[f] ≦ f(xd, yd) ならば重ならないと判定する判定手段と、
該図形と該矩形領域が重なる場合に、該矩形領域を描画する描画手段と、
を備えることを特徴とする描画装置。
（付記２）
前記矩形領域の辺が座標軸と平行でない場合に、座標軸を、該矩形領域の辺が座標軸に平行となるように回転変換する回転変換手段を更に備えることを特徴とする付記１に記載の描画装置。
（付記３）
前記図形は、直線であることを特徴とする付記１に記載の描画装置。
（付記４）
前記図形は、三角形であることを特徴とする付記１に記載の描画装置。
（付記５）
矩形領域と凸ｎ角形との重なった部分を描画する描画装置であって、
ａi、ｂi、ｃi（ｉは整数）を定数として、該凸ｎ角形を表現する、変数（ｘ、ｙ）についての１以上のエッジ関数の式fi(x, y) = aix + biy + ci= 0を設定する凸ｎ角形設定手段と、
該凸ｎ角形と重なるか否かの判断対象である、中心座標が(xd, yd)、幅2w、高さ2hの該矩形領域を設定する矩形領域設定手段と、
該凸ｎ角形に外接する四角形領域であるバウンディング領域を設定するバウンディング領域設定手段と、
D[fi] = |ai|w + |bi|hとして、該矩形領域がバウンディング領域の外部に存在すれば重ならないとし、少なくとも一つのfiについて、fi(xd, yd) < −D[fi]となれば重ならないと判定し、矩形領域と凸n 角形の境界領域が重なり、すべてのエッジ関数についてfi(xd, yd) ≧ −D[fi] となれば、重なると判定し、すべてのエッジ関数についてfi(xd, yd)
≧ D[fi] となれば、矩形領域内のすべての点は対象の凸n 角形に含まれると判定する判定手段と、
該凸ｎ角形と該矩形領域が重なる、あるいは、該矩形領域が該凸ｎ角形に含まれる場合に、該矩形領域を描画する描画手段と、
を備えることを特徴とする描画装置。
（付記６）
矩形領域と図形との重なった部分を描画する描画方法であって、
ａ、ｂ、ｃを定数として、該図形を表現する、変数（ｘ、ｙ）についての１以上の直線の式f(x, y) = ax + by + c = 0を設定し、
該図形と重なるか否かの判断対象である、中心座標が(xd, yd)、幅2w、高さ2hの該矩形領域を設定し、
D[f] = |a|w + |b|hとして、−D[f] < f(xd, yd) < D[f] ならば、該図形と該矩形領域が重なり、f(xd, yd) ≦ −D[f]、もしくは、D[f] ≦ f(xd, yd) ならば重ならないと判定し、
該図形と該矩形領域が重なる場合に、該矩形領域を描画する、
ことを特徴とする描画方法。
（付記７）
矩形領域と凸ｎ角形との重なった部分を描画する描画方法であって、
ａi、ｂi、ｃi（ｉは整数）を定数として、該凸ｎ角形を表現する、変数（ｘ、ｙ）についての１以上のエッジ関数の式fi(x, y) = aix + biy + ci= 0を設定し、
該凸ｎ角形と重なるか否かの判断対象である、中心座標が(xd, yd)、幅2w、高さ2hの該矩形領域を設定し、
該凸ｎ角形に外接する四角形領域であるバウンディング領域を設定し、
D[fi] = |ai|w + |bi|hとして、該矩形領域がバウンディング領域の外部に存在すれば重ならないとし、少なくとも一つのfiについて、fi(xd, yd) < −D[fi]となれば重ならないと判定し、矩形領域と凸n 角形の境界領域が重なり、すべてのエッジ関数についてfi(xd, yd) ≧ −D[fi] となれば、重なると判定し、すべてのエッジ関数についてfi(xd, yd)
≧ D[fi] となれば、矩形領域内のすべての点は対象の凸n 角形に含まれると判定し、
該凸ｎ角形と該矩形領域が重なる、あるいは、該矩形領域が該凸ｎ角形に含まれる場合に、該矩形領域を描画する、
ことを特徴とする描画方法。
（付記８）
矩形領域と図形との重なった部分を描画する描画方法をコンピュータに実現させるプログラムを格納した記録媒体であって、
ａ、ｂ、ｃを定数として、該図形を表現する、変数（ｘ、ｙ）についての１以上の直線の式f(x, y) = ax + by + c = 0を設定し、
該図形と重なるか否かの判断対象である、中心座標が(xd, yd)、幅2w、高さ2hの該矩形領域を設定し、
D[f] = |a|w + |b|hとして、−D[f] < f(xd, yd) < D[f] ならば、該図形と該矩形領域が重なり、f(xd, yd) ≦ −D[f]、もしくは、D[f] ≦ f(xd, yd) ならば重ならないと判定し、
該図形と該矩形領域が重なる場合に、該矩形領域を描画する、
ことをコンピュータに実現させるプログラムを格納した記録媒体。
（付記９）
矩形領域と凸ｎ角形との重なった部分を描画する描画方法をコンピュータに実現させるプログラムを格納した記録媒体であって、
ａi、ｂi、ｃi（ｉは整数）を定数として、該凸ｎ角形を表現する、変数（ｘ、ｙ）についての１以上のエッジ関数の式fi(x, y) = aix + biy + ci= 0を設定し、
該凸ｎ角形と重なるか否かの判断対象である、中心座標が(xd, yd)、幅2w、高さ2hの該矩形領域を設定し、
該凸ｎ角形に外接する四角形領域であるバウンディング領域を設定し、
D[fi] = |ai|w + |bi|hとして、該矩形領域がバウンディング領域の外部に存在すれば重ならないとし、少なくとも一つのfiについて、fi(xd, yd) < −D[fi]となれば重ならないと判定し、矩形領域と凸n 角形の境界領域が重なり、すべてのエッジ関数についてfi(xd, yd) ≧ −D[fi] となれば、重なると判定し、すべてのエッジ関数についてfi(xd, yd)
≧ D[fi] となれば、矩形領域内のすべての点は対象の凸n 角形に含まれると判定し、
該凸ｎ角形と該矩形領域が重なる、あるいは、該矩形領域が該凸ｎ角形に含まれる場合に、該矩形領域を描画する、
ことをコンピュータに実現させるプログラムを格納した記録媒体。
【図面の簡単な説明】
【００６４】
【図１】本発明の実施形態に従った、矩形領域が三角形と重なるか否かの判定の例を示す図である。
【図２】判定方法の証明を説明する図である。
【図３】x−y 座標に対して傾いた矩形領域と直線を示す図である。
【図４】本実施形態の描画装置のブロック構成図である。
【図５】三角形描画処理全体のフローを示す図である。
【図６】矩形領域と三角形との重なりの判定のフローである。
【図７】ピクセルとダイヤモンド領域の関係を示す図である。
【図８】本発明の実施形態に従った描画装置全体のブロック図を示す図である。
【図９】凸ｎ角形を描画する本実施形態の描画装置のブロック構成図である。
【図１０】凸ｎ角形の描画処理全体のフローを示す図である。
【図１１】矩形領域と凸ｎ角形との重なりの判定のフローである。
【図１２】線分を描画する本実施形態の描画装置のブロック構成図である。
【図１３】線分の描画処理全体のフローを示す図である。
【図１４】三角形による描画処理を説明する図である。
【図１５】エッジ関数による判定方法の様子を示す図である。
【符号の説明】
【００６５】
１０、１０ａ、１０ｂ      バウンディング領域作成部
１１、１１ａ、１１ｂ      矩形領域選択部
１２、１２ａ、１２ｂ      矩形領域評価部
１３、１３ａ、１３ｂ      エッジ作成部
１４、１４ａ、１４ｂ      描画処理部
【図１】
2010072917.tif 000007
【図２】
2010072917.tif 000008
【図３】
2010072917.tif 000009
【図４】
2010072917.tif 000010
【図５】
2010072917.tif 000011
【図６】
2010072917.tif 000012
【図７】
2010072917.tif 000013
【図８】
2010072917.tif 000014
【図９】
2010072917.tif 000015
【図１０】
2010072917.tif 000016
【図１１】
2010072917.tif 000017
【図１２】
2010072917.tif 000018
【図１３】
2010072917.tif 000019
【図１５】
2010072917.tif 000020
【図１４】
2010072917.tif 000021