패키지 | flash.geom |
클래스 | public class Matrix3D |
상속 | Matrix3D Object |
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
단일 행렬은 여러 변환을 조합하여 한 번에 3D 표시 객체에 적용할 수 있습니다. 예를 들어 3D 좌표에 행렬을 적용하여 회전 후 평행 이동을 수행할 수 있습니다.
표시 객체의 z
속성이나 rotation 또는 scaling 속성을 명시적으로 설정하는 경우 해당 Matrix3D 객체가 자동으로 만들어집니다.
transform.matrix3d
속성을 통해 3D 표시 객체의 Matrix3D 객체에 액세스할 수 있습니다. 2D 객체에는 Matrix3D 객체가 없습니다.
2D 객체의 z
속성 값은 0이며 matrix3D
속성 값은 null
입니다.
참고: 동일한 Matrix3D 객체가 서로 다른 두 표시 객체에 지정되는 경우 런타임 오류가 발생합니다.
Matrix3D 클래스는 변형 데이터를 보유하는 4행 4열의 숫자 표인 4x4 정방 행렬을 사용합니다. 행렬의 처음 세 행은 3D 축(x,y,z)의 데이터를 보유합니다. 평행 이동 정보는 마지막 열에 있습니다. 회전 및 크기 조절 데이터는 처음 세 열에 있습니다. 크기 조절 인수는 처음 세 열의 대각선 숫자입니다. Matrix3D 요소를 나타내면 다음과 같습니다.
Matrix3D 클래스를 사용할 때는 행렬 수학의 내부 작업을 이해할 필요가 없습니다. Matrix3D 클래스는 변형 및 투영 작업을 단순화하는 appendTranslation()
, appendRotation()
또는 interpolateTo()
등의 구체적인 메서드를 제공합니다. 또한 decompose()
및 recompose()
메서드 또는 rawData
속성을 사용하여 내부 행렬 요소에 액세스할 수도 있습니다.
표시 객체는 자신의 축 회전 속성을 캐시하여 각 축에 대한 회전을 별도로 유지하고 다양한 회전 조합을 관리합니다. Matrix3D 객체의 메서드를 호출하여 표시 객체를 변형하면 객체의 회전 캐시가 무효화됩니다.
관련 API 요소
flash.geom.Transform
flash.geom.PerspectiveProjection
flash.geom.Vector3D
flash.geom.Orientation3D
flash.geom.Utils3D
flash.geom.Matrix
속성 | 정의 주체 | ||
---|---|---|---|
constructor : Object
지정된 객체 인스턴스의 클래스 객체 또는 생성자 함수에 대한 참조입니다. | Object | ||
determinant : Number [읽기 전용]
행렬이 반전 가능한지 여부를 결정하는 숫자입니다. | Matrix3D | ||
position : Vector3D
변형의 기준 틀 내에서 표시 객체의 3D 좌표(x,y,z) 위치를 보유하는 Vector3D 객체입니다. | Matrix3D | ||
rawData : Vector.<Number>
각각의 4개 요소가 4x4 매트릭스의 열인 16개 숫자의 Vector입니다. | Matrix3D |
메서드 | 정의 주체 | ||
---|---|---|---|
Matrix3D 객체를 만듭니다. | Matrix3D | ||
현재 Matrix3D 객체에 다른 Matrix3D 객체를 곱하여 행렬을 추가합니다. | Matrix3D | ||
증분 회전을 Matrix3D 객체에 추가합니다. | Matrix3D | ||
x, y 및 z축을 따른 증분 크기 조절을 Matrix3D 객체에 추가합니다. | Matrix3D | ||
x, y 및 z축을 따라 위치를 조정하는 증분 평행 이동을 Matrix3D 객체에 추가합니다. | Matrix3D | ||
현재 Matrix3D 객체와 정확히 일치하는 복사본인 새 Matrix3D 객체를 반환합니다. | Matrix3D | ||
Vector3D 객체를 호출 Matrix3D 객체의 특정 열에 복사합니다. | Matrix3D | ||
호출 Matrix3D 객체의 특정 열을 Vector3D 객체에 복사합니다. | Matrix3D | ||
소스 Matrix3D 객체의 모든 행렬 데이터를 호출 Matrix3D 객체에 복사합니다. | Matrix3D | ||
소스 Vector 객체의 모든 벡터 데이터를 호출 Matrix3D 객체에 복사합니다. | Matrix3D | ||
호출 Matrix3D 객체의 모든 행렬 데이터를 제공된 벡터에 복사합니다. | Matrix3D | ||
Vector3D 객체를 호출 Matrix3D 객체의 특정 행에 복사합니다. | Matrix3D | ||
호출 Matrix3D 객체의 특정 행을 Vector3D 객체에 복사합니다. | Matrix3D | ||
Matrix3D | |||
변형 행렬의 평행 이동, 회전 및 크기 조절 설정을 세 Vector3D 객체의 Vector로 반환합니다. | Matrix3D | ||
평행 이동 요소를 제외하고 변형 행렬을 사용하여 한 좌표 공간에서 다른 좌표 공간으로 Vector3D 객체를 변형합니다. | Matrix3D | ||
지정된 속성이 객체에 정의되어 있는지 여부를 나타냅니다. | Object | ||
현재 행렬을 항등 또는 단위 행렬로 변환합니다. | Matrix3D | ||
[정적]
대상 매트릭스의 평행 이동, 회전 및 크기 조절 변형에 대해 특정 매트릭스의 이러한 변형을 보간합니다. | Matrix3D | ||
대상 매트릭스의 평행 이동, 회전 및 크기 조절 변형에 대해 이 매트릭스를 보간합니다. | Matrix3D | ||
현재 행렬을 반전합니다. | Matrix3D | ||
Object 클래스의 인스턴스가 매개 변수로 지정된 객체의 프로토타입 체인에 있는지 여부를 나타냅니다. | Object | ||
지정된 위치를 향하도록 표시 객체를 회전합니다. | Matrix3D | ||
현재 Matrix3D 객체에 다른 Matrix3D 객체를 곱하여 행렬을 앞에 추가합니다. | Matrix3D | ||
증분 회전을 Matrix3D 객체의 앞에 추가합니다. | Matrix3D | ||
x, y 및 z축을 따른 증분 크기 조절을 Matrix3D 객체의 앞에 추가합니다. | Matrix3D | ||
x, y 및 z축을 따라 위치를 조정하는 증분 평행 이동을 Matrix3D 객체의 앞에 추가합니다. | Matrix3D | ||
지정된 속성이 존재하고 열거 가능한지 여부를 나타냅니다. | Object | ||
변형 행렬의 평행 이동, 회전 및 크기 조절 설정을 설정합니다. | Matrix3D | ||
루프 작업에서 동적 속성을 사용할 수 있는지 여부를 설정합니다. | Object | ||
로캘별 규칙에 따라 서식이 지정된 이 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 문자열 표현을 반환합니다. | Object | ||
변형 행렬을 사용하여 한 좌표 공간에서 다른 좌표 공간으로 Vector3D 객체를 변형합니다. | Matrix3D | ||
변형 행렬을 사용하여 한 좌표 공간에서 다른 좌표 공간으로 숫자의 Vector를 변형합니다. | Matrix3D | ||
현재 Matrix3D 객체를 행과 열이 교환된 행렬로 변환합니다. | Matrix3D | ||
지정된 객체의 프리미티브 값을 반환합니다. | Object |
determinant | 속성 |
determinant:Number
[읽기 전용] 언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
행렬이 반전 가능한지 여부를 결정하는 숫자입니다.
Matrix3D 객체는 반전 가능해야 합니다. determinant
속성을 사용하면 Matrix3D 객체가 반전 가능한지 확인할 수 있습니다. determinant가 0이면 역행렬이 존재하지 않습니다. 예를 들어 행렬의 전체 행이나 열이 0이거나 두 행이나 열이 서로 같으면 determinant가 0입니다. determinant는 연립 방정식을 풀 때도 사용됩니다.
Matrix3D 클래스와 같은 정방 행렬에만 determinant가 있습니다.
구현
public function get determinant():Number
관련 API 요소
position | 속성 |
position:Vector3D
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
변형의 기준 틀 내에서 표시 객체의 3D 좌표(x,y,z) 위치를 보유하는 Vector3D 객체입니다. position
속성을 사용하면 표시 객체의 행렬을 분해 및 재구성하지 않아도 행렬의 평행 이동 벡터에 바로 액세스할 수 있습니다.
position
속성을 사용하여 변형 행렬의 평행 이동 요소를 가져오고 설정할 수 있습니다.
구현
public function get position():Vector3D
public function set position(value:Vector3D):void
관련 API 요소
rawData | 속성 |
rawData:Vector.<Number>
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
각각의 4개 요소가 4x4 매트릭스의 열인 16개 숫자의 Vector입니다.
rawData
속성을 반전 불가능한 행렬로 설정하면 예외가 발생합니다. Matrix3D 객체는 반전 가능해야 합니다. 반전 불가능한 행렬이 필요한 경우 Matrix3D 객체의 하위 클래스를 만듭니다.
구현
public function get rawData():Vector.<Number>
public function set rawData(value:Vector.<Number>):void
관련 API 요소
Matrix3D | () | 생성자 |
public function Matrix3D(v:Vector.<Number> = null)
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
Matrix3D 객체를 만듭니다. 각각의 4개 요소가 하나의 열인 16개 숫자의 Vector를 사용하여 Matrix3D 객체를 초기화할 수 있습니다. Matrix3D 객체를 만든 후 rawData
속성을 사용하여 행렬 요소에 액세스할 수 있습니다.
매개 변수가 정의되지 않은 경우 생성자는 항등 또는 단위 Matrix3D 객체를 만듭니다. 행렬 표기법에서 항등 행렬은 주 대각선 위치의 모든 요소 값이 1이고 나머지 요소 값이 모두 0인 행렬입니다. 항등 행렬의 rawData
속성 값은 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1
입니다. 항등 행렬의 위치 또는 평행 이동 값은 Vector3D(0,0,0)
이고, 회전 설정은 Vector3D(0,0,0)
이고, 크기 조절 값은 Vector3D(1,1,1)
입니다.
v:Vector.<Number> (default = null ) — 각각의 4개 요소가 4x4 매트릭스의 열인 16개 숫자의 Vector입니다.
|
관련 API 요소
append | () | 메서드 |
public function append(lhs:Matrix3D):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
현재 Matrix3D 객체에 다른 Matrix3D 객체를 곱하여 행렬을 추가합니다. 결과에는 두 행렬 변형이 결합됩니다. Matrix3D 객체를 여러 행렬과 곱할 수 있습니다. 최종 Matrix3D 객체는 모든 변형의 결과가 들어 있습니다.
행렬 곱셈은 행렬 덧셈과 다릅니다. 행렬 곱셈에서는 교환법칙이 성립되지 않습니다. 즉, A 곱하기 B는 B 곱하기 A와 다릅니다. append()
메서드를 사용하면 왼쪽부터 곱해지므로 lhs
Matrix3D 객체는 multiplication 연산자의 왼쪽에 있습니다.
thisMatrix = lhs * thisMatrix;
append()
메서드를 처음 호출할 때는 부모 공간을 기준으로 수정됩니다. 이후에 이 메서드를 호출할 때는 추가된 Matrix3D 객체의 기준 틀이 기준이 됩니다.
append()
메서드는 현재 행렬을 추가된 행렬로 바꿉니다. 현재 행렬을 변경하지 않고 두 행렬을 추가하려면 clone()
메서드를 사용하여 현재 행렬을 복사한 다음 복사본에 append()
메서드를 적용합니다.
매개 변수
lhs:Matrix3D — 현재 Matrix3D 객체를 곱할 왼쪽 행렬입니다.
|
관련 API 요소
appendRotation | () | 메서드 |
public function appendRotation(degrees:Number, axis:Vector3D, pivotPoint:Vector3D = null):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
증분 회전을 Matrix3D 객체에 추가합니다. 표시 객체에 Matrix3D 객체를 적용하면 Matrix3D 객체의 다른 변형이 수행된 후 회전이 수행됩니다.
표시 객체의 회전은 축, 축을 중심으로 하는 증분 회전 각도, 객체의 회전 중심에 대한 선택적 pivot 점으로 정의됩니다. 축은 일반적인 모든 방향일 수 있습니다. 일반적인 축은 X_AXIS
(Vector3D(1,0,0)
), Y_AXIS
(Vector3D(0,1,0)
) 및 Z_AXIS
(Vector3D(0,0,1)
)입니다. 항공 관련 용어에서는 y축 중심 회전을 요(yaw), x축 중심 회전을 피치(pitch), z축 중심 회전을 롤(roll)이라고 합니다.
변형 순서도 중요합니다. 회전 후 평행 이동 변형을 수행할 때는 평행 이동 후 회전 변형을 수행할 때와 다른 효과가 나타납니다.
회전 효과는 절대 기준이 아닙니다. 현재 위치 및 방향이 기준으로 사용됩니다. 변형 행렬에 절대 변경을 적용하려면 recompose()
메서드를 사용합니다. appendRotation()
메서드는 표시 객체의 rotationX
속성과 같은 축 회전 속성과도 다릅니다. 회전 속성은 항상 모든 평행 이동보다 먼저 적용되지만 appendRotation()
메서드는 행렬에서의 순서에 따라 수행됩니다. 표시 객체의 회전 속성과 비슷한 효과를 만들려면 행렬에서 다른 변형보다 먼저 회전을 수행하는 prependRotation()
메서드를 사용합니다.
표시 객체의 Matrix3D 객체에 appendRotation()
메서드의 변형을 적용하면 표시 객체의 캐시된 회전 속성 값이 무효화됩니다.
표시 객체를 자신의 위치를 기준으로 특정 점을 중심으로 회전하는 방법 중 하나는 객체의 평행 이동을 지정된 점으로 설정하고 appendRotation()
메서드를 사용하여 객체를 회전한 다음 객체를 원래 위치로 다시 평행 이동하는 것입니다. 다음 예제에서는 3D 표시 객체인 myObject
에 좌표 (10,10,0)을 중심으로 y축 회전을 적용합니다.
myObject.z = 1; myObject.transform.matrix3D.appendTranslation(10,10,0); myObject.transform.matrix3D.appendRotation(1, Vector3D.Y_AXIS); myObject.transform.matrix3D.appendTranslation(-10,-10,0);
매개 변수
degrees:Number — 회전 각도입니다.
| |
axis:Vector3D — 회전의 축 또는 방향입니다. 일반적인 축은 X_AXIS (Vector3D(1,0,0) ), Y_AXIS (Vector3D(0,1,0) ) 및 Z_AXIS (Vector3D(0,0,1) )입니다. 이 벡터의 길이는 1이어야 합니다.
| |
pivotPoint:Vector3D (default = null ) — 객체의 회전 중심을 결정하는 점입니다. 객체의 기본 pivot 점은 객체의 등록 포인트입니다.
|
관련 API 요소
appendScale | () | 메서드 |
public function appendScale(xScale:Number, yScale:Number, zScale:Number):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
x, y 및 z축을 따른 증분 크기 조절을 Matrix3D 객체에 추가합니다. 표시 객체에 Matrix3D 객체를 적용하면 Matrix3D 객체의 다른 변형이 수행된 후 크기 조절이 수행됩니다. 기본 크기 조절 인수는 (1.0, 1.0, 1.0)입니다.
크기 조절은 세 축(x,y,z)을 따른 세 개의 증분 변경 집합으로 정의됩니다. 각 축을 서로 다른 숫자로 곱할 수 있습니다. 표시 객체에 크기 조절을 적용하면 객체의 크기가 증가하거나 감소합니다. 예를 들어 x, y 및 z축을 2로 설정하면 객체가 2배 커지고, 0.5
로 설정하면 크기가 절반이 됩니다. 크기 조절 변형을 특정 축에만 적용하려면 다른 매개 변수를 1로 설정합니다. 매개 변수가 1이면 해당 축을 따라 크기가 조절되지 않습니다.
appendScale()
메서드를 사용하여 크기를 조절하거나 왜곡을 관리할 수 있습니다. 예를 들어 표시 객체를 확장하거나 축소하고 특정 위치를 확대하거나 축소할 수 있습니다. 크기 조절 변형은 표시 객체의 회전 및 평행 이동 시 자동으로 수행됩니다.
변형 순서도 중요합니다. 크기 조절 후 평행 이동 변형을 수행할 때는 평행 이동 후 크기 조절 변형을 수행할 때와 다른 효과가 나타납니다.
매개 변수
xScale:Number — x축을 따라 객체의 크기를 조절하는 데 사용되는 승수입니다.
| |
yScale:Number — y축을 따라 객체의 크기를 조절하는 데 사용되는 승수입니다.
| |
zScale:Number — z축을 따라 객체의 크기를 조절하는 데 사용되는 승수입니다.
|
관련 API 요소
appendTranslation | () | 메서드 |
public function appendTranslation(x:Number, y:Number, z:Number):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
x, y 및 z축을 따라 위치를 조정하는 증분 평행 이동을 Matrix3D 객체에 추가합니다. 표시 객체에 Matrix3D 객체를 적용하면 Matrix3D 객체의 다른 변형이 수행된 후 평행 이동이 수행됩니다.
평행 이동은 세 축(x,y,z)을 따른 세 개의 증분 변경 집합으로 정의됩니다. 표시 객체에 변형을 적용하면 표시 객체가 현재 위치에서 x, y 및 z축을 따라 매개 변수에 지정된 대로 이동합니다. 평행 이동을 특정 축에만 적용하려면 다른 매개 변수를 0으로 설정합니다. 매개 변수가 0이면 해당 축을 따라 변경하지 않는 것입니다.
평행 이동 변경은 절대 기준이 아닙니다. 행렬의 현재 위치와 방향이 기준으로 사용됩니다. 변형 행렬에 절대 변경을 적용하려면 recompose()
메서드를 사용합니다. 변형 순서도 중요합니다. 평행 이동 후 회전 변형을 수행할 때는 회전 후 평행 이동을 수행할 때와 다른 효과가 나타납니다.
매개 변수
x:Number — x축을 따른 증분 평행 이동입니다.
| |
y:Number — y축을 따른 증분 평행 이동입니다.
| |
z:Number — z축을 따른 증분 평행 이동입니다.
|
관련 API 요소
clone | () | 메서드 |
copyColumnFrom | () | 메서드 |
copyColumnTo | () | 메서드 |
copyFrom | () | 메서드 |
copyRawDataFrom | () | 메서드 |
public function copyRawDataFrom(vector:Vector.<Number>, index:uint = 0, transpose:Boolean = false):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11, AIR 3.0, Flash Lite 4 |
소스 Vector 객체의 모든 벡터 데이터를 호출 Matrix3D 객체에 복사합니다. 선택적 인덱스 매개 변수를 사용하면 벡터에서 임의의 시작 슬롯을 선택할 수 있습니다.
매개 변수
vector:Vector.<Number> — 복사할 데이터가 있는 Vector 객체입니다.
| |
index:uint (default = 0 )
| |
transpose:Boolean (default = false )
|
copyRawDataTo | () | 메서드 |
public function copyRawDataTo(vector:Vector.<Number>, index:uint = 0, transpose:Boolean = false):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11, AIR 3.0, Flash Lite 4 |
호출 Matrix3D 객체의 모든 행렬 데이터를 제공된 벡터에 복사합니다. 선택적 인덱스 매개 변수를 사용하면 벡터에서 임의의 대상 시작 슬롯을 선택할 수 있습니다.
매개 변수
vector:Vector.<Number> — 데이터를 복사할 Vector 객체입니다.
| |
index:uint (default = 0 )
| |
transpose:Boolean (default = false )
|
copyRowFrom | () | 메서드 |
copyRowTo | () | 메서드 |
copyToMatrix3D | () | 메서드 |
decompose | () | 메서드 |
public function decompose(orientationStyle:String = "eulerAngles"):Vector.<Vector3D>
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
변형 행렬의 평행 이동, 회전 및 크기 조절 설정을 세 Vector3D 객체의 Vector로 반환합니다. 첫 번째 Vector3D 객체는 평행 이동 요소를 보유합니다. 두 번째 Vector3D 객체는 회전 요소를 보유합니다. 세 번째 Vector3D 객체는 크기 조절 요소를 보유합니다.
interpolateTo()
메서드 등의 일부 Matrix3D 메서드는 행렬을 자동으로 분해하고 재구성하여 변형을 수행합니다.
절대 부모 기준 틀을 사용하여 행렬의 변형을 수정하려면 decompose()
메서드를 사용하여 설정을 검색하고 적절히 변경합니다. 그런 다음 recompose()
메서드를 사용하여 Matrix3D 객체를 수정된 변형으로 설정합니다.
decompose()
메서드의 매개 변수는 변형에 사용할 방향 스타일을 지정합니다. 기본 방향은 각 축에 대한 서로 다른 세 개의 회전각으로 방향을 정의하는 eulerAngles
입니다. 회전은 차례대로 수행되며 다른 회전의 축을 변경하지 않습니다. 표시 객체의 축 회전 속성은 오일러 각 방향 스타일 변형을 수행합니다. 다른 방향 스타일 옵션은 axisAngle
및 quaternion
입니다. 축 각 방향에서는 축과 각의 조합을 사용하여 방향을 결정합니다. 객체가 회전하는 중심 축은 방향을 나타내는 단위 벡터입니다. 각은 벡터 주위로 회전할 크기를 나타냅니다. 또한 방향은 표시 객체가 향하는 위치를 결정하고, 각은 위쪽을 가리키는 방향을 결정합니다. appendRotation()
및 prependRotation()
메서드에는 축 각 방향이 사용됩니다. 쿼터니언 방향에는 복소수 및 벡터의 네 번째 요소가 사용됩니다. 세 개의 회전축(x,y,z)과 회전각(w)을 통해 방향을 나타냅니다. interpolate()
메서드에는 쿼터니언이 사용됩니다.
매개 변수
orientationStyle:String (default = "eulerAngles ") — 행렬 변형에 사용되는 방향 스타일을 결정하는 선택적 매개 변수입니다. 세 가지 방향 스타일은 eulerAngles (상수 EULER_ANGLES ), axisAngle (상수 AXIS_ANGLE ) 및 quaternion (상수 QUATERNION )입니다. 여러 방향 스타일에 대한 자세한 내용은 geom.Orientation3D 클래스를 참조하십시오.
|
Vector.<Vector3D> — 각각 평행 이동, 회전 및 크기 조절 설정이 들어 있는 세 Vector3D 객체의 Vector입니다.
|
관련 API 요소
예제 ( 예제 사용 방법 )
decompose()
및 recompose()
메서드를 사용하여 타원을 소실점 방향으로 이동하면서 가로로 늘립니다. decompose()
메서드에서 반환하는 첫 번째 Vector3D 객체는 평행 이동 좌표를 보유합니다. 세 번째 Vector3D 객체는 크기 조절 설정을 보유합니다. Vector3D 객체의 incrementBy()
메서드는 행렬의 절대 평행 이동 및 크기 조절 설정을 증가시킵니다.
package { import flash.display.MovieClip; import flash.display.Shape; import flash.geom.*; import flash.events.Event; public class Matrix3DdecomposeExample extends MovieClip { private var ellipse:Shape = new Shape(); public function Matrix3DdecomposeExample():void { ellipse.x = (this.stage.stageWidth / 2); ellipse.y = (this.stage.stageHeight - 40); ellipse.z = 1; ellipse.graphics.beginFill(0xFF0000); ellipse.graphics.lineStyle(2); ellipse.graphics.drawEllipse(0, 0, 50, 40); ellipse.graphics.endFill(); addChild(ellipse); ellipse.addEventListener(Event.ENTER_FRAME, enterFrameHandler); } private function enterFrameHandler(e:Event):void { var v3:Vector.<Vector3D> = new Vector.<Vector3D>(3); v3 = ellipse.transform.matrix3D.decompose(); v3[0].incrementBy(new Vector3D(0,0,1)); v3[2].incrementBy(new Vector3D(0.01,0,0)); ellipse.transform.matrix3D.recompose(v3); } } }
deltaTransformVector | () | 메서드 |
public function deltaTransformVector(v:Vector3D):Vector3D
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
평행 이동 요소를 제외하고 변형 행렬을 사용하여 한 좌표 공간에서 다른 좌표 공간으로 Vector3D 객체를 변형합니다. 반환된 Vector3D 객체는 회전 및 크기 조절 변형이 적용된 새 좌표를 보유합니다. deltaTransformVector()
메서드로 평행 이동 변환만 들어 있는 행렬을 적용하면 반환된 Vector3D는 원래 Vector3D 객체와 동일합니다.
deltaTransformVector()
메서드를 사용하면 한 좌표 공간에 있는 표시 객체가 두 번째 표시 객체의 회전 변형에 응답하게 할 수 있습니다. 객체는 회전을 복사하지 않으며 위치만 변경하여 회전의 변경을 반영합니다. 예를 들어 display.Graphics
API를 사용하여 회전하는 3D 표시 객체를 그리려면 3D 객체의 회전하는 좌표를 2D 점에 매핑해야 합니다. 우선 deltaTransformVector()
메서드를 사용하여 각 회전 후 객체의 3D 좌표를 검색합니다. 그런 다음 표시 객체의 local3DToGlobal()
메서드를 적용하여 3D 좌표를 2D 점으로 변환합니다. 그런 다음 2D 점을 사용하여 회전하는 3D 객체를 그릴 수 있습니다.
참고: 이 메서드는 전달된 Vector3D의 w 구성 요소를 자동으로 0.0으로 설정합니다.
매개 변수
v:Vector3D — 변형될 좌표를 보유하는 Vector3D 객체입니다.
|
Vector3D — 좌표가 변형된 Vector3D 객체입니다.
|
관련 API 요소
identity | () | 메서드 |
public function identity():void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
현재 행렬을 항등 또는 단위 행렬로 변환합니다. 항등 행렬은 주 대각선의 요소 값이 1이고 나머지 요소 값이 모두 0인 행렬입니다. 결과는 rawData
값이 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1
이고 회전 설정이 Vector3D(0,0,0)
, 위치 또는 평행 이동 설정이 Vector3D(0,0,0)
, 크기 조절이 Vector3D(1,1,1)
로 설정된 행렬입니다. 항등 행렬을 나타내면 다음과 같습니다.
객체에 항등 행렬을 적용하여 변형하면 아무 변형도 수행되지 않습니다. 즉, 행렬에 항등 행렬을 곱하면 결과는 원래 행렬과 동일한 행렬입니다.
interpolate | () | 메서드 |
public static function interpolate(thisMat:Matrix3D, toMat:Matrix3D, percent:Number):Matrix3D
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
대상 매트릭스의 평행 이동, 회전 및 크기 조절 변형에 대해 특정 매트릭스의 이러한 변형을 보간합니다.
interpolate()
메서드를 사용하면 표시 객체의 축 회전 속성과 같은 메서드를 사용할 때 발생할 수 있는 잘못된 몇 가지 결과가 나타나지 않습니다. interpolate()
메서드는 표시 객체의 캐시된 회전 속성 값을 무효화하고 표시 객체 행렬의 방향 요소를 쿼터니언으로 변환한 후 보간합니다. 이 메서드를 사용하면 방향을 가장 간결하고 효율적으로 나타낼 수 있습니다. 또한 매끄러운 회전이 가능하고 짐벌 락이 발생하지 않습니다. 개별 축을 독립적으로 처리하는 오일러 각을 사용하면 짐벌 락이 발생할 수 있습니다. 둘 이상의 축을 중심으로 회전할 때 여러 축이 정렬되어 예기치 않은 결과가 나타날 수 있습니다. 쿼터니언 회전에서는 짐벌 락이 발생하지 않습니다.
interpolate()
메서드를 연속으로 호출하면 표시 객체가 다른 표시 객체에 빠르게 접근하다가 점차 느리게 접근하는 효과를 만들 수 있습니다. 예를 들어 thisMat
매개 변수를 반환된 Matrix3D 객체로, toMat
매개 변수를 대상 표시 객체에 연결된 Matrix3D 객체로, percent
매개 변수를 0.1
로 설정하면 표시 객체가 대상 객체로 10%만큼 이동합니다. 후속 호출 또는 후속 프레임에서 객체가 대상에 도달할 때까지 나머지 90%의 10%만큼 이동한 다음 나머지 거리의 10%만큼씩 이동하는 과정이 계속됩니다.
매개 변수
thisMat:Matrix3D — 보간할 Matrix3D 객체입니다.
| |
toMat:Matrix3D — 대상 Matrix3D 객체입니다.
| |
percent:Number — 0 에서 1 사이의 값이며, thisMat Matrix3D 객체를 대상 Matrix3D 객체 쪽으로 보간할 비율을 결정합니다.
|
Matrix3D — 행렬 값을 원본 행렬과 대상 행렬 사이에 배치하는 요소를 갖는 Matrix3D 객체입니다. 반환된 행렬을 this 표시 객체에 적용하면 객체가 대상 객체에 지정된 비율만큼 접근합니다.
|
관련 API 요소
interpolateTo | () | 메서드 |
public function interpolateTo(toMat:Matrix3D, percent:Number):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
대상 매트릭스의 평행 이동, 회전 및 크기 조절 변형에 대해 이 매트릭스를 보간합니다.
interpolateTo()
메서드를 사용하면 표시 객체의 축 회전 속성과 같은 메서드를 사용할 때 발생할 수 있는 잘못된 결과가 나타나지 않습니다. interpolateTo()
메서드는 표시 객체의 캐시된 회전 속성 값을 무효화하고 표시 객체 행렬의 방향 요소를 쿼터니언으로 변환한 후 보간합니다. 이 메서드를 사용하면 방향을 가장 간결하고 효율적으로 나타낼 수 있습니다. 또한 매끄러운 회전이 가능하고 짐벌 락이 발생하지 않습니다. 개별 축을 독립적으로 처리하는 오일러 각을 사용하면 짐벌 락이 발생할 수 있습니다. 둘 이상의 축을 중심으로 회전할 때 여러 축이 정렬되어 예기치 않은 결과가 나타날 수 있습니다. 쿼터니언 회전에서는 짐벌 락이 발생하지 않습니다.
참고: 보간의 경우 행렬의 크기 조절 값이 재설정되고 행렬이 정규화됩니다.
interpolateTo()
메서드를 연속으로 호출하면 표시 객체가 다른 표시 객체에 빠르게 접근하다가 점차 느리게 접근하는 효과를 만들 수 있습니다. 예를 들어 percent 매개 변수를 0.1
로 설정하면 표시 객체가 toMat
매개 변수로 지정된 대상 객체에 10%만큼 접근합니다. 후속 호출 또는 후속 프레임에서 객체가 대상에 도달할 때까지 나머지 90%의 10%만큼 이동한 다음 나머지 거리의 10%만큼씩 이동하는 과정이 계속됩니다.
매개 변수
toMat:Matrix3D — 대상 Matrix3D 객체입니다.
| |
percent:Number — 0 에서 1 사이의 값이며, 대상을 기준으로 표시 객체의 위치를 결정합니다. 값이 1.0 에 가까울수록 표시 객체가 현재 위치에 가까워집니다. 값이 0 에 가까울수록 표시 객체가 대상에 가까워집니다.
|
관련 API 요소
예제 ( 예제 사용 방법 )
ellipse2
가 다른 3차원 표시 객체인 ellipse1
에 접근합니다. ellipse2
는 ellipse1
을 따라가면서 잡으려고 합니다. ellipse1
이 y축 중심으로 회전하지 않으면 ellipse2
가 ellipse1
에 도달하여 겹치게 됩니다. 두 타원은 동일한 방법으로 그려지지만 3차원 월드 공간에서 서로 다른 위치에 배치됩니다.
package { import flash.display.MovieClip; import flash.display.Shape; import flash.display.Graphics; import flash.geom.*; import flash.events.Event; public class InterpolateToExample extends MovieClip { private var ellipse1:Shape = new Shape(); private var ellipse2:Shape = new Shape(); public function InterpolateToExample():void { ellipse1 = myEllipses(250, 100, 500, 0xFF0000); addChild(ellipse1); ellipse2 = myEllipses(-30, 120, 1, 0x00FF00); addChild(ellipse2); addEventListener(Event.ENTER_FRAME, enterFrameHandler); } private function myEllipses(x:Number, y:Number, z:Number, c:Number):Shape { var s:Shape = new Shape(); s.x = x; s.y = y; s.z = z; s.graphics.beginFill(c); s.graphics.lineStyle(2); s.graphics.drawEllipse(100, 50, 100, 80); s.graphics.endFill(); return s; } private function enterFrameHandler(e:Event) { ellipse1.rotationY += 1; ellipse2.transform.matrix3D.interpolateTo(ellipse1.transform.matrix3D, 0.1); } } }
invert | () | 메서드 |
public function invert():Boolean
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
현재 행렬을 반전합니다. 반전된 행렬은 원래 행렬과 크기가 같지만 정반대의 변형을 수행합니다. 예를 들어 원래 행렬에 x축을 중심으로 특정 방향의 객체 회전이 포함되어 있는 경우 역행렬에는 해당 축을 중심으로 반대 방향의 객체 회전이 포함됩니다. 반전된 행렬을 객체에 적용하면 원래 행렬을 통해 수행된 변형이 취소됩니다. 행렬에 자신의 역행렬을 곱한 결과는 항등 행렬입니다.
역행렬을 사용하여 행렬을 서로 나눌 수 있습니다. 행렬 A를 행렬 B로 나누려면 행렬 A에 행렬 B의 역행렬을 곱합니다. 카메라 공간에도 역행렬을 사용할 수 있습니다. 월드 뷰를 카메라 또는 뷰 공간으로 변환하려면 월드 공간에서 카메라가 이동할 때 월드의 객체가 카메라와 반대 방향으로 이동해야 합니다. 예를 들어 카메라가 접근하면 객체는 커집니다. 즉, 카메라가 월드 z축에서 아래로 이동하면 객체는 월드 z축에서 위쪽으로 이동합니다.
invert()
메서드는 현재 행렬을 반전된 행렬로 바꿉니다. 현재 행렬을 변경하지 않고 행렬을 반전하려면 clone()
메서드를 사용하여 현재 행렬을 복사한 다음 복사본에 invert()
메서드를 적용합니다.
Matrix3D 객체는 반전 가능해야 합니다.
반환값Boolean — 행렬이 성공적으로 반전되었으면 true 를 반환합니다.
|
관련 API 요소
pointAt | () | 메서드 |
public function pointAt(pos:Vector3D, at:Vector3D = null, up:Vector3D = null):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
지정된 위치를 향하도록 표시 객체를 회전합니다. 이 메서드를 사용하면 제자리에서 방향을 수정할 수 있습니다. 표시 객체의 전방 방향 벡터(at
Vector3D 객체)는 지정된 월드 기준 위치를 가리킵니다. 표시 객체의 위쪽 방향은 up
Vector3D 객체로 지정됩니다.
pointAt()
메서드는 표시 객체의 캐시된 회전 속성 값을 무효화합니다. 이 메서드는 표시 객체의 행렬을 분해하고 회전 요소를 수정하여 객체를 지정된 위치로 돌립니다. 그런 다음 표시 객체의 행렬을 재구성(업데이트)하여 변형을 수행합니다. 객체가 이동하는 객체의 위치와 같이 이동하는 대상을 가리키는 경우 이후에 이 메서드를 호출할 때마다 객체가 이동하는 대상 쪽으로 회전합니다.
참고: 선택적 매개 변수를 설정하지 않고 Matrix3D.pointAt()
메서드를 사용하면 기본적으로 대상 객체가 지정된 월드 기준 위치로 회전되지 않습니다. at
값을 -y축 (0,-1,0)으로 설정하고 up
값을 -z축 (0,0,-1)로 설정해야 합니다.
매개 변수
pos:Vector3D — 대상 객체의 월드 기준 위치입니다. 월드 기준이란 모든 객체가 배치된 월드 공간 및 좌표를 기준으로 객체를 변형함을 뜻합니다.
| |
at:Vector3D (default = null ) — 표시 객체가 향하는 위치를 정의하는 객체 기준 벡터입니다. 객체 기준이란 객체 공간(객체의 자체 기준 틀 및 좌표계)을 기준으로 객체를 변형함을 뜻합니다. 기본값은 +y축 (0,1,0)입니다.
| |
up:Vector3D (default = null ) — 표시 객체의 "위쪽"을 정의하는 객체 기준 벡터입니다. 위에서 내려다보며 객체를 그린 경우 "위쪽" 벡터는 +z축입니다. 객체 기준이란 객체 공간(객체의 자체 기준 틀 및 좌표계)을 기준으로 객체를 변형함을 뜻합니다. 기본값은 +z축 (0,0,1)입니다.
|
관련 API 요소
예제 ( 예제 사용 방법 )
pointAt()
의 "at" 및 "up" 매개 변수를 변경하면 삼각형의 움직임에 주는 영향을 확인할 수 있습니다.
package { import flash.display.MovieClip; import flash.display.Shape; import flash.display.Graphics; import flash.geom.*; import flash.events.Event; public class PointAtExample extends MovieClip { private var ellipse:Shape = new Shape(); private var triangle:Shape = new Shape(); public function PointAtExample():void { ellipse.graphics.beginFill(0xFF0000); ellipse.graphics.lineStyle(2); ellipse.graphics.drawEllipse(30, 40, 50, 40); ellipse.graphics.endFill(); ellipse.x = 100; ellipse.y = 150; ellipse.z = 1; triangle.graphics.beginFill(0x0000FF); triangle.graphics.moveTo(0, 0); triangle.graphics.lineTo(40, 40); triangle.graphics.lineTo(80, 0); triangle.graphics.lineTo(0, 0); triangle.graphics.endFill(); triangle.x = 200; triangle.y = 50; triangle.z = 1; addChild(ellipse); addChild(triangle); ellipse.addEventListener(Event.ENTER_FRAME, ellipseEnterFrameHandler); triangle.addEventListener(Event.ENTER_FRAME, triangleEnterFrameHandler); } private function ellipseEnterFrameHandler(e:Event) { if(e.target.y > 0) { e.target.y -= 1; e.target.x -= 1; } } private function triangleEnterFrameHandler(e:Event) { e.target.transform.matrix3D.pointAt(ellipse.transform.matrix3D.position, Vector3D.X_AXIS, Vector3D.Y_AXIS); } } }
prepend | () | 메서드 |
public function prepend(rhs:Matrix3D):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
현재 Matrix3D 객체에 다른 Matrix3D 객체를 곱하여 행렬을 앞에 추가합니다. 결과에는 두 행렬 변형이 결합됩니다.
행렬 곱셈은 행렬 덧셈과 다릅니다. 행렬 곱셈에서는 교환법칙이 성립되지 않습니다. 즉, A 곱하기 B는 B 곱하기 A와 다릅니다. prepend()
메서드를 사용하면 오른쪽부터 곱해지므로 rhs
Matrix3D 객체는 multiplication 연산자의 오른쪽에 있습니다.
thisMatrix = thisMatrix * rhs
prepend()
메서드는 객체 공간을 기준으로 수정합니다. 즉, 객체의 최초 기준 틀이 항상 기준으로 사용됩니다.
prepend()
메서드는 현재 행렬을 앞에 추가된 행렬로 바꿉니다. 현재 행렬을 변경하지 않고 두 행렬을 앞에 추가하려면 clone()
메서드를 사용하여 현재 행렬을 복사한 다음 복사본에 prepend()
메서드를 적용합니다.
매개 변수
rhs:Matrix3D — 현재 Matrix3D를 곱할 오른쪽 행렬입니다.
|
관련 API 요소
prependRotation | () | 메서드 |
public function prependRotation(degrees:Number, axis:Vector3D, pivotPoint:Vector3D = null):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
증분 회전을 Matrix3D 객체의 앞에 추가합니다. 표시 객체에 Matrix3D 객체를 적용하면 Matrix3D 객체의 다른 변형이 수행되기 전에 회전이 수행됩니다.
표시 객체의 회전은 축, 축을 중심으로 하는 증분 회전 각도, 객체의 회전 중심에 대한 선택적 pivot 점으로 정의됩니다. 축은 일반적인 모든 방향일 수 있습니다. 일반적인 축은 X_AXIS
(Vector3D(1,0,0)
), Y_AXIS
(Vector3D(0,1,0)
) 및 Z_AXIS
(Vector3D(0,0,1)
)입니다. 항공 관련 용어에서는 y축 중심 회전을 요(yaw), x축 중심 회전을 피치(pitch), z축 중심 회전을 롤(roll)이라고 합니다.
변형 순서도 중요합니다. 회전 후 평행 이동 변형을 수행할 때는 평행 이동 후 회전을 수행할 때와 다른 효과가 나타납니다.
회전 효과는 절대 기준이 아닙니다. 이 효과의 기준은 객체(원래 위치와 방향의 기준 틀)입니다. 변형에 절대 변경을 적용하려면 recompose()
메서드를 사용합니다.
표시 객체의 Matrix3D 객체에 prependRotation()
메서드의 변형을 적용하면 표시 객체의 캐시된 회전 속성 값이 무효화됩니다.
표시 객체를 자신의 위치를 기준으로 특정 점을 중심으로 회전하는 방법 중 하나는 객체의 평행 이동을 지정된 점으로 설정하고 prependRotation()
메서드를 사용하여 객체를 회전한 다음 객체를 원래 위치로 다시 평행 이동하는 것입니다. 다음 예제에서는 3D 표시 객체인 myObject
에 좌표 (10,10,0)을 중심으로 y축 회전을 적용합니다.
myObject.z = 1; myObject.transform.matrix3D.prependTranslation(10,10,0); myObject.transform.matrix3D.prependRotation(1, Vector3D.Y_AXIS); myObject.transform.matrix3D.prependTranslation(-10,-10,0);
매개 변수
degrees:Number — 회전 각도입니다.
| |
axis:Vector3D — 회전의 축 또는 방향입니다. 일반적인 축은 X_AXIS (Vector3D(1,0,0) ), Y_AXIS (Vector3D(0,1,0) ) 및 Z_AXIS (Vector3D(0,0,1) )입니다. 이 벡터의 길이는 1이어야 합니다.
| |
pivotPoint:Vector3D (default = null ) — 회전 중심을 정의하는 점입니다. 객체의 기본 pivot 점은 객체의 등록 포인트입니다.
|
관련 API 요소
예제 ( 예제 사용 방법 )
package { import flash.display.MovieClip; import flash.display.Shape; import flash.geom.*; import flash.events.MouseEvent; public class Matrix3DprependRotationExample extends MovieClip { private var ellipse:Shape = new Shape(); public function Matrix3DprependRotationExample():void { ellipse.graphics.beginFill(0xFF0000); ellipse.graphics.lineStyle(2); ellipse.graphics.drawEllipse(-50, -40, 100, 80); ellipse.graphics.endFill(); ellipse.x = (this.stage.stageWidth / 2); ellipse.y = (this.stage.stageHeight / 2); ellipse.z = 1; addChild(ellipse); stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); } private function mouseMoveHandler(e:MouseEvent):void { var y:int; var x:int; if(e.localX > ellipse.x) { y = (Math.round(e.localX) / 100); } else { y = -(Math.round(e.localX) / 10); } if(e.localY > ellipse.y) { x = (Math.round(e.localY) / 100); } else { x = -(Math.round(e.localY) / 100); } ellipse.transform.matrix3D.prependRotation(y, Vector3D.Y_AXIS); ellipse.transform.matrix3D.prependRotation(x, Vector3D.X_AXIS); } } }
prependScale | () | 메서드 |
public function prependScale(xScale:Number, yScale:Number, zScale:Number):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
x, y 및 z축을 따른 증분 크기 조절을 Matrix3D 객체의 앞에 추가합니다. 표시 객체에 Matrix3D 객체를 적용하면 Matrix3D 객체의 다른 변형이 수행되기 전에 크기 조절이 수행됩니다. 변경의 기준은 객체(원래 위치와 방향의 기준 틀)입니다. 기본 크기 조절 인수는 (1.0, 1.0, 1.0)입니다.
크기 조절은 세 축(x,y,z)을 따른 세 개의 증분 변경 집합으로 정의됩니다. 각 축을 서로 다른 숫자로 곱할 수 있습니다. 표시 객체에 크기 조절을 적용하면 객체의 크기가 증가하거나 감소합니다. 예를 들어 x, y 및 z축을 2로 설정하면 객체가 2배 커지고, 0.5
로 설정하면 크기가 절반이 됩니다. 크기 조절 변형을 특정 축에만 적용하려면 다른 매개 변수를 1로 설정합니다. 매개 변수가 1이면 해당 축을 따라 크기가 조절되지 않습니다.
prependScale()
메서드를 사용하여 크기를 조절하거나 왜곡을 관리할 수 있습니다. 예를 들어 표시 객체를 확장하거나 축소할 수 있습니다. 특정 위치를 확대하거나 축소할 수도 있습니다. 크기 조절 변형은 표시 객체의 회전 및 평행 이동 시 자동으로 수행됩니다.
변형 순서도 중요합니다. 크기 조절 후 평행 이동 변형을 수행할 때는 평행 이동 후 크기 조절 변형을 수행할 때와 다른 효과가 나타납니다.
매개 변수
xScale:Number — x축을 따라 객체의 크기를 조절하는 데 사용되는 승수입니다.
| |
yScale:Number — y축을 따라 객체의 크기를 조절하는 데 사용되는 승수입니다.
| |
zScale:Number — z축을 따라 객체의 크기를 조절하는 데 사용되는 승수입니다.
|
관련 API 요소
prependTranslation | () | 메서드 |
public function prependTranslation(x:Number, y:Number, z:Number):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
x, y 및 z축을 따라 위치를 조정하는 증분 평행 이동을 Matrix3D 객체의 앞에 추가합니다. 표시 객체에 Matrix3D 객체를 적용하면 Matrix3D 객체의 다른 변형이 수행되기 전에 평행 이동이 수행됩니다.
평행 이동은 표시 객체가 현재 위치에서 x, y 및 z축을 따라 이동할 거리를 지정합니다. prependTranslation()
메서드는 세 축(x,y,z)을 따른 세 개의 증분 변경 집합으로 평행 이동을 설정합니다. 특정 축에만 평행 이동을 적용하려면 다른 매개 변수를 0으로 설정합니다. 매개 변수가 0이면 해당 축을 따라 변경하지 않는 것입니다.
평행 이동 변경은 절대 기준이 아닙니다. 이 효과의 기준은 객체(원래 위치와 방향의 기준 틀)입니다. 변형 행렬에 절대 변경을 적용하려면 recompose()
메서드를 사용합니다. 변형 순서도 중요합니다. 평행 이동 후 회전 변형을 수행할 때는 회전 후 평행 이동 변형을 수행할 때와 다른 효과가 나타납니다. prependTranslation()
을 사용하면 표시 객체가 다른 변형에 관계없이 자신이 향하는 방향으로 계속 이동합니다. 예를 들어 표시 객체가 양의 x축 방향을 향하고 있으면 객체의 회전에 관계없이 prependTranslation()
메서드에 지정된 방향으로 계속 이동합니다. 평행 이동을 다른 변형보다 나중에 적용하려면 appendTranslation()
메서드를 사용합니다.
매개 변수
x:Number — x축을 따른 증분 평행 이동입니다.
| |
y:Number — y축을 따른 증분 평행 이동입니다.
| |
z:Number — z축을 따른 증분 평행 이동입니다.
|
관련 API 요소
예제 ( 예제 사용 방법 )
package { import flash.display.MovieClip; import flash.display.Sprite; import flash.geom.*; import flash.events.MouseEvent; public class Matrix3DprependTranslationExample extends MovieClip { private var ellipse:Sprite = new Sprite(); public function Matrix3DprependTranslationExample():void { ellipse.x = this.stage.stageWidth / 2; ellipse.y = this.stage.stageHeight - 100; ellipse.z = 1; ellipse.graphics.beginFill(0xFF0000); ellipse.graphics.lineStyle(2); ellipse.graphics.drawEllipse(0, 0, 60, 50); ellipse.graphics.endFill(); addChild(ellipse); ellipse.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler); ellipse.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler); } private function mouseOverHandler(e:MouseEvent):void { if(ellipse.y > 0) { ellipse.transform.matrix3D.prependTranslation(0, -10, 0); } } private function mouseOutHandler(e:MouseEvent):void { if(ellipse.y > 0) { ellipse.transform.matrix3D.prependTranslation(0, -10, 0); } else { ellipse.transform.matrix3D.prependTranslation(0, (this.stage.stageHeight - 100), 0); } } } }
recompose | () | 메서드 |
public function recompose(components:Vector.<Vector3D>, orientationStyle:String = "eulerAngles"):Boolean
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
변형 행렬의 평행 이동, 회전 및 크기 조절 설정을 설정합니다. 표시 객체의 회전 속성이나 Matrix3D 객체의 회전 메서드는 점증적인 변경을 적용하지만 recompose()
메서드는 절대 변경을 적용합니다. recompose()
메서드는 행렬 변형을 덮어씁니다.
절대 부모 기준 틀을 사용하여 행렬의 변형을 수정하려면 decompose()
메서드를 사용하여 설정을 검색하고 적절히 변경합니다. 그런 다음 recompose()
메서드를 사용하여 Matrix3D 객체를 수정된 변형으로 설정합니다.
recompose()
메서드의 매개 변수는 변형에 사용된 방향 스타일을 지정합니다. 기본 방향은 각 축에 대한 서로 다른 세 개의 회전각으로 방향을 정의하는 eulerAngles
입니다. 회전은 차례대로 수행되며 다른 회전의 축을 변경하지 않습니다. 표시 객체의 축 회전 속성은 오일러 각 방향 스타일 변형을 수행합니다. 다른 방향 스타일 옵션은 axisAngle
및 quaternion
입니다. 축 각 방향에서는 축과 각의 조합을 사용하여 방향을 결정합니다. 객체가 회전하는 중심 축은 방향을 나타내는 단위 벡터입니다. 각은 벡터 주위로 회전할 크기를 나타냅니다. 또한 방향은 표시 객체가 향하는 위치를 결정하고, 각은 위쪽을 가리키는 방향을 결정합니다. appendRotation()
및 prependRotation()
메서드에는 축 각 방향이 사용됩니다. 쿼터니언 방향에는 복소수 및 벡터의 네 번째 요소가 사용됩니다. 세 개의 축(x,y,z)과 회전각(w)을 사용하여 방향을 나타냅니다. interpolate()
메서드에는 쿼터니언이 사용됩니다.
매개 변수
components:Vector.<Vector3D> — Matrix3D 객체의 평행 이동, 회전 및 크기 조절 요소를 대체하는 세 Vector3D 객체의 Vector입니다.
| |
orientationStyle:String (default = "eulerAngles ") — 행렬 변형에 사용되는 방향 스타일을 결정하는 선택적 매개 변수입니다. 세 가지 방향 스타일은 eulerAngles (상수 EULER_ANGLES ), axisAngle (상수 AXIS_ANGLE ) 및 quaternion (상수 QUATERNION )입니다. 여러 방향 스타일에 대한 자세한 내용은 geom.Orientation3D 클래스를 참조하십시오.
|
Boolean — components Vector의 Vector3D 요소 중 하나라도 없거나 null인 경우 false 를 반환합니다.
|
관련 API 요소
transformVector | () | 메서드 |
public function transformVector(v:Vector3D):Vector3D
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
변형 행렬을 사용하여 한 좌표 공간에서 다른 좌표 공간으로 Vector3D 객체를 변형합니다. 반환된 Vector3D 객체는 변형이 적용된 새 좌표를 보유합니다. 평행 이동을 비롯한 모든 행렬 변형이 Vector3D 객체에 적용됩니다.
transformVector()
메서드의 결과를 표시 객체의 위치에 적용하면 표시 객체의 위치만 변경되고 표시 객체의 회전 및 크기 조절 요소는 그대로 유지됩니다.
참고: 이 메서드는 전달된 Vector3D의 w 구성 요소를 자동으로 1.0으로 설정합니다.
매개 변수
v:Vector3D — 변형될 좌표를 보유하는 Vector3D 객체입니다.
|
Vector3D — 좌표가 변형된 Vector3D 객체입니다.
|
관련 API 요소
transformVectors | () | 메서드 |
public function transformVectors(vin:Vector.<Number>, vout:Vector.<Number>):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
변형 행렬을 사용하여 한 좌표 공간에서 다른 좌표 공간으로 숫자의 Vector를 변형합니다. tranformVectors()
메서드는 vin
Vector 객체의 숫자를 세 개씩 읽어 3D 좌표(x,y,z)로 인식하고 변형된 3D 좌표를 vout
Vector 객체에 배치합니다. 평행 이동을 비롯한 모든 행렬 변형이 vin
Vector 객체에 적용됩니다. transformVectors()
메서드를 사용하면 3D 객체를 메쉬로 렌더링하고 변형할 수 있습니다. 메쉬는 객체의 모양을 정의하는 꼭지점의 컬렉션입니다.
매개 변수
vin:Vector.<Number> — 각각의 3개 숫자가 변형될 3D 좌표(x,y,z)를 나타내는 숫자 Vector입니다.
| |
vout:Vector.<Number> — 각각의 3개 숫자가 변형된 3D 좌표(x,y,z)를 나타내는 숫자 Vector입니다.
|
관련 API 요소
transpose | () | 메서드 |
public function transpose():void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10, AIR 1.5 |
현재 Matrix3D 객체를 행과 열이 교환된 행렬로 변환합니다. 예를 들어 현재 Matrix3D 객체의 rawData
에 1,2,3,4,11,12,13,14,21,22,23,24,31,32,33,34
라는 16개의 숫자가 들어 있는 경우 transpose()
메서드는 요소를 4개씩 한 행으로 읽고 행을 열로 바꿉니다. 결과 행렬의 rawData
는 1,11,21,31,2,12,22,32,3,13,23,33,4,14,24,34
입니다.
transpose()
메서드는 현재 행렬을 전치 행렬로 바꿉니다. 현재 행렬을 변경하지 않고 행렬을 전치하려면 clone()
메서드를 사용하여 현재 행렬을 복사한 다음 복사본에 transpose()
메서드를 적용합니다.
직교 행렬은 전치 행렬이 역행렬과 같은 정방 행렬입니다.
Tue Jun 12 2018, 03:17 PM Z