ゲヌムのスコヌプず芖線の効果的な蚈算

画像



戊略的なゲヌムでは、通垞、プレむダヌが戊略を熟考しお次の動きを行えるように、NPCの範囲を知る必芁がありたす。 マップ䞊の倚数のNPCでゲヌムの速床を浪費しない合理的なモデルの数孊ず実装を怜蚎したす。 完成したむンタラクティブデモモデルをご芧になりたい堎合は、 こちらからブラりザで盎接プレむしおください デモのスクリヌンショットは次のずおりです。



画像



芳察者の芖界のパラメヌタ芖界の方向、芖界の距離、芖野の角床があるため、芳察者が芋える領域を芋぀ける必芁がありたす。 芖野FoVを定矩したす。 障害物がない堎合は、2぀の面半埄ずそれらを結ぶ円匧で構成される円の扇圢になりたす図1を参照。 さらに、䞖界に特定のポむントがあるため、それが芳枬者に芋えるかどうか、぀たり、 特定のポむントの芋通しLOS芁求を凊理する必芁がありたす。 これらの操䜜は䞡方ずも、リアルタむムレンダリングで䜿甚するのに十分効率的に実行できたす。



画像

図 1



芳枬者の䜍眮は赀い点で衚され、矢印は芖界の方向を瀺し、 rは芖皋の距離、 Ξは芖野の半分の角床です。



1入力





泚ここおよび以䞋では、小文字はスカラヌ倀を瀺し、倧文字はベクトルです。



1.1ポリゎンず゚ッゞ



2Dで䞖界を蚘述する堎合、建物は自然にポリゎンに分割されるため、アルゎリズムぞの入力になりたす。 ただし、技術的には、芖野は壁によっお制限されおいたす。 ポリゎンの゚ッゞ。 さらに、ポリゎンの゚ッゞを操䜜するず、亀差点をチェックするずきに䞻にゞオメトリプリミティブを扱うため、詳现ず制埡が向䞊したす。 したがっお、ほずんどの堎合、アルゎリズムぱッゞで盎接機胜し、高レベルの抜象化ポリゎンには適甚されたせん。



2基本アルゎリズム



頭に浮かぶ最初の興味深いアむデアは、ポリゎンの茪郭で可芖性セクタヌをトリミングするこずです。 ただし、可芖性を怜蚎しおいるため、茪郭に沿っおトリミングするこずでこの問題を解決しようずしおもうたくいかず、最終結果は䞍正確になりたす。 トリミングは2぀の領域の亀点のみを切断するため、これは理解できたす。たた、可芖性のために、亀点だけでなく、攟射状の原理に埓っおその背埌のすべおを切断する必芁がありたす。 図 図2は、トリミングの結果巊ず、そのような構成で予想される結果右を瀺しおいたす。



画像

図 2



珟実の䞖界では、光線が自由に目に入るず物䜓が芋えたす。 盎芳的に、可芖性は逆挔算、぀たり 目から䞖界ぞず茝いおいたす。 光源の堎合、光線はすべおの方向に攟出されたす。 実際の実装では、レむは所定の間隔で攟射状に攟射されたす。たずえば、5°ごずに1぀のビヌム、円党䜓で72のレむです。 ビヌムは、゚ッゞでブロックされるたで移動する必芁がありたす。 360°を通る光線の攟射ず2Dの光源で照らされた領域の決定は、解決された問題です[1]。 この方法の粟床は、攟出される光線の間隔に䟝存したす。 間隔を短くするず、ビヌム密床が倧きくなりたす。



画像

図 3



぀たり、光線の攟出は、光線ず線分ずの亀差のチェックです。 m個のセグメントを持぀特定のレむに察しお、 m個のチェックが実行され、それをブロックするレむに最も近い゚ッゞが決定されたす。 したがっお、 m゚ッゞでn光線を攟射する光線远跡アルゎリズムでは、 n×mチェックを実行する必芁がありたす。 ただし、倚くの光源が存圚する巚倧な䞖界では、光線ず線分゚ッゞの亀差をチェックするリ゜ヌス匷床がどれほど小さくおも、このアプロヌチはコストがかかりすぎる可胜性がありたす。



レむブロッキング゚ッゞをブロッキング゚ッゞず呌びたしょう。 図 3それらは赀で匷調衚瀺されおいたす。 ビヌムがブロッキング゚ッゞを暪切るポむントは、ヒットポむントず呌ばれたす。 すべおのヒットポむントを芋぀けた埌、それらを埪環的に接続する必芁がありたす。 すべおのヒットポむントは角床で䞊べられ、光源で照らされる領域を決定するために線で接続されたす。 結果は、䞍正な閉ルヌプになりたす。 この方法で亀差点を接続するず、倚角圢の䞀郚の角たたは郚分が切り取られるため、照明領域が䞍正確たたは粟床が䜎䞋するこずに泚意しおください。 光線の攟出間隔を短くするこずで改善できたす。 間隔が小さいほど、光線が倚くなり、カバレッゞが向䞊したす。 結果は改善されたすが、生産性が䜎䞋したす。



照明領域を決定するこの問題を䜿甚しお、問題を解決するために䜿甚する䞻なアプロヌチであるレむキャスティング法を怜蚎したした。 光線は、障害物ず亀差するたですべおの方向で光源から発せられるこずに泚意しおください。 制限がないため、芖界の角床ず距離が制限されおいる問題よりも問題が簡単になりたす。 この理由に぀いおは、セクション3で説明したす。



2.1最適化



すべおの方向に䞀定の間隔で光線を攟出する代わりに、タスクは通垞、゚ッゞの端が䜍眮する方向にのみ光線を攟出するこずにより最適化されたす。 これにより、必芁な亀差チェックの数が倧幅に削枛されたす。 䞊蚘のnの倀は小さくなるはずです。 この方法のもう1぀の利点は、粟床が高いこずです。定矩されたスコヌプの正確さのために、遞択した間隔に䟝存しなくなりたした。



画像

図 4



これらの゚ッゞの端を呌び出しお、角のポむントずしお光線の攟射角床を䞎えたす。 この名前は冗長で無意味なように芋えるかもしれたせんが、埌で䟿利になりたす。 コヌナヌポむントは、可芖光線が攟射されるポむントです。 図 4぀のコヌナヌポむントは、赀、青、黒でマヌクされおいたす。 これらすべおのポむントで光線が攟出されたす。 ビヌムに最も近いポむントは、赀でマヌクされたヒットポむントに倉換されたす。 光線が届かないポむントは黒でマヌクされたす。 これらの光線はより近い゚ッゞず亀差し、青でマヌクされたヒットポむントを䜜成したす。



2.2角床のないビゞョン



リブの端でのみ光線を攟射するのが適しおいたすが、わずかな欠陥がありたす。 図の泚意 4光線はポリゎンのコヌナヌに攟出され、角床を䜜成する゚ッゞの1぀ず亀差し、移動したせん。 ただし、堎合によっおは、可芖性が角を越えおいる必芁がありたす。 この問題を解決するスマヌトなアプロヌチは、むンタラクティブな蚘事[2]に瀺されおいたす。



アむデアは、プラむマリレむリブの端のレむを2぀の補助的なレむに分割し、時蚈回りず反時蚈回りにむオタ角で偏向させるこずです。 芖界が角の呚りに広がる堎合、これらの補助光線の1぀が角を通過するため、背埌の芖界が決たりたす。 このアプロヌチの欠点は、1぀のビヌムではなく、コヌナヌポむントごずに3぀を攟射する必芁があるこずです。これは、速床に3倍以䞊圱響したす。 凊理する必芁のあるコヌナヌポむントの数を最小限に抑えるず䟿利です。



画像

図 5



補助光線はオレンゞ色で匷調衚瀺されたす。 逞脱の角床オレンゞず黒の光線の間は明確にするために意図的に誇匵されおいたすが、もっず小さく、たずえば0.5床にする必芁がありたす。



簡単な最適化は、角床を圢成する䞡方の゚ッゞが衚瀺されるかどうか、たたは䞀方が他方によっお隠されるかどうかを刀断するこずです。 䞡方が衚瀺されおいる堎合、補助光線は䞍芁です。これは、可芖性がそれ以䞊広がるこずができないためです。 図 4䞉角圢の頂点は可芖角です。可芖性はこれ以䞊広がるこずができないため、ここでは補助光線は必芁ありたせん。 補助光線は、2぀の゚ッゞの䞀方が芳枬者から隠されおいる堎合にのみ必芁です。 䞡方の゚ッゞを非衚瀺にするこずはできたせん。ポリゎンの各コヌナヌを別々に芋るためです-2぀の゚ッゞずそれらが接続するポむント図6、黒い矢印ず青い点を参照。 ゚ッゞの1぀が隠れおいおも、2぀の補助光線の攟出は冗長です。 1぀だけが簡単に角を曲がるので、1぀を避けるこずができたす。 図 5、プラむマリを時蚈回りに回転させるこずによっお䜜成される補助ビヌムは冗長です。



画像

図 6



゚ッゞの䞀方が他方をブロックしおいるかどうかを刀断するには、分割軞定理を䜿甚できたす。 䞡方の゚ッゞのベクトルを䞀次光線に垂盎なベクトルに投圱するず、゚ッゞの䞀方が他方をブロックしおいる堎合、異なる兆候が埗られたす。 たた、最初のrib骚の投圱の笊号に応じお、2぀の補助光線のどちらが必芁かを調べるこずができたす。 図 図6は、䞊郚に3぀の可胜性のある状況を、䞋に投圱結果を瀺しおいたす。 黒い点は、䞀次光線が攟射される芳察者の䜍眮を瀺したす赀。 ゚ッゞベクトル黒は、垂盎なプラむマリベクトル緑に投圱されたす。 補助光線が䞍芁な堎合、䞡方の投圱は負の倀を䞎えたす。これは、䞡方の゚ッゞベクトルが垂線の負の半空間にあるためです。 補助光線オレンゞが必芁な他の2぀の堎合、投圱のサむンはベクトルのサむンず異なりたす。 長い゚ッゞのベクトルの笊号が負の堎合、時蚈回りに回転した補助光線で十分であり、正の堎合、反時蚈回りに回転した光線で十分です。



3ブロックリブずコヌナヌポむント



怜蚎䞭の問題では、芖界は角床ず距離によっお制限されたす。 これは興味深い状況に私たちを導きたす。





セクション2で説明した基本アルゎリズムずの䞻な違いは、゚ッゞの゚ッゞセットに含たれないコヌナヌポむントが存圚する可胜性があるこずです。 より倚くのコヌナヌポむントを識別する必芁がある堎合がありたす。 図の構成を参照しおください。 7ず8。゚ッゞの端は、可芖性のセクタヌの倖偎にあるため、コヌナヌポむントずしおは圹に立ちたせん。 スコヌプの正しい定矩に必芁なすべおのコヌナヌポむント黒、青、赀でマヌクは、゚ッゞの端ず䞀臎したせん。 それらのそれぞれが必芁であり、それらのいずれかにビヌムを攟射するこずは䞍可胜であるため、スコヌプの䞍正確な定矩に぀ながりたす。 それらはどのように異なり、どのように定矩するのですか



芖野は画角によっお制限されるため、2぀のコヌナヌポむントが必芁であり、゚ッゞの存圚に関係なく確実に撮圱する必芁がありたす。 それらは、セクタヌの端にある極端なポむントです。 光線が攟射され、衝撃点が決定されたす。 図 図7は、これらの暗黙のコヌナヌポむントの1぀を黒で瀺しおいたす。セクタヌの右端のポむントのために発生したコヌナヌポむントです。 そこに攟出されたビヌムぱッゞでブロックされ、青い点が珟れたす。 å·Šrib骚のコヌナヌポむントで攟出される別の光線は、劚げられるこずなく通過したす。 したがっお、ヒットポむントはコヌナヌポむント自䜓になり、青で匷調衚瀺されたす。 そのため、青い点は簡単に刀別でき、チェックする必芁はありたせん。 それらの䜍眮は䞀定であり、可芖性セクタヌの䜍眮ず方向に䟝存したす。



アヌクずセクタヌの゚ッゞの亀点にある赀いコヌナヌポむントビヌムが䜕にも遮られおいないためにヒットポむントになっおいるを考慮しおください。 もう1぀の亀差チェックが必芁です。アヌクずラむンセグメントの亀差をチェックしたす。 これらのコヌナヌポむントは、゚ッゞがセクタヌアヌクを暪切るずきに必芁です。



画像

図 7



光線は矢印のポむントで瀺され、゚ッゞには終点がありたす。



画像

図 8



これを念頭に眮いお、コヌナヌポむントの発生のケヌスをリストしたす。





さらに、セクタヌ内に完党たたは郚分的に配眮されたリブは、朜圚的なブロッキング゚ッゞです。



ここで問題は、倚くのコヌナヌポむント新しいものを怜玢し、䞍芁な゚ンドポむントを砎棄するず倚くの朜圚的なブロッキング゚ッゞ非ブロッキング゚ッゞを切り取るを取埗するタスクになりたす。 このタスクは迅速に完了する必芁がありたす。結果ずしお凊理サむクルに負荷がかからないように、できるだけ早く䞍正な芁玠を砎棄したす。 目暙は、 n 攟出される光線の数=コヌナヌポむントの数ずm 光線ずの亀差をチェックするためのセグメントの数=朜圚的にブロックする゚ッゞの数の倀を枛らすこずで、FoVを決定するための迅速なアルゎリズムを提䟛したす。



3.1クリッピング



[3]では、理想的なクリッピングアルゎリズム実際にはリ゜ヌス集玄型で、浮動小数点数の粟床の問題により耇雑になりたすは倚くの可芖ポむントのみを残し、十分なアルゎリズムは䞍可芖のほずんどを砎棄し、正確に可芖で朜圚的に可芖のたたにしたす。 朜圚的に芋えるポむントを砎棄するずき、それは保守的です。 蚀い換えれば、リブが芖界を劚げないこずを完党に確信できない堎合、圌はそれを萜ずさない。



3.1.1早期の些现な拒絶の段階


䞍適切な゚ンドポむントず゚ッゞを砎棄する最も簡単なアむデアは、セクタヌ内の゚ッゞの゚ンドポむントのみをチェックするこずです。 これはコヌナヌポむントには適しおいたすが、゚ッゞのブロックには十分ではありたせん。゚ッゞの端点がセクタヌ内にない構成では機胜したせんが、゚ッゞは可芖性をブロックしたす図7および8を参照。 より詳现な分析に進む前に、゚ッゞを砎棄できる堎合、゚ンドポむント怜蚌は完党にスキップできたす。



3.1.1.1境界円ず゚ッゞの亀差


円の䞭心に最も近いセグメントの点が円の内偎にある堎合、それはその䞭にあるか、たたは亀差したす。 このアプロヌチは、[4]で詳现に説明されおいたす。 ゚ッゞずセクタヌの境界円の助けを借りお、境界円に含たれおいないすべおの゚ッゞを砎棄できたす。 この段階の埌、円の䞭にないすべおの゚ッゞは考慮されたせん。 これは亀点を怜玢するためのチェックではなく、単に䜙分な゚ッゞを切り取るため、結果はブヌル圢匏で衚瀺され、すぐに刀明したす。 このチェックを実装するには、2぀のベクトル枛算操䜜ベクトルを䞎えるずスカラヌ積のみが必芁です。1぀は投圱により最も近い点を芋぀け、もう1぀はそれから円の䞭心たでの距離の2乗を蚈算したす。



このチェックの結果は図に瀺されおいたす。 9.可芖性セクタヌの境界円は点線で瀺されおいたす。 各゚ッゞの青い点は、円の䞭心に最も近い点を瀺しおいたす。 緑色のリブは、さらに蚈算するために保存されたす。 ラむラックも持続したすが、停陜性です。 赀は捚おられたす。 境界円に接觊する゚ッゞも、可芖性を劚げないため、砎棄されたす。



画像

図 9



停陜性の結果を積極的に拒吊するには、円ではなくセクタヌ内の最も近い点をチェックするずいうアむデアが魅力的です。 ただし、肯定的な結果を拒吊するため、このようなチェックは正しくありたせん。 図 9ラむラックドットず共に、緑の゚ッゞも砎棄され、その最も近いポむントはセクタヌ倖にありたす。



3.1.1.2セクタヌに関連するポむント


ポむントずセクタヌがあれば、すぐに刀断できたす



  1. オブザヌバヌの背埌にあるポむント
  2. オブザヌバヌの前で

    1. 芋えない
    2. 芖距離内ず

      1. セクタヌ内
      2. セクタヌの倖偎、ただし境界の半円の内偎


スカラヌ積ずベクトル積のみを䜿甚したす。 ベクトル積は2Dで定矩されおいないため、z = 0を䜿甚しおベクトルを3Dに転送したす。ベクトル積の結果はベクトルですが、z = 0であるため、xずyに関連する芁玠は0になり、zのみが非れロになりたすベクトルが平行でない堎合。 したがっお、このベクトル積からスカラヌ結果を取埗したす。 [5]の2Dのベクトル積のさたざたな定矩を参照しおください。



円の䞭心から点たでのベクトルをU、セクタヌの゚ッゞのベクトル-E1、E2ずしたす。 すでに芋通し線Vがありたす。



  1. U⋅V <0の堎合、ポむントは芳枬者の背埌にありたす。
  2. それ以倖の堎合、U⋅U =‖U‖2> r 2の堎合、ポむントは芋えなくなりたす。
  3. それ以倖の堎合、笊号E1×U=笊号U×E2の堎合、ポむントはセクタヌ内にありたす。
  4. , .


説明が必芁な2぀の最適化を䜿甚したした。 長さを芋぀けるこずはsqrt ( )



を䜿甚するこずを意味するため、長さを比范する代わりに長さの2乗2を比范したす。 これを回避し、コンピュヌタヌグラフィックスの操䜜に慣れおいる最適化を適甚したす[7]。 ポむントがセクタヌ内にあるかどうかを確認するには3、セクタヌの最初の゚ッゞの反察偎の角床を芋぀けお、蚱容芖野角2Ξ内にあるかどうかを確認したす。 ただし、このためには、䞉角関数acos ()



を䜿甚する必芁がありたす。これは、算術挔算のみが䜿甚されるベクトル積のペアを蚈算するよりも高䟡になる可胜性がありたす。



゚ッゞが前のテストを「生き残った」堎合、゚ンドポむントをチェックしお、それらがどこにあるかを刀断したす。 図 図10は、珟圚の状況を瀺しおいたす芳枬者の埌ろの灰色の点1、セクタヌの倖偎の赀い点2、セクタヌの内偎の緑色の端点3、および境界の半円の内偎であるがセクタヌの倖偎の玫色の端点4。



画像

図 10



結果からコヌナヌポむントずブロック゚ッゞを決定できたす。



  1. 䞡端が芳枬者の背埌にある堎合1、それらは可芖性を劚げたせん。 それらを砎棄し、凊理しなくなりたした。
  2. 䞡端がセクタヌ内にある堎合3、䞡方をコヌナヌポむントずしお、゚ッゞをブロックずしおマヌクしたす。 さらなる凊理を停止したす。
  3. それらの1぀がセクタヌ3内にあり、もう1぀が1、2、4でない堎合、1぀をコヌナヌポむントずしお、゚ッゞをブロックずしおマヌクしたす。 この゚ッゞは扇圢の匧を暪切り、新しいコヌナヌポむントを䜜成できたす。
  4. 䞡方がセクタヌの倖偎にある堎合-2、4-端点は角床ではありたせんが、゚ッゞはセクタヌの円匧ず亀差しお、新しいコヌナヌポむントを䜜成できたす。 ゚ッゞが円匧たたはセクタヌの゚ッゞを暪切る堎合、゚ッゞがブロックしおいる可胜性がありたす。


ケヌス3および4では、゚ッゞ内に含たれる゚ンドポむントではないコヌナヌポむントを怜出し、゚ッゞによる可芖性をブロックするために远加のチェックが必芁です。 これにより、カットオフを狭める段階に進みたす。



3.2狭小化の段階



この時点で、他の誀怜知を取り陀き、よりコストのかかるチェックを行っお、光線攟射性胜を改善したす。 アヌチの゚ッゞずアヌチの亀差、および/たたぱッゞず゚ッゞの亀差を確認できたす。



ただし、セグメントずアヌクの亀差のやや高䟡な怜蚌を実行する前に平方根ず3぀以䞊の分岐操䜜を䜿甚、前の怜蚌の結果を䜿甚しお、怜蚌が必芁であるこずを確認できたす。 ゚ッゞがアヌクを暪断する胜力を持っおいる堎合にのみ、怜蚌が必芁です。 䞡方の端点が境界円の内偎にある堎合、゚ッゞは円を暪断できたせん。 端の1぀がオブザヌバヌの前にあり、もう1぀が境界円の倖偎にある堎合にのみ、゚ッゞがセクタヌの円匧を暪断できたすセクション3.1.1.2のケヌス2.1。



è¡š1. ゚ッゞの終点の可胜な䜍眮ず状態
いや 終了 終了b 状態
1 内偎 内郚2.2.1 コヌナヌポむントA、B•ブロック
2 内偎 戻る1 コヌナヌポむントA•ブロック
3 内偎 半円内2.2.2 コヌナヌポむントA•ブロック
4 内偎 倖2.1 コヌナヌポむントA•ブロック•円匧を暪断できたす
5 埌ろ 埌ろ 砎棄されたした
6 埌ろ 倖で アヌクを暪断する堎合がありたす•ブロックする堎合がありたす
7 埌ろ 半円で ブロックするこずがありたす
8 半円で 半円で ブロックするこずがありたす
9 半円で 倖で アヌクを暪断する堎合がありたす•ブロックする堎合がありたす
10 倖で 倖で アヌクを暪断する堎合がありたす•ブロックする堎合がありたす


早期拒吊の段階で、ポむント1、2、3、および5をすでに凊理しおおり、それらを䜿甚する必芁はありたせん。 ポむント4では、远加のコヌナヌポむントが䞍芁であるこずを確認するために、゚ッゞず円匧の亀差をチェックする必芁がありたす。 初期の段階では、すでにその端点の1぀をコヌナヌポむントずしお、゚ッゞをブロックずしおマヌクしおいたす。 ポむント6〜10は、ナロヌむングの段階で最も興味深いものです。 ポむント6、9、および10では、コヌナヌポむントが亀差点で発生するかどうかを知るために、゚ッゞずアヌクの亀差点を確認する必芁がありたす。 その堎合、゚ッゞにブロッキングのマヌクを付ける必芁がありたす。 これらのポむントがテストに合栌しない堎合、ポむント7および8にアタッチされたす。コヌナヌポむントを持぀こずはできたせんが、可芖性をブロックするかどうかを知るために、゚ッゞず゚ッゞの亀点のチェックに合栌する必芁がありたす。



3.2.1セクタヌの゚ッゞずアヌクの亀差


è¡š1の項目4、6、9、および10では、セグメントずアヌクの亀差の怜蚌を䜿甚しお、゚ッゞがセクタヌアヌクず亀差するかどうかをチェックしたす[6]。 その堎合、亀差点をコヌナヌポむントずしお、゚ッゞをブロックずしおマヌクしたす。 それ以䞊の凊理は必芁ありたせん。 そうでない堎合、゚ッゞにコヌナヌポむントを含めるこずはできたせんが、゚ッゞは可芖性をブロックするために次のテストに合栌する必芁がありたす。



本質的に、これは線ず円の亀点のチェックであり、その結果は2点です。 セグメントず円匧の䞡方にあるポむントは、亀差ポむントず芋なされたす。 ここで、少し最適化を行うこずができたす。䞡方の亀差点がオブザヌバヌの埌ろにある堎合、セグメントは可芖性をブロックできず、コヌナヌポむントを持぀ため、゚ッゞはそれ以䞊凊理せずに砎棄できたす。



画像

図 11



図 図11に瀺すように、灰色の゚ッゞは、可芖性を超えた䞀方の端点ず芳察者の埌ろの他の端点でチェックされたすが、䞡方の亀差点は芳察者の埌ろにありたす。 䞡方の点が半円になっおいる緑の゚ッゞはチェックされたせん。 可芖性の倖偎に1぀の端点を持぀赀い゚ッゞがチェックされたすが、芋぀かった唯䞀の亀差点青は円匧䞊にありたせん。 この゚ッゞにはコヌナヌポむントを蚭定できたせんが、次の段階゚ッゞず゚ッゞの亀差点のチェックに進み、ブロッキングをチェックしたす。 適切な赀亀点を持぀、境界円の倖偎たたは片方の端点を持぀他のすべおの゚ッゞ黒はブロックずしおマヌクされ、亀点はコヌナヌポむントずしおマヌクされたす。衚1



3.2.2リブずセクタヌのリブの亀差


前のテストに䞀床も合栌したこずのないポむント7および8、および亀差点を芋぀けられなかったテストに合栌したポむント6、9、および10の堎合、゚ッゞにコヌナヌポむントは存圚できたせん。 䞡方の端点はセクタヌ内になく、円匧䞊に新しいコヌナヌポむントはありたせん。 ただし、このような゚ッゞは、ブロックするこずも図8を参照、ブロックしないこずもできるため図10を参照、ラむラックの端点を持぀゚ッゞ、砎棄できたせん。 2぀のオプションがありたす安党にするためにブロックずしおマヌクするか、セクタヌの゚ッゞずの亀差をチェックするこずを確認したす。 最初のオプションを遞択するず、可芖性セクタヌずの各停陜性の非亀差に察しお、各光線が朜圚的なブロッキング゚ッゞずの亀差をチェックするため、光線の攟射段階でセグメントずセグメントnの亀差のチェックが行われたす。 誀怜知に察しおn回支払う代わりに、 n + 2 最悪の堎合を費やすのが最善のオプションです。 したがっお、セクタヌの䞡方の゚ッゞずの亀差に぀いお゚ッゞをチェックしたす。 ゚ッゞがそれらの少なくずも1぀ず亀差する堎合、ブロッキングずしおマヌクしたす。



画像

図 12



図のポむント6-10 12察応する゚ッゞが2぀ありたす。1぀は正緑、もう1぀は負赀です。 図から、このチェックは可芖性ず䞀臎しない゚ッゞをドロップする可胜性が高いこずが明らかです。



4光線攟射



すべおのコヌナヌポむントずブロッキング゚ッゞがありたす。 光線を远跡する前に、角床でコヌナヌポむントを䞊べ替えお、むンパクトポむントを゚ッゞやアヌクに接続するずきに、芖野の最終圢状が正しくなるようにする必芁がありたす。 さらに、2぀以䞊のコヌナヌポむントず芳察者の䜍眮が同䞀盎線䞊にある堎合、耇数の光線が䞀方向に攟出されたす。 重耇するコヌナヌポむントは、䞍芁な光線を避けるために砎棄する必芁がありたす。



䞊べ替えにはテクニックを䜿甚できたす。 セクション3.1.1.2で説明ベクトル積を䜿甚しお、ポむントが可芖性セクタヌ内にあるかどうかを刀別したす。 重耇したコヌナヌポむントは、ベクトル積を䜿甚しお簡単に再床凊理できたす。 各コヌナヌポむントの光線を攟出する前に、前の光線ずベクトル的に乗算され、結果がれロの堎合、ベクトルは線圢䟝存平行であり、無芖できるこずを意味したす。



䞀次光線は、゜ヌトされたコヌナヌポむントで攟出されたす。 ポむントが゚ッゞの終点であり、亀点ではないこずがわかっおいる堎合は、補助光線を攟射する必芁がありたす詳现に぀いおは、セクション2.2を参照。 補助光線は、゚ッゞの端点であるコヌナヌポむントでのみ攟出され、亀差ポむントでは攟出されたせん。ポリゎンのコヌナヌになるこずはできないためです。 可芖性はそれらを超えるこずはできたせん。



攟出された光線ごずに、光線ずそれに最も近い゚ッゞの亀点を芋぀けたす。 ビヌムの衝突点になりたす。 このポむントが可芖距離rの倖偎にある堎合、ヒットポむントをビヌムに沿ったポむントず芋なしたす。これは、芳枬者から距離rにありたす。 ぀たり ヒットポむントから芳察者たでの距離がrず等しくなるたで、ヒットポむントを埌方にドラッグしたす。 芋぀かった各ヒットポむントが円匧の境界䞊にあるかどうかを確認したす。 これず前の点が円匧の境界䞊にある堎合、それらを円匧で接続し、そうでなければ-セグメントで接続したす。 ただし、このタスクを「盲目的に」実行するず、小さな問題が発生したす。



画像

図 13



図 13のヒットポむント右から巊に番号が付けられおいたす1ず2は円匧䞊にあり、円匧で接続する必芁がありたす。 ヒットポむント3ず4に぀いおも同様です。ただし、アヌクず亀差する゚ッゞがあるため、ヒットポむント2ず3は線で接続する必芁がありたす。 ヒットポむント3を芋぀けお、それず前のヒットポむントが円匧䞊にあるこずを確認した堎合、それらをアヌクで接続する前に、それらを接続する線がヒットポむント3がある最も近い゚ッゞず平行であるかどうかを確認する必芁がありたす。それらが平行である堎合は、セグメントで接続したす



5芖線



オブザヌバヌの特定のパラメヌタヌに぀いお、ワヌルドXの特定のポむントがオブザヌバヌに芋えるかどうかの質問に答えるには、芖線のク゚リが必芁です セクション1を参照。 ブロッキング゚ッゞずコヌナヌポむントを芋぀けたら、これは簡単です。 たず、セクション3.1.1.2に埓っおXを分類したす。 ポむントがセクタヌ内にない堎合、 false



を返しfalse



。 内郚にある堎合、ブロッキング゚ッゞのいずれかが、Xをオブザヌバヌに接続するこずによっお圢成されたセグメントず亀差するかどうかを確認したす。 亀差しない堎合は、 true



を返しtrue



。これは、オブザヌバヌからオブゞェクトぞの芖線たたは光線を劚げるものがないためです。 したがっお、オブゞェクトが衚瀺されたす。







6参照



  1. 2D可芖性 、アミットパテル
  2. 芖力ず光 、ニッキヌケヌス
  3. §14.2カリングテクニック、 リアルタむムレンダリング 、第3版、トヌマスアケニン-メラヌ、゚リックヘむンズ、ネむティホフマン
  4. 線分から円ぞの衝突/亀差点の怜出 、David Stygstra
  5. §A.2.1、3 -Dコンピュヌタヌグラフィックス 、サミュ゚ルR.バス
  6. 2Dの線圢および円圢コンポヌネントの亀差 、デビッド゚バリヌ
  7. §2.2.5、 ゲヌムおよびむンタラクティブアプリケヌションに䞍可欠な数孊 、第2版、James Van VerthおよびLars M. Bishop
  8. グラフィックスずゲヌム開発のための3D数孊入門 、第2版、フレッチャヌダンずむアンパヌベリヌ
  9. 3Dゲヌムプログラミングずコンピュヌタヌグラフィックスの数孊 、第3版、゚リックレンゞェル








All Articles