サイトトップ

Director Flash 書籍 業務内容 プロフィール

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:Booleantrueを渡すと、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:Booleantrueを渡すと、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オブジェクトが表す変換行列
図001

参照する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.