Library)を使わないのですかなぜGodotは例外処理を使わないのですか?GodotがRTTI(実行時型情報)を強制しないのはなぜですか?GodotがユーザーにDoD(データ指向設計)の実装を強制しないのはなぜですか?Godotの開発をサポートしたり、貢献したりするにはどうすればいいですか?誰がGodotで働いていますか。source行列と変換¶はじめに¶このチュートリアルの前に、この前回にあたるベクトル演算をまず読まれたほうが良いでしょう。このチュートリアルでは変換についてと、加えて行列についても少し扱います(深くは掘り下げません)。応用されるので、ここでは優先的に扱います。宇宙のどこかに宇宙船があると想像してみてください。Godotではこれは簡単です、ちょうどどこかに船を移動し、それを回転させます:さて、2Dでは、これは単純に見えます。位置と回転の角度です。私たちはここから成長し、角度を使用しないことを覚えておいてください(プラス、角度は3Dで作業する場合にはあまり役に立ちません)。ある時点で、誰かがこの宇宙船を設計したことを理解する必要があります。DCCツールを使用して3Dを作成します。設計時には、回転していませんでした。独自の座標系で設計されました。これは、船の先端に座標があり、フィンに別の座標があることを意味します。ピクセル(2D)または頂点(3D)のいずれかです。それでは、船が宇宙のどこかにあったことをもう一度思い出しましょう:どうやってそこに行きましたか?何が移動して、設計された場所から現在の位置に回転したのでしょうか?答えは...変換です。船は元の位置から新しい位置に変換されました。これにより、船舶を現在の場所に表示できます。変換はこのプロセスを説明するには一般的な用語です。変化していることがわかります。この変換をどのように最もよく表現できますか?これに3つのベクトル(2D)を使用してみましょう。Xの正の方向を指す単位ベクトル、Yの正の方向を指す単位ベクトル、および平行移動です。3つのベクトルを"X"、"Y"、"Origin(原点)"と呼び、さらにそれらを船の上に重ねて、より意味のあるものにしましょう:さて、これは良い感じですが、まだ意味をなしていません。origin;選択したポイントにこれを行うと、中心に戻ります:これは予想されていましたが、それからもっと面白いことをしましょう。Xと点の内積を使用し、Yと点の内積に追加します。y.Dot(newPosition));そして、私たちが持っているのは...ちょっと待ってください、それは元の設計位置にある船です!この黒魔術はどのようして起きたのですか?船は宇宙から消え、今では家に戻っています!奇妙に見えるかもしれませんが、多くのロジックがあります。見たように、X軸までの距離とY軸までの距離が計算されたことを思い出してください。方向または平面での距離の計算は、内積の用途の1つです。これは、船内のすべてのポイントの設計座標を取り戻すのに十分でした。*指向座標系(OCS)*です。Origin*はオフセットです。Basis¶Originが何であるかを知っています。これは、新しい位置に変換された後、設計座標系の0,0(原点)が終わった場所です。これが*Origin*と呼ばれる理由ですが、実際には、新しい位置へのオフセットにすぎません。基準軸はもっと面白いです。基準軸は、新しい変換された場所からのOCSのXおよびYの方向です。変更内容を2Dまたは3Dで通知します。Origin(オフセット)とBasis(方向)は、次のように伝えます「デザインの元のX軸とY軸はここにあり、これらの方向を指しています」それでは、基準軸の表現を変更しましょう。2つのベクトルの代わりに、matrixを使用しましょう。ベクトルは、行列(matrix/マトリックス)内の水平方向にあります。次の問題は、それです..この行列って何ですか?さて、行列について聞いたことがないと仮定します。Godotで変換(幾何学変換)¶このチュートリアルでは、行列の数学(およびその演算)については詳しく説明せず、実用的な使い方のみを説明します。そのための資料はたくさんありますが、このチュートリアルを完了すると、理解しやすくなります。変換(Transform)の使用方法を説明します。3つのVector2要素があり、2Dに使用されます。"X"軸は要素0、"Y"軸は要素1、"Origin"は要素2です。その単純さのため、便宜上、基準軸/原点で分割されていません。'Origin'ほとんどの操作はこのデータ型(Transform2D)で説明されますが、同じロジックが3Dにも適用されます。重要なTransformは「単位」行列です。翻訳¶Transform2Dの処理を翻訳するには2つの方法があります。0);これは常にグローバル座標で機能します。m.XformInv(point);しかし、さらに良いことに、次のセクションに書かれているように、このためのヘルパー関数があります。ローカル座標からグローバル座標、およびその逆¶ローカル座標とグローバル座標を変換するためのヘルパーメソッドがあります。行列も拡大縮小できます。スケーリングは、基底ベクトル(基準軸)にベクトルを乗算します(Xベクトルとスケールのx要素、Yベクトルをスケールのy要素で乗算します)。2));行列内のこの種の演算は累積的です。これは、すべてが前のものに関連して開始することを意味します。この惑星に十分長く住んでいる人にとって、変換がどのように機能するかについての良いリファレンスはこれです:行列はタートルと同様に使用されます。カメはおそらく内部に行列を持っていました(そして、おそらくサンタが本物ではないことを発見した後、あなたはこの何年も学んでいるでしょう)。海外のプログラミング教育でLOGOなどのタートルグラフィックスが使用されている事に関連した文だと思われます。変換とは、座標系を切り替えることです。位置(2Dまたは3D)を「デザイナー」座標系からOCSに変換するには、"xform"メソッドが使用されます。m.BasisXformInv(position);直交行列¶ただし、行列がスケーリングされている場合(ベクトルが単位長ではありません)、または基底ベクトルが直交(90°で交差)していない場合、逆変換は機能しません。言い換えれば、逆変換は直交行列でのみ有効です。このため、これらの場合、アフィン変換の逆行列を計算する必要があります。Transform2D.Identity.Xform(position);アフィン逆行列¶アフィン逆行列は、行列にスケールがあるか、軸ベクトルが直交していないかに関係なく、別の行列の逆演算を行う行列です。2つの行列の乗算は、変換を「結合」(連結)します。慣例に従って、乗算は逆の順序で行われます。同じではないからです。childMatrix;親を基準にして行列を作成するには、アフィン逆行列(または正規直交行列の場合は通常の逆行列)を使用します。3Dマトリックスに移動してチュートリアルを完了しましょう。ベクトルを処理し、原点用に追加のベクトルを処理します。いう名前の3x3行列用の特別な型があります。3Dの回転とスケールを表すために使用できます。1))3Dでの回転¶3Dの回転は、2Dよりも複雑です(平行移動とスケールは同じです)。3Dで回転するには、軸を選択する必要があります。回転はこの軸の周りに発生します。回転の軸は正規化ベクトルでなければなりません。任意の方向を指すことができるベクトルですが、長さは1(1.0)でなければなりません。Vector3の)どの3D変換もTransformで表すことができ、基底と原点を分離することで、移動/変形と回転を別々に簡単に行うことができます。