関数 multiplyVector3(v) および multiplyVector4(v) は、オブジェクト行列に 4 次元行ベクトルを左乗算し、vector3 および Vector4 タイプの行ベクトルを返します。オブジェクト行列がモデル ビュー行列で、入力ベクトルが点の位置情報である場合、出力ベクトルはモデル変換とカメラ変換後のカメラに対する点の位置になります。 Vector3 型のベクトルを入力すると同次座標に自動的に補完され、返されると第 4 成分が切り取られて通常の座標になります。
関数rotateAxis(v)は、オブジェクト行列の左上隅にある3×3の部分行列を使用して行ベクトルvを左乗算し、新しい行ベクトルを取得して正規化し、この新しい行ベクトルを返します。行ベクトル。この関数はベクトル v の値も更新します。モデル ビュー マトリックスの左上隅にある 3×3 サブマトリックスには、モデル マトリックスの回転情報が含まれています。このサブマトリックスを左にベクトルで乗算すると、取得された新しいベクトルが実際には回転後の元のベクトルになります (回転効果)。のモデル行列から来ています)。したがって、この関数はrotateAxisと呼ばれます。
var te = this.elements;
var v = new THREE.Vector4();
v.x = te[0] * a.x te[4] * a.y te[8] * a.z te[12] * a.w ;
v.y = te[1] * a.x te[5] * a.y te[9] * a.z te[13] * a.w;
v.z = te[2] * a.x te[6] * a.y te[ 10] * a.z te[14] * a.w;
v.w = ( a.w ) te[3] * a.x te[7] * a.y te[11] * a.z te[15] * a.w : 1; v を返します。
}、
関数 determinant() は行列の行列値を計算します。
関数 flattenToArray( flat) と関数 flattenToArrayOfset( flat,offset) は、行列を 1 次元配列にダンプします。前者の関数は flat[0] から flat[15] までを格納します。後者の関数は、ストレージの開始位置。 flat[offset] から flat[offset 15] まで格納されます。
関数 getPosition() および setPosition() は、行列オブジェクトの位置コンポーネントを取得または設定するために使用されます。回転コンポーネントが左上隅の 3x3 サブマトリックスに格納されるのと同様に、位置コンポーネントは 4 行目の最初の 3 つのコンポーネント、つまり element[12]、element[13]、element[14] に格納されます。
関数 getColumeX()、getColumeY()、および getColumeZ() はそれぞれ、左上隅の 3×3 部分行列の 3 つの列を抽出します。
関数compose(translate,rotation,scale)は、vector3型translateオブジェクトで表現される平行移動、matrix3型回転オブジェクトで表現される回転、vector3型scaleオブジェクトで表現されるスケーリングを組み合わせるオブジェクト行列を設定します。変換行列。実際、これは、モデル行列の対応する部分空間に直接埋められることを意味します。
関数 decompose(translate,rotation,scale) は、行列オブジェクトを 3 つのオブジェクトに分割します。これは、前の関数とまったく逆です。
関数 extractPosition(m) および extractRotation(m) は、行列オブジェクト m 内の位置または回転を表すコンポーネントを呼び出し元オブジェクトに抽出します。たとえば、2 つのオブジェクトは複数の異なる変換を受けており、オブジェクトのモデルのみが抽出されます。ビュー行列が別のオブジェクトのモデル ビュー行列を回転させる場合、呼び出し元は他のオブジェクトと同じ回転方向を維持します。
関数translate(v)は、モデル行列の最も基本的な変換の1つである平行移動変換であり、モデル行列がベクトルvによって従属するオブジェクトを平行移動します。
関数rotateX(angle)、rotateY(angle)、およびrotateZ(angle)はそれぞれ、モデル行列が属するオブジェクトをX、Y、Z軸の周りで角度ごとに回転させます。
関数rotateByAxis(axis, angle)は、モデル行列が属するオブジェクトを任意の軸の周りで角度だけ回転させます。これは、関係する2つの変換の多重重ね合わせです(重ね合わせパラメータは現在の変換で構成されます)。位置と軸パラメータの決定)、任意の軸を中心とした回転の問題については、「モデル ビュー マトリックスと投影マトリックス: WebGL ノート (1)」で説明しました。
ここにスケール関数があるべきではないでしょうか?しかし、ソースコードからは見つかりませんでした。
関数 makeTranslate(x,y,z)、makeRotationX(theta)、makeRotationY(theta)、makeRotationZ(theta)、makeRotationAxis(axis,angle)、および makeScale(s) 関数は、オブジェクト行列を単位に直接リセットします。行列。変換、軸を中心とした回転、または単純なスケーリング後の行列。この関数はオブジェクト自体の値を更新します。更新された結果はオブジェクトの以前の値とは何の関係もありません (これは make prefix 関数の特徴でもあります)。
関数 makeFrustum(...)、makePerspective(...)、makeOrthographic(...) も新しい行列の初期化に使用されます。具体的な意味についてはカメラ クラスで説明すると思います。カメラクラスのコンストラクター これらの関数は必ず呼び出されます。
関数 clone() は行列オブジェクトをコピーして返します。
Core::Face3 この関数は三角形の平面オブジェクトを作成します
THREE.Face3 = function (a, b, c,normal, color,materialIndex ) {
this.a = a
this.b = b; 🎜 >this.c = c;
this.normal = THREE.Vector3 の通常のインスタンス : new THREE.Vector3();
this.vertexNormals = 配列の通常のインスタンス : [ ]; . color = THREE.Color のインスタンス color : new THREE.Color();
this.vertexTangents = []; =materialIndex;
this.centroid = new
};
オブジェクトの a、b、c の値は 3 つの頂点のインデックスです(後で説明します。すべてのポイントは Mesh オブジェクトに配列として保存されます); 名前が示すように、normal は法線、color は頂点マテリアルのインデックスです。これらのパラメータは、vector3 のいずれかで渡すことができます。型または配列型。
clone(x) メソッドは、同じ値を持つ新しいオブジェクトを返します。
Core::Face4
この関数は、Face3 とほぼ同じなので省略した 4 頂点の面を作成します。
Core::Math THREE.Math はコンストラクターを持たない「静的クラス」であるため、new キーワードを使用して初期化する必要はありません。このクラスは、必要な数学ツールをいくつか提供します。
関数clamp(x,a,b)は区間[a,b]内のxをクランプします。 ClampBottom(x,a) は、片側のみをクランプすることを除いて、同様の機能を持ちます。
関数mapLinear(x,a1,a2,b1,b2)は、点(x,y)が(a1,a2)と(b1,b2)を結ぶ直線上に位置するような値yを計算します。 コードをコピー
コードは次のとおりです。 mapLinear: function ( x, a1, a2 , b1, b2 ) { return b1 ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );
;
関数random16()、randInt(low, high)、randFloat(low, high)、およびrandFloatSpread(range)はそれぞれ、[0,1]間隔で16ビットのランダムな浮動小数点数を生成し、間隔でランダムな整数を生成します。 [low, high] 間隔。[low,high] 間隔内のランダムな浮動小数点数、[-range/2, range/2] 間隔内のランダムな浮動小数点数。
関数 sigh(x) は、x の符号に応じて 1 または -1 を返します。
Core::Clock このコンストラクターはクロック (正確にはストップウォッチ) オブジェクトを作成します
THREE.Clock = function ( autoStart ) {
this.autoStart = ( autoStart !== unknown ) : true; this.startTime = 0;
this.running = 0;
関数) と stop() は、タイミングを開始または停止するために使用されます。
関数 getDelta() は、関数が最後に呼び出されてからの時間を返します。関数が初めて呼び出された場合は、計時を開始してからの時間の長さを返します。 autoStart 値が true の場合、getDelta() 関数の呼び出し時に start() 関数が呼び出されていないか、stop() 関数が呼び出されている場合、タイミングは自動的に開始され、0 が返されます。 autoStart() が false の場合、start() を呼び出す前または stop() を呼び出した後に getDelta() を呼び出すと 0 が返されます。
関数 getElapsedTime() は、関数が呼び出されたときに計測の開始からの時間を返します。
Core::Color
このコンストラクターは、色を表すオブジェクトを構築します
コードをコピー
コードは次のとおりです。 THREE.Color = function ( hex ) { if ( hex !== unknown ) this.setHex( hex );
return this; } ;
関数 setHex(hex) は、オブジェクトの r、g、b 属性を 16 進数で設定します。実際、オブジェクトでは、色は最終的にこれら 3 つの属性に格納されます。
コードをコピー
this.g = ( hex >> 8 & 255 ) / 255;
this.b = ( hex & 255 ) / 255;
return this
},
関数 setRGB(r,g,b) および setHSV(h,s) ,v) RGB 値または HSV 値でオブジェクトを設定します。
関数 getHex() は 16 進数のカラー値を返します。
関数 copyGammaToLinear(color) と copyLinearToGamma(color) は、それぞれ色の RGB 値を二乗またはルートし、呼び出し元オブジェクトに割り当てます。
関数convertGammaToLinear()とconvertLinearToGamma()はそれぞれ、呼び出し元独自のRGB値に対して二乗またはオープンされます。