3Dゲヌムでのカメラの回転方法たたは回転行列ずは

この蚘事では、カメラが3Dゲヌム、CSS倉換、および䞀般にカメラやオブゞェクトが空間内で䜕らかの回転がある堎合に、カメラが回転するずきにポむントの座暙がどのように正確に倉換されるかを簡単に説明したす。 組み合わせお、これは線圢代数の簡単な玹介になりたす読者は実際にベクトル、スカラヌ積、そしお最埌に回転行列ずは䜕かを知るでしょう。



はじめに



チャレンゞ。 次のような2次元の画像があるず仮定したす家。





たた、原点から家をOXの方向に芋たずしたす。 これで特定の角床を反時蚈回りに回したした。 質問家は私たちにずっおどのように芋えたすか 盎芳的には、結果は䞋の図ずほが同じになりたす。





しかし、結果を蚈算する方法は そしお、䜕より最悪なのは、3次元空間でそれを行う方法ですか たずえば、カメラを非垞に巧劙に回転させた堎合最初にOZ軞に沿っお、次にOX、次にOYに沿っお



これらの質問に察する回答は、以䞋の蚘事に蚘茉されおいたす。 たず、家を数字の圢で衚す方法぀たり、ベクトルに぀いお説明したす、次にベクトル間の角床スカラヌ積に぀いお、そしお最埌に、カメラの回転方法回転行列に぀いおに぀いお説明したす。



ベクトル座暙



ベクトルに぀いお考えおみたしょう。 ぀たり、長さず方向のある矢印に぀いおです。





コンピュヌタグラフィックスに適甚されたす。このような矢印はそれぞれ、空間内のポむントを定矩したす。





たた、それらを回転させるこずを孊びたいです。 䞊の写真のすべおの矢印を回すず、家が回るからです。 これらの矢印を䜿甚しおできるこずは、数字を加算しお乗算するこずだけだず想像したしょう。 孊校のように2぀のベクトルを远加するには、最初のベクトルの最初から2番目のベクトルの終わりたで線を匕く必芁がありたす。





ここでは、2次元ベクトルに焊点を圓おたす。 そもそも、これらのベクトルを数字で曞く方法を孊びたいず思いたす。なぜなら、それらを玙に矢印の圢で描くたびに、あたり䟿利ではないからです。



これを行う方法を孊習したす。どのベクトルもいく぀かの特別なベクトルOXずOYの合蚈ずしお衚珟でき、特定の係数を掛けるこずができるこずを思い出しおください。 これらの特別なベクトルは基本ず呌ばれ、係数はベクトルの座暙に他なりたせん。 基底ベクトルを ここでiはベクトルのむンデックスで、1たたは2のいずれかです、考慮されるベクトルは 、および埌者の座暙 次に、匏を取埗したす

1



これらの座暙は、この基準に察しお䞀意であるこずを瀺すこずができたす。





矢印に座暙を割り圓おるこずの利点は明らかです。以前は、ベクトルを蚘述するために垞に矢印を描画する必芁がありたしたが、今は2぀の数倀を曞くだけでこのベクトルの座暙を䜜成できたす。 たずえば、次のように曞くこずに同意できたす。 。 たたは 。 それから 、そしお 。 いいね



実際の数孊では、手順は倚少異なりたす。 たず、オブゞェクトが満たす必芁のあるプロパティを蚘述し、それらをベクトルず呌びたす。 圌らは非垞に自然です。 たずえば、ベクトルは加算2぀のベクトルず数倀挔算による乗算をサポヌトする必芁がありたす。 2぀のベクトルの合蚈は、項の順序に䟝存しおはなりたせん。 3぀のベクトルの合蚈は、ペアで远加する順序に䟝存したせん。 完党なリストはWikipediaにありたす。



いずれかの皮類のピヌスがこれらのプロパティを満たしおいる堎合、これらのピヌスはベクトルず呌ばれたすこれはアヒルのタむピングです。 そしお、これらの断片のセット党䜓がベクトルたたは線圢空間です。 䞊蚘の特性は公理ず呌ばれ、ベクトルたたは線圢空間—「 線圢代数 」ずいう名前が由来するの他のすべおの特性はそれらから導出されたす。 䟋えば、ベクトルの䞭には、ベクトルが匏1で衚珟できる特別な基底ベクトルが存圚し、座暙ぞのこの展開はこの基底に察しお䞀意であるず掚定できたす。 私たちの矢がこれらの公理を満たしおいるこずをすぐに瀺すこずができたす。 公理を満たす他のオブゞェクトに出䌚った堎合、理論のすべおの結果をすぐに適甚できるため、公理的アプロヌチは䟿利です。 さらに、この方法では、理論の初めに指の矢印の定矩を避けたす。



公理からベクトルを远加するず、察応する座暙が远加され、ベクトルに数倀を乗算するず、すべおの座暙に同じ数倀が乗算されるこずが簡単に瀺されたす。 次の図のように2぀のベクトルを远加するために、それらを描画するこずはできたせん最初のベクトルの最初から2番目のベクトルの終わりたで線を描画したせんが、たずえば、 。





スカラヌ積



ここで、2぀の任意のベクトルaずbの特別な関数を玹介したす。これをスカラヌ積ず呌びたす。 次のように瀺したす。 。 これらの流行のかっこは、科孊的にブラずケトのベクトルず呌ばれたす。 それらからの利点はただありたせんが、芋た目は玠晎らしいです-さらに、この衚蚘法は、特に数孊的な詳现や量子力孊を扱う堎合には、ただ深い意味がありたす。



公理的アプロヌチの粟神では、スカラヌ積がいく぀かの公理を満たすこずのみが必芁です。 最初のベクトルの代わりに、型のベクトルの合蚈を取る堎合 、それから私たちは欲しい 。 ここで、ギリシャ文字は因子であり、xずyはベクトルです。 たた、2番目のベクトルの代わりにそのような合蚈を代入するず、同じ倉換を行うこずができたすベクトルの合蚈のスカラヌ積もスカラヌ積の合蚈になり、係数も角かっこから取り出されたす。 さらに、倀が必芁です 垞に非負でした。 最埌に、欲しい ベクトル自䜓が れロ。 そうそう、もっず 。



玙の矢印に定芏ず分床噚を远加するず、孊校で知られおいる機胜がこれらの公理を満たしたす。 ベクトルの長さが定芏によっお枬定される堎合、ベクトル間の角床 -分床噚。



定芏ず分床噚がない堎合、スカラヌ積からベクトルの長さを決定できたす— -そしお、ベクトル間の角床  。 もちろん、角床はスカラヌ積の決定方法に䟝存したす。



ベクトルの個々の座暙を通しおスカラヌ積がどのように衚珟されるかを芋おみたしょう。 次のような2぀のベクトルaずbがあるずしたす。 、 。 それから 。



よく芋えたせん 生掻をより良くするために、私たちは特別な座暙系でのみ働き続けたす。 基底ベクトルが単䜍長さを持ち、互いに垂盎である座暙系のみを遞択したす。 蚀い換えれば

2a もし

2b もし

このようなベクトルは正芏盎亀ず呌ばれたす。 正芏盎亀座暙系のスカラヌ積の匏は、認識を超えお倉換されたす。

3



この蚘事のすべおの座暙系は正芏盎亀であるず想定されおいたす。 驚くべきこずに、匏3の結果は、遞択する座暙の正芏盎亀基底に䟝存しないずいう構造になりたす。



「ベクトルの座暙ぞの分解」この段萜の埌で再び説明したすを泚意深く芋るず、ベクトルの座暙は、察応するベヌスベクトルぞの投圱にすぎないこずが疑われたす。 ぀たり、元のベクトルずいずれかの基底ベクトルのスカラヌ積の倀

4







確かに、䟋えば、 。 これはトヌトロゞヌのようです。なぜなら、それ自䜓の基底の基底ベクトルの座暙は垞に1、0ず0、1になるからです。 ただし、他の基底ベクトルを䜿甚しお、叀い基底で衚珟するこずもできたす。 たずえば、新しい正芏盎亀基底は叀い基底で次のように芋える堎合がありたす そしお 。 そしお、䟋えば、ベクトルの最初の座暙を決定できたす 匏4による新しい基瀎 。



「ただし、匏3はスカラヌ積の定矩ずしお䜿甚でき、基底ベクトルの正芏盎亀化は必芁ありたせん。」 そしお、匏3がスカラヌ積の定矩の1぀ずしお機胜するこずは正しいでしょう。 ただし、埮劙な点がありたす。座暙系が倉曎された堎合、同じ匏が別の基底からのベクトルaずbの座暙で同じ数になるこずを瀺す必芁がありたす。 そしお、これはすべおのベヌスが正芏盎亀である堎合にのみです。 これは、次のセクションを読むず衚瀺できたす。



座暙系の回転



座暙系党䜓を倉曎した堎合、ベクトルの座暙がどのように倉化するかを調べおみたしょう。 座暙系を倉曎する必芁があるのはなぜですか 少し考えおみるず、座暙系の回転が3Dたたは2Dモデリングのカメラの回転ず同等であるこずが明らかになりたす䞋の家を含むわずかに倉曎された画像を参照。 そのため、座暙系を回転させる方法を孊ぶこずがたさに必芁です。





新しい座暙系のベクトルaのi番目の座暙を次のように瀺したしょう。 、および新しい基底ベクトル 。 さらに、NEW基底のOLD基底ベクトルiの j番目の座暙を次のように瀺したす。 。 最埌に、OLD基底のNEW基底ベクトルjのi番目の座暙を 。 これで、元のベクトルず叀い基底ベクトルを新しい基底ベクトルで衚珟できたす。 すなわち

5 そしお

6

さらに、新しい基底ベクトルは、叀い基底ベクトルに関しお衚珟できたす。

7

これらの拡匵の䞀郚を以䞋の画像に瀺したす。





ここで、新しい基底のベクトルを通じお匏1を曞き換えたす。



これを匏5ず比范し、ベクトルの座暙が䞀意に決定されるこずを思い出すず、

8 そしお



これらの匏が方皋匏のように芋えるこずは驚くべきこずです3 それらはベクトルのスカラヌ積のように芋えたす 特定のベクトルでこれは偶然ではないこずを以䞋に瀺したす。



1぀の匏で方皋匏9を曞くず、

9



この匏は、4、1、および7を組み合わせるこずにより、異なる方法で導出できたす。 。 スカラヌ積のプロパティを思い出すず、この匏は4぀の合蚈に分割されたす。 ここで、基底ベクトルが正芏盎亀であるこずを思い出せば、 。



この匏は匏9ずたったく同じではありたせん代わりに ここに立っおいたす 。 これは間違いではありたせん—ただ 。 ぀たり、NEW基底のOLD基底ベクトルiのj番目の座暙 OLD基底のNEW基底ベクトルjのi番目の座暙に垞に等しい 。 これは、匏4でこれらの座暙を衚珟しようずするず明らかになりたす。

10 、

たた、スカラヌ積は、ベクトルの積の順序に䟝存したせん。



これらのスカラヌ積が異なる単䜍基底ベクトル間の角床であるこずを思い出すず、これはさらに明癜になりたす。 もちろん、これらの角床は、時蚈回りたたは反時蚈回りに蚭定するかどうかには関係ありたせん。



回転行列



マトリックスに粟通しおいる堎合は、匏92぀の匏をマトリックス圢匏で曞き盎すこずができたす。

11



これはどういう意味ですか い぀ものように、ここには魔法はありたせん。巊の数字ず右のベクトルのこのプレヌトの乗算が匏9ずしお蚈算されるこずに同意したす。 ぀たり、ラベルの各行に右偎の列を乗算し2぀のベクトルのスカラヌ積を行うように、結果を互いに䞋に曞き蟌み、列も取埗したす。



ちなみに、このルヌルを2぀のラベルの乗算に拡匵できたす。最初のラベルの各行に2番目の列を乗算し、結果をラベルに曞き蟌むこずに同意したす。最初の行ず最初の行ず3番目の列の3番目の列の乗算を曞き蟌みたす。 匏11は、このルヌルの特殊なケヌスになりたす。 抂略的に、これはすべお䞋の図に瀺されおいたす。





このベクトルず他のタブレットずの乗算の芏則を備えた数字のタブレットは、マトリックスず呌ばれたす。



行列乗算の芏則は、スカラヌ積が、それを瀺すこずに同意したこずがわかった堎合、さらに自然に芋えたす。 、実際には、ベクトルaが文字列であり、ベクトルbが列であるず想定しおいたす。 その前に、列にベクトルを曞き蟌むこずに同意したした。行ベクトルaは、実際には単なる逆ベクトルaではなく、特別な双察ベクトル空間のオブゞェクトです。 しかし、正芏盎亀基底の堎合、元のベクトルず双察ベクトルの座暙は䞀臎するため぀たり、a行ずa列は同じです、これらの詳现はプレれンテヌションに圱響したせん。 すべお順調です。 たた、䞀方で、スカラヌ積の匏3は、行列乗算の特殊なケヌスです。



䞀般に、行列による乗算はベクトルの特定の倉換に察応するこずが瀺されたす。 「倉換」の代わりに、 挔算子ず蚀うのが習慣です。 そしお、行列乗算は線圢挔算子です。 さらに、線圢挔算子の堎合、挔算子行列は1぀だけです。 りィキペディアでそれに぀いお知るこずができたす 。 ここで説明するず、蚘事は終わりたせん。



したがっお、わかったように、座暙系の回転は、3Dたたは2Dモデリングのカメラの回転に盞圓したす。 したがっお、匏11の行列は回転行列ず呌ばれたす。 匏11は、座暙系の眮換ずしおではなく、回転挔算子の説明ずしお解釈できたす。



この行列の蚈算方法はただ明確ではありたせん。 匏10に戻り、単䜍ベクトル間の角床の䜙匊がスカラヌ積に等しいこずを思い出せば、これは難しくありたせん。 次に、䟋えば、 どこで -座暙系カメラの回転角床。 定矩によれば、回転が反時蚈回りの堎合は正であり、時蚈回りに回転する堎合は負です䞋の図を参照しおください-すでに関連しおいたしたが、今では再び関連しおいたす。 ゞオメトリたたは䞉角法を少しいじるず、回転行列党䜓が次のようになるこずがわかりたす。

12a



Wikipediaを芋るず、そこの匏は少し異なりたす

12b



これがすべおです その䞭には、ベクトル自䜓たたは家などのオブゞェクトの回転角がありたす。 回転が反時蚈回りに発生する堎合も正ず芋なされたす。 しかし、カメラの回転はオブゞェクトの回転ず反察です。぀たり、カメラの回転角床はオブゞェクトの回転角床ず同じですが、反察の笊号で撮圱されたす。



再び珟圚の図面





玠敵なささいなこず



これらの行列は非垞に䟿利です。 さらに、2぀だけでなく、3぀ず4぀も乗算および远加できたす。 行列は倧文字で衚蚘できたす。 たずえば、 Tは回転行列の通垞の指定ですシステムたたはカメラの回転方法に䟝存したす。 次に、匏11 。



行列には単䜍行列がありたす。぀たり、巊偎のベクトルで乗算されたベクトルは、それ自䜓のたたです。 マトリックスも。 単䜍行列はテヌブルのように芋え、すべおれロで埋められ、察角線䞊のみが単䜍です。 このような行列は、れロ床の回転に察応したす。 それが回転䞍足です。 次のようになりたす。

13



少し数えるか考えるず、回転行列の乗算は次々に行われる数回の回転に察応したすただし、右から巊に異なる順序で。 したがっお、プログラムに以前に既知のタヌンが連続しおいく぀かある堎合は、急いでそれらを3次元䞖界のすべおのポむントに適甚しないでください。 行列をより良く乗算し、共通の回転行列を取埗しお、すでに適甚しおいたす。



倚くの行列の堎合、最初の行列に2番目の行列を掛けるず、単䜍行列が埗られるこずがわかりたす。 これらの新しい行列は逆行列ず呌ばれ、 Tに぀いおは 。 それは 。



もう少し考えれば、そのような行列 Tの反察のタヌンに察応する必芁がありたす-Tを䞭和するタヌン これはすでに非垞に䟿利です。 逆行列の蚈算方法を孊べば、必芁に応じおカメラを簡単に逆回転させるこずができたす。



少し考えお、少しでもカりントするず、回転行列に぀いおは、 特殊な構造 匏10を参照があるため、逆行列を取埗するのは非垞に簡単です巊䞊から察角線に沿っお行列を回転させるだけです右䞋隅単䜍行列が単䜍行列に沿っおいる同じ察角線の。 この操䜜は転眮ず呌ばれたす。 䞀般的な堎合の逆行列の怜玢よりもはるかにはるかに速いです。



䞉次元空間



最埌に、3次元空間に進みたす。 すべおの数匏は簡単に倉換されたす-ベクトルでは3぀の座暙、スカラヌ積では-3぀の合蚈など。



耇雑さは回転行列でのみ発生したす。 回転は3回転OX、OY、OZに沿っおのシヌケンスずしお衚珟できるこずはほずんど盎感的に明らかですただし、衚瀺するには少し䜜業する必芁がありたす。したがっお、これら3぀の回転角床で任意の回転を蚭定できたす。 これらの回転に察応する3぀の行列を乗算しお、3次元の回転に共通の行列を取埗できたす3぀のパラメヌタ-座暙軞に察する回転角床。 圌女の倖芳はりィキペディアで芋぀けるこずができたす。



3぀の角床の代わりに、3次元の回転は、回転が行われる呚囲のベクトルず、このベクトルに沿っおカメラを回転させる角床によっお定矩できるこずがわかりたすベクトルの端から芋た堎合、反時蚈回りに配眮したす。 奇劙なこずにたたは、もちろん、この方法にも3぀の数字が必芁です。 ベクトルの長さは重芁ではないため、単䜍長にするこずができたす。 次に、それを蚭定するには、2぀の数倀たずえば、OXずOYに察しお盞察的な2぀の角床だけが必芁です。 これらの2぀の数倀に、ベクトルに察しお回転する角床が远加されたす。 これらのパラメヌタヌを䜿甚した回転行列の匏は、 Wikipediaにも蚘茉されおいたす。



それだけです、ご枅聎ありがずうございたした。



PS蚘事を準備する過皋で、PNGで600 dpiから保存されおいるように芋えたすが、数匏は少しがやけおいるように芋えたした。 Inkscapeは小さなpngを保存したす。 私はこれを倧いに謝りたすが、やり盎す力はありたせん。



PPS写真はhabrastorageにアップロヌドされたすが、衚瀺されない堎合もありたす。 どうやらhabrastorageのいく぀かの問題。 ペヌゞをリロヌドしおみおください



All Articles