関数translate( distance, axis )は、オブジェクトをaxis axisで指定された方向に距離だけ移動させます。関数translateX(距離)、translateY(距離)、およびtranslateZ(距離)を使用すると、X、Y、Z軸に距離だけ進みます。これらの関数は位置オブジェクトの値のみを変更し、行列の値は変更しないことに注意してください。
関数 localToWorld(vector) はローカル座標をワールド座標に変換しますが、関数 worldToLocal は反対。ここでのベクトルのローカル座標は、変換前の座標、つまりワイパーのデフォルト位置の頂点座標を指すことに注意してください。
関数 lookAt(eye,center,up) は、一般にカメラ オブジェクトに使用されるマトリックス属性オブジェクトの lookAt 関数を実行します (前に紹介したように、matrix4 オブジェクトにも lookAt 関数があります)。この関数は回転状態のみを変更するため、行列属性オブジェクトが実行されると、属性 RotationAutoUpdate が true の場合、回転またはクォータニオンの値が更新されます。どちらが更新されるかは属性 useQation によって異なります。
関数add(object)と関数remove(object)は、現在のObject3Dオブジェクトからサブオブジェクトを追加したり、サブオブジェクトを削除したりします。シーン内の多くのObject3Dオブジェクトがツリーを使用して管理されていることが容易に理解できます。 。
関数 traverse(callback) は、呼び出し元と呼び出し元のすべての子孫をトラバースします。コールバック パラメーターは、呼び出し先と各子孫オブジェクトが callback(this) を呼び出します。
関数 getChildByName(name, recursive) は、文字列を介して呼び出し元の子要素 (recursive は false) または子孫要素 (recursive は true) に一致するオブジェクトをクエリします。属性名を返します。
関数 updateMatrix() と updateMatrixWorld(force) は、位置、回転または四元数、スケール パラメーターに従って行列と行列ワールドを更新します。 updateMatrixWorld は、force 値が true であるか、呼び出し元自身の matrixWorldNeedsUpdate 値が true である場合、すべての子孫要素の matrixWorld も更新します。 applyMatrix(matrix)関数では、行列の値を変更した直後に位置、回転などの属性が更新されますが、translate(距離、軸)関数では、位置などの変数が変更されます(または、位置などの属性が変更されます)。直接変更される) ため、すぐには更新されません。行列の値を更新するには、updateMatrix() を手動で呼び出す必要があります。これらの詳細は注目に値します。イベント リスナーを追加すると、1 つの値が変更されると、他のすべての値がすぐに更新されると考えられます。これは、適切なタイミングで更新することで効率が向上するためであると考えられます。 - たとえば、回転値は頻繁に変更される可能性がありますが、マトリックス属性は使用する前にのみ更新されます。
updateMatrix: function () {
this.matrix .setPosition( this.position );
if ( this.useQuaternion === false ) {
this.matrix.setRotationFromEuler( this.rotation, this.eulerOrder );
🎜>this .matrix.setRotationFromQuaternion( this.quaternion );
}
if ( this.scale.x !== 1 || this.scale.y !== 1 || this.scale.z ! == 1 ) {
this.matrix.scale( this.scale );
this.boundRadiusScale = Math.max( this.scale.x, Math.max( this.scale.y, this.scale. z ) ) ;
}
this.matrixWorldNeedsUpdate = true;
},
updateMatrixWorld: function (force) {
if (this.matrixAutoUpdate === true ) this.updateMatrix() ;
if ( this.matrixWorldNeedsUpdate === true || 強制 === true ) {
if ( this.parent === 未定義 ) {
this.matrixWorld.copy( this.matrix );
} else {
this.matrixWorld.multiply( this.parent.matrixWorld, this.matrix );
}
this.matrixWorldNeedsUpdate = false;
}
for ( var i = 0, l = this.children.length; i < l; i ) {
this.children[ i ].updateMatrixWorld(force );
}
},
関数 deallocate は、オブジェクトが不要になったときに、呼び出し元が占有していたスペースを手動で解放します。
Core::Projectors
射影行列を管理するクラス。コードが複雑すぎるので、適切なタイミングで見てみましょう。
Core::UV このコンストラクターは、マテリアル座標クラス (多くの場合、頂点に対応するマテリアル上の座標) を生成します。次に、「pick.素材から「色」を決めて質感を実現します。
THREE.UV = function ( u, v ) {
this.u = u || 0;
マテリアル座標クラスは、簡略化された Vector2 クラスです。属性名以外はただ違います。
Core::Ray Core::Rectangle Core:Spline
原点、方向、遠方および近方のカットオフ ポイントを備えた Ray クラス。点光源にも応用できるはずです。長方形と曲線のタイプは比較的単純で、それほど「核心」ではありません。後で見てみましょう。 Core::Geometry
Geometry クラスも非常に重要なクラスであり、頂点と面で構成される幾何学的形状を表します。 THREE.Geometry = function () {
THREE .GeometryLibrary.push( this );
this.id = THREE.GeometryIdCount;
this.vertices = []; ];
this.normals = [];
this.faceUvs = [[]]; .morphTargets = [];
this.morphNormals = [];
this.skinIndices = []; .lineDistances = [];
this.boundingSphere = null;
this.dynamic = true; ;
this.elementsNeedUpdate = false;
this.tangentsNeedUpdate = false; >this.buffersNeedUpdate = false;
次の 2 つの属性セットが最も重要です
:
属性の頂点は配列です。頂点座標を表すvector3型のオブジェクトです。属性の色と法線は、頂点に対応する色の値と検出ベクトルを表します。ほとんどの場合、頂点の色と検出ベクトルは「表面」で定義されます。立方体の側面 色が異なるため、各頂点は実際には異なる面では異なる色になります。
属性facesは配列であり、各要素はface4またはface3タイプのオブジェクトです。以前にface3を紹介したときに、faceは頂点のインデックス値のみを格納し、インデックス値は次のとおりであると述べました。配列の頂点で使用される頂点の座標値を取得します。
以下は関数
です:
applyMatrix(matrix) 関数は、ジオメトリ内のすべての頂点座標とサーフェスの法線ベクトルを更新します。実際には、変換行列が使用されます。マトリックスを使用してジオメトリをジオメトリに適用すると、形状が空間変換されます。 NormalMatrix は、パラメータ行列の左上隅にある 3×3 行列の逆転置行列です。この行列は、ベクトル (頂点座標ではなく法線) を回転するために使用されます。
コードをコピー
コードは次のとおりです。
applyMatrix: function (行列) {
varnormalMatrix = new THREE.Matrix3();
normalMatrix.getInverse(行列).transpose();
for ( var i = 0, il = this.vertices.length; i var vertex = this.vertices[ i ];
matrix.multiplyVector3( vertex );
} for ( var i = 0, il = this.faces.length; i var face = this.faces[ i ];
normalMatrix.multiplyVector3( face.normal ).normalize();