|
Macromedia Flash非公式テクニカルノート
Matrix3Dオブジェクトの行列データをコピーするメソッド
ID: FN1110002 |
Platform: All |
Version: CS5/ActionScript 3.0 |
Runtime: Flash Player 11/AIR 3.0 |
Matrix3Dクラス |
パッケージ
|
flash.geom
|
継承
|
Matrix3D → Object
|
copyColumnFrom()メソッド |
文法
|
public function copyColumnFrom(column:uint, vector3D:Vector3D):void
|
概要
|
メソッドが参照するMatrix3Dオブジェクトの指定した列に、Vector3Dオブジェクトをコピーする。
|
引数
|
column:uint − データをコピーする先のMatrix3Dオブジェクトの列番号。
vector3D:Vector3D − データをコピーするもとのVector3Dオブジェクト。
|
戻り値
|
なし。
|
copyColumnTo()メソッド |
文法
|
public function copyColumnTo(column:uint, vector3D:Vector3D):void |
概要
|
メソッドが参照するMatrix3Dオブジェクトの指定した列を、Vector3Dオブジェクトにコピーする。
|
引数
|
column:uint − データをコピーするもとのMatrix3Dオブジェクトの列番号。
vector3D:Vector3D − データをコピーする先のVector3Dオブジェクト。
|
戻り値
|
なし。
|
copyRowFrom()メソッド |
文法
|
public function copyRowFrom(row:uint, vector3D:Vector3D):void
|
概要
|
メソッドが参照するMatrix3Dオブジェクトの指定した行に、Vector3Dオブジェクトをコピーする。
|
引数
|
row:uint − データをコピーする先のMatrix3Dオブジェクトの行番号。
vector3D:Vector3D − データをコピーするもとのVector3Dオブジェクト。
|
戻り値
|
なし。
|
copyRowTo()メソッド |
文法
|
public function copyRowTo(row:uint, vector3D:Vector3D):void
|
概要
|
メソッドが参照するMatrix3Dオブジェクトの指定した行を、Vector3Dオブジェクトにコピーする。
|
引数
|
row:uint − データをコピーするもとのMatrix3Dオブジェクトの行番号。
vector3D:Vector3D − データをコピーする先のVector3Dオブジェクト[*1]。
|
戻り値
|
なし。
|
copyRawDataFrom()メソッド |
文法
|
public function copyRawDataFrom(vector:Vector.<Number>, index:uint = 0, transpose:Boolean = false):void
|
概要
|
引数に渡したVectorオブジェクトのすべての数値を、メソッドが参照するMatrix3Dオブジェクトにコピーする。
|
引数
|
vector:Vector.<Number> − データをコピーするもとのNumberベース型Vectorオブジェクト。
index:uint − Vectorオブジェクトからコピーするエレメントの最初のインデックス。デフォルト値は0。
transpose:Boolean − trueを渡すと、Vectorオブジェクトのエレメントが、行ごとの順にコピーされる。デフォルト値は列ごとのfalse。
|
戻り値
|
なし。
|
copyRawDataTo()メソッド |
文法
|
public function copyRawDataTo(vector:Vector.<Number>, index:uint = 0, transpose:Boolean = false):void
|
概要
|
メソッドが参照するMatrix3Dオブジェクトのすべての数値を、引数に渡したVectorオブジェクトにコピーする。
|
引数
|
vector:Vector.<Number> − データをコピーする先のNumberベース型Vectorオブジェクト。
index:uint − Vectorオブジェクトにコピーするエレメントの最初のインデックス。デフォルト値は0。
transpose:Boolean − trueを渡すと、Vectorオブジェクトのエレメントが行ごとの順にコピーされる。デフォルト値は列ごとのfalse。
|
戻り値
|
なし。
|
copyFrom()メソッド |
文法
|
public function copyFrom(sourceMatrix3D:Matrix3D):void
|
概要
|
すべての行列データを、引数に渡したMatrix3Dオブジェクトからメソッドが参照するMatrix3Dオブジェクトにコピーする。
|
引数
|
sourceMatrix3D:Matrix3D − データをコピーするもとのMatrix3Dオブジェクト。
|
戻り値
|
なし。
|
copyToMatrix3D()メソッド
|
文法
|
public function copyToMatrix3D(destMatrix3D:Matrix3D):void
|
概要
|
すべての行列データを、メソッドが参照するMatrix3Dオブジェクトから引数に渡したMatrix3Dオブジェクトにコピーする。
|
引数
|
destMatrix3D:Matrix3D − データをコピーする先のMatrix3Dオブジェクト。
|
戻り値
|
なし。
|
説明
Flash Player 11およびAIR 3.0でMatrix3Dクラスに、他のMatrix3DやVector3Dオブジェクトとの間で行列データをコピーするメソッド群が加わりました。Matrix3Dオブジェクトは3次元空間の座標を変換するための4×4(4次)の正方行列を表します(図001)[*2]。なお、行列の要素となる16個の数値を成分と呼びます。
図001■Matrix3Dオブジェクトが表す変換行列
参照するMatrix3Dオブジェクトと引数のVector3Dオブジェクトとの間で、行または列の成分をコピーするのが次表001の4メソッドです。Flash Player 10.3までは、Matrix3Dオブジェクトの成分を行や列ごとに書替えることはできませんでした。
表001■Matrix3DとVector3Dオブジェクトの間で行または列の成分をコピーする
対象
|
Matrix3Dクラスのメソッド
|
コピーの方向
|
列
|
copyColumnFrom()
|
Vector3D → Matrix3D
|
copyColumnTo()
|
Matrix3D → Vector3D
|
行
|
copyRowFrom()
|
Vector3D → Matrix3D
|
copyRowTo()
|
Matrix3D → Vector3D
|
Matrix3D.rawDataプロパティは、Matrix3Dオブジェクトの行列の16成分を数値エレメントとするVectorオブジェクト(Numberベース型)として取得・設定します。これと同じNumberベース型のVectorオブジェクトとの間で成分をコピーするのが次表002のメソッドです。
表002■Matrix3DとVectorオブジェクトの間で行または列の成分をコピーする
Matrix3Dクラスのメソッド
|
コピーの方向
|
copyRawDataFrom()
|
Vector → Matrix3D
|
copyRawDataTo()
|
Matrix3D → Vector
|
Matrix3D.rawDataプロパティのVectorオブジェクトには、数値エレメントが列ごとの順序で納められます(「Matrix3D.rawDataプロパティ」の注[*2]参照)。しかし、行と列で構成されたデータは、行を先に考えることが多いでしょう。ふたつのメソッドの第3引数transposeは、行列で行と列の成分を入替える「転置」の意味で使われます(本稿執筆時には英文ドキュメントにこの引数の説明がありません)。引数にtrueを渡すと、Matrix3Dオブジェクトに対してMatrix3D.transpose()メソッドを呼出したのと同じく、行列の行と列の成分が入替わります[*3]。
参照するMatrix3Dオブジェクトに、引数のMatrix3Dオブジェクトからすべての成分を丸まるコピーするのがMatrix3D.copyFrom()メソッドです。逆に、参照するMatrix3Dオブジェクトから引数のMatrix3Dオブジェクトにすべての成分をコピーするメソッドは、Matrix3D.copyToMatrix3D()メソッドになります(ただし、後者は本稿執筆時の英文ドキュメントに説明がありません[*4])。これらはMatrix3D.clone()メソッドと異なり、新たなMatrix3Dインスタンスをつくりません。オブジェクトの使い回しができて、メモリの無駄遣いを防げます。また、要らぬオブジェクトをつくらなければ、ガベージコレクションという重い処理が避けられます。
[*1] 英文ドキュメントの「copyRowTo() method」の項には、第2引数のvector3Dは「データをコピーするもとのVector3Dオブジェクト」("The Vector3D object from which to copy the data")とされています。しかし、Matrix3D.copyRowFrom()メソッドの説明と同じ文言ですので、誤りでしょう。
[*2] [ヘルプ]の[Adobe Flash Platform用ActionScript 3.0リファレンスガイド]には、[Matrix3D]につぎの解説文とともに以下の図が示されています。しかし、「最初の3行は3Dの各軸(x、y、z)のデータを保持」するという説明と合いませんので、前掲図001のようにx、y、z軸の記載位置を変え、拡大・縮小の語を加えて修正しました。
マトリックスの最初の3行は3Dの各軸(x、y、z)のデータを保持します。平行移動情報は最後の列に格納されます。方向と拡大/縮小のデータは、最初の3列に格納されます。倍率は、最初の3列の対角線上の数値です。Matrix3Dエレメントは次のように表現されます。
[*3] 簡単なテスト用スクリプトの結果をご紹介します。
var myMatrix3D:Matrix3D = new Matrix3D();
var targetMatrix3D:Matrix3D = new Matrix3D();
myMatrix3D.appendTranslation(2, 4, 8);
var myData:Vector.<Number> = myMatrix3D.rawData;
trace(myData);
// 出力: 1,0,0,0,0,1,0,0,0,0,1,0,2,4,8,1
targetMatrix3D.copyRawDataFrom(myData);
trace(targetMatrix3D.rawData);
// 出力: 1,0,0,0,0,1,0,0,0,0,1,0,2,4,8,1
targetMatrix3D.copyRawDataFrom(myData, 0, true);
trace(targetMatrix3D.rawData);
// 出力: 1,0,0,2,0,1,0,4,0,0,1,8,0,0,0,1
myMatrix3D.transpose();
trace(myMatrix3D.rawData);
// 出力: 1,0,0,2,0,1,0,4,0,0,1,8,0,0,0,1
|
[*4] また、メソッド名をなぜcopyTo()としなかったのかも疑問です。
|
参考
[ActionScript 3.0 Reference for the Adobe Flash Platform] > [Matrix3D]
作成者: 野中文雄
更新日: 2011年10月24日 注[*1]を追加。
更新日: 2011年10月20日 英文ドキュメントに説明のない部分を、調べて補った。
作成日: 2011年10月6日
Copyright ©
2001-2011 Fumio Nonaka. All rights reserved.
|