Iso Metric은 View 관점에서 x, y, z 축이 120도를 이루는 좌표계를 말합니다.


저는 편의상 Flash의 좌표계를 x, y Iso 상의 좌표를 u, v, z라고 합니다.


이때 xy 좌표를 uvz로 변환하는 공식은 다음과 같습니다.


(z는 기본적으로 추가되야합니다. 기본값은 0이겠죠)


u =  x + y + z

v = -x + y + z

z = z


반대로 uvz를 xy로 변환하는 공식입니다.


x = u - v

y = ( ( u + v ) / 2 ) - z


제가 유틸로 쓰고 있는 메소드입니다.


static public function toUVZ( $x: int, $y: int, $z: int = 0, $target: UVZPoint = null ): UVZPoint
{
     var point: UVZPoint = $target;
     
     if( point == null )
          point= new UVZPoint;
     
     point.u = $y + ( $x >> 1 ) + $z;
     point.v = $y - ( $x >> 1 ) + $z;
     point.z = $z;
     
     return point;
}


uvz를 xy 로 변환하는 메소드입니다.


static public function toXY( $u: int, $v: int, $z: int = 0, $target: XYPoint = null ): XYPoint
{
     var point: XYPoint = $target;
     
     if( point == null )
          point = new XYPoint;
     
     point.x = $u - $v;
     point.y = ( ( $u + $v ) >> 1 ) - $z;
     
     return point;
}


여기서 $target으로 받는 파라미터는 팁입니다.


연산이 많아질 경우 매번 새로운 객체를 생성하는 것은 상당한 cpu 부하가 필요합니다.


재사용을 위해서 결과값을 받을 객체를 전달받아서 퍼포먼스 향상을 꾀하는 것이죠.


Iso 엔진의 기본인 좌표계 연산이었습니다~


(뭐 꼭 제가 삽질 많이해서 올리는건 아닙니다 -_-a)





for the Better.

저작자 표시 비영리 동일 조건 변경 허락
신고

+ Recent posts

티스토리 툴바