자, 글을 보기 전에 이 글을 먼저 보세요 (http://ko.wikipedia.org/wiki/%ED%96%89%EB%A0%AC)


자세한 설명은 위 링크에 더 많이 나와있고, 전 실제 Matrix3D가 어떻게 돌아가는지를 살짜쿵 맛보겠습니다. 내용이 많아질거 같아 설명은 링크에 양보하겠습니다.
(Matrix 로 설명을 할까 하다가, 요즘 플래시 11 + 3d 스터디를 시작했기 때문에 Matrix3D 로 설명을 하겠습니다.)

Matrix3D 요소(as 레퍼런스의 이미지를 가져왔습니다)


Matrix3D 는 4*4 행렬을 사용합니다


4 * 4 행렬이기 때문에 총 원소(이 표현이 맞는지 모르겠네요)는 16개가 됩니다. Matrix 와 달리 16개나 되는 숫자를 넣다보니 Vector.<Number> 를 생성자의 인자로 갖게 됩니다.

그리고 Vector 의 원소는 1행의 1열부터 1행2열, 1행 3열, 1행 4열, 2행 1열..... 이런 순서로 채우게 됩니다

예를 들어,

var v:Vector.<Number> =  Vector.<Number>([0,1,2,3,   4,5,6,7,    8,9,10,11,      12,13,14,15])
var m:Matrix3D =  new Matrix3D(v)

이렇게 넣는다면,  

0  4  8   12
1  5  9   13
2  6  10  14
3  7  11  15

이렇게 채운다는 말이죠...

디스플레이 오브젝트의 기본값(scaleX = scaleY = scaleZ = 1, x = y = z = 0)으로 넣는다면

1  0  0  0
0  1  0  0
0  0  1  0
0  0  0  1

이렇게 될겁니다. 맨마지막(그림에서 tw)이 1인 이유는 항등행렬에 만족하기 위해서입니다. 이건 나중에 기회가 되면...

 

자, 이걸 위치를 이동시켜보죠. x, y 를 각각 100 씩 이동시켜본다고 하면...

1  0  0  100
0  1  0  100
0  0  1  0
0  0  0  1 

이 되어야 한다는 겁니다


하지만 이런걸 대신 해주는게 바로 Matrix3D 입니다. 여러가지 행렬연산을 해주는 메소드들이 있죠... 예를 들어 위치이동이라면 appendTranslation($x:Number, $y:Number, $z:Number):void 이 바로 그놈입니다


var a:Matrix3D = new Matrix3D();
a.appendTranslation(100,200,300);
trace(a.rawData);

//////////////////////////

1,0,0,0,0,1,0,0,0,0,1,0,100,200,300,1

이렇게 나온단 얘기입니다... 이 외에도 많은 메소드 들이 있는데 그 녀석들이 복잡한 행렬연산을 대신하기 위해 있습니다.




뭐, 어렵죠? 저도 어렵습니다

그러니 어려운 행렬 계산은 컴퓨터에 맞기고, 우리는 3d 공부나 하는 것이... 아 3d가 더 어려운가...

암튼 내용이 길어지니 오늘은 Matrix3D 맛배기만... (사실, 저도 행렬을 잘 몰라 공부하며 쓴거라... 더 공부해야 2편을 쓸 수 있다는...)


p.s. 웬지 써놓고 보니, 자주 쓰이는 플래시 수학은 아닌듯하다는... 게다가 스터디에도 딱히 필요 없을 것도 같다는...


 
Posted by 미나토
: