Geometric Transformations
[ Geometric Transformations ]
[ 2D Geometric Transformations ]
[ 2D Translation ]
단일 좌표에 단순히 offset을 더하는 것.
Translation은 모양이 변화하지 않고, 위치만 변화하므로 rigid-body transformation이라고도 한다.
[ 2D Rotation ]
Need to specify to rotation axis and a rotation angle.
angle의 positive value : counterclockwise(ccw).
φ를 각으로하는 삼각형을 회전시켜 (φ + θ)를 각으로하는 삼각형이 되었으므로, 회전이후의 좌표 x', y'는 위와같이 변경된다. 아래 x', y' 식을 위에 다시 넣어서 바꾸면
다음과 같이 유도할 수 있다.
[ Arbitrary pivot position ]
임의의 점에 대해서도 Rotation할 수 있는데, 원점으로 이동시켜 Rotation한 결과에 다시 위치를 복귀시키면 된다.
[ 2D Scaling ]
x' = x · sx, y' = y · sy
원점을 기준으로 scaling 하므로, 위치또한 변경된다.
[ Scaling with the fixed point ]
임의의 점에 대해 Rotation한 것과 비슷하다.
원점을 기준으로 translation하고, scaling한 뒤 원래 위치로 다시 translation.
[ Homogeneous Coordinates ]
Translation은 단순히 offset을 더하는 것이므로, R, S와 달리 덧셈으로 나타내야 한다.
→ T, R, S, (+ fixed point)를 적절히 조합하여 사전에 하나의 행렬로 나타낼 수 없다. 그러면 연산 자체가 비효율적이다.
그래픽카드의 최대장점인 SIMD 연산의 이점을 활용해야 하기 때문이다.
그러면 전부 곱으로 나타내야 하는데, 이를 위해 3x3로 나타내는 Homogeneous Coordinates를 사용해야한다.
- 2D Translation using Homogeneous Coordinates
Translation을 곱으로 나타낼 수 있게 된다.
- 2D Rotation using Homogeneous Coordinates
- 2D Scaling using Homogeneous Coordinates
[ Inverse Translation ]
직관적으로 알 수 있음.
[ Inverse Rotation ]
직관적으로, θ 대신 -θ를 대입하면 유도할 수 있다.
cos은 특성상 y축을 기준으로 대칭이므로 그대로, sin은 그렇지 않으므로 부호가 반대이다.
특징 : Inverse rotation은 Transpose matrix(전치행렬)와 동일함
[ Inverse Scaling ]
직관적으로 알 수 있음.
[ 2D Composite Transformations ]
- Composite Translations
- Composite Rotations
- Composite Scalings
Homogeneous Coordinates를 사용하면, 하나의 행렬로 사전에 계산해두어, 수많은 vertices에 대해서 빠르게 SIMD 연산을 활용하는 것이 가능하다.
이제 Homogeneous Coordinates를 기본적으로 사용한다고 가정하여 확장해보자.
- General 2D Pivot-Point Rotation
- General 2D Fixed-Point Scaling
- General 2D Scaling Directions
x축, y축 방향의 scaling factor가 아니라 임의의 방향으로의 scaling factor에 대해 scaling.
좌표축을 -θ만큼 rotation시키는 효과를 얻기 위해, object를 +θ만큼 rotation한 뒤, scaling하고 다시 -θ 만큼 rotation시키면 된다.
결과.
[ Matrix Concatenation Properties ]
Matrix Multiplication에서, 결합법칙은 성립한다.
하지만, 교환법칙은 성립하지 않는다.
특별한 경우, 같은 종류의 Transformations 끼리는 교환법칙이 성립한다.
→ [1] 2개의 연속한 Rotations 같은 경우.
또한, 하나 더 존재한다.
→ [2] Rotation과 uniform scaling의 경우.
[ General 2D Composite Transformations and Computational Efficieny ]
2D에서 T, R, S의 어떤 조합을 하여도 아래 하나의 행렬로 표현가능하다.
[ Other 2D Transformations ]
- Reflection
[1] x축에 대한 reflection
[2] y축에 대한 reflection
[3] 원점에 대한 reflection
특징은, 180' rotation과 동일함.
[4] y=x에 대한 reflection
임의의 방향으로의 scaling과 approach가 동일하다.
축을 y = x로 변경하기 위해, -θ (clock wise) 방향으로 45' rotation한 뒤, x축에 대해 reflection하고 다시 ccw로 θ방향인 45' rotation하는 것.
직관적으로는, x 와 y의 값을 서로 바꿔주는 것.
[5] y=-x에 대한 reflection
[4]에서, x축에 대해 reflection하는 대신, y축에 대해 reflection하는 것만 변경해주면 된다.
- Shear
방향을 바꾸는 것.
[1] x-direction shear
이동한 y만큼 비례해서 x값을 이동시켜 주는 것. y는 그대로
[2] x-direction shear relative to the y=yref
[3] y-direction shear relative to the lin x=xref
[ 3D Geometric Transformations ]
Homogeneous Coordinates를 사용하므로, 4x4의 행렬사용.
[ 3D Translation ]
2D Translation에서 z축이 추가되어 확장된 형태.
Homogeneous Coordinates를 사용하므로 4x4의 행렬 곱으로 연산할 수 있다.
[ 3D Rotation ]
회전에는 항상 '축'을 기준으로 해야하므로 축이 필요하다.
2D Rotation에서는, 보이지 않는 가상의 z축을 기준으로 Rotation을 한 것.
3D Rotation에서는 x, y, z축을 기준으로 각각 Rotation 가능하다.
[ z-axis Rotation ]
기존 2D Rotation에서 z축을 확장한 것과 동일하다.
[*]
축을 변경하는 것은, 기존의 x, y, z축들을 shift하면 된다.
x-axis rotation을 얻으려면 z-axis rotation에서, x대신 y로, y대신 z로, z대신 x로 변경하면된다.
y-axis rotation을 얻으려면 x-axis rotation에서, 똑같이 x대신 y로, y대신 z로, z대신 x로 변경하면된다.
[ x-axis Rotation ]
행렬로 나타내면
[ y-axis Rotation ]
행렬로 나타내면
임의의 A축에 대한 3D Rotation 행렬을 나타내라고 하면, 2D Rotation을 유도하는 것만 이해하고 있으면 축을 확장하여 (x대신 y, y대신 z, z대신 x)로 변경하면 3D 임의의 A축에 대한 3D Rotation을 유도해낼 수 있는 것이다 !
또는, 3D z-axis rotation 행렬을 알고있으면 대각선 우측 아래로 cos과 sin을 한칸씩 이동시키면 된다.
- Inverse Rotation
θ대신 -θ를 대입하면 얻을 수 있음.
cos은 y축에 대해 대칭으로 영향을 주지않고, sin에만 영향을 주게된다.
대각선에 대해 대칭이므로 Tranpose와 동일한 특징이 있다.
[ General 3D Rotations ]
임의의 축에대한 Rotation도 가능하다.
[1] rotation axis가 좌표축과 평행한 경우
Translation후, Rotation하고 다시 원래 자리로 Translation해주면 된다.
[2] rotation axis가 좌표축과 평행하지 않은 경우
유도하는 과정이 길어 생략... R(b) * R(a)
[3] 비직관적이지만, 더 간단한 방법
[ 3D Scaling ]
- 임의의 fixed position (xf, yf, zf)에 대한 scaling
[ Other 3D Transformations ]
- 3D Reflections
z-axis 에 대한 reflection
특징으로는, 이후에 right-handed system을 left-handed system으로 변경하는데 사용될 수 있음.
left-handed system으로 변경되면, z값이 모니터에서 얼마나 깊게 존재하는지를 의미.
- 3D Shears
z-axis shearing transformation
z는 변화가 없지만, x, y가 밀리게 됨.
[ Affine Transformations ]
평행한 라인들은 변환이후 평행함이 유지고, 유한한 점들 또한 유한한점으로 매핑되는 특징을 가짐.
- Translation, Rotation, Scaling, Reflection, Shear가 해당.
좌표계 변환에 사용된다.
Translation, Rotation, Reflection은 평행한 라인뿐만 아니라, 각도와 길이까지 보존하는 특징을 지닌다.
[ Reference ]
Computer Graphics with OpenGL 4th edition, Hearn, Baker