[Unity] 5. 행렬

홍예주·2022년 1월 12일
0

Unity - 수학,물리

목록 보기
5/7

1. 강의 정리

2. 실습

1) localToWorldMatrix

Matrix4x4 matrix = transform.localToWorldMatrix;

한 위치를 로컬 공간에서 월드 공간으로 변환하는 행렬을 나타낸다.

2) 변환행렬

  • TRS 함수

Quaternion rot = Quaternion.Euler(45, 0, 45);
Vector3 tran = new Vector3(2, 1, 5);
Vector3 scal = new Vector3(10, 10, 10);


worldMat = Matrix4x4.TRS(tran, rot, scal);

TRS 연산을 해주는 함수

  • 이동행렬, 회전행렬, 크기변환행렬

worldMat = Matrix4x4.Translate(new Vector3(2, 1, 5)) Matrix4x4.Rotate(rot) Matrix4x4.Scale(new Vector3(10,10,10));

이동행렬, 회전행렬, 크기변환행렬로 TRS 연산

3) Quaternion

Quaternion rot = Quaternion.Euler(45, 0, 45);

오일러각이 (45,0,45)인 값을 쿼터니언으로 변환해서 사용하겠다.

  • 쿼터니언
    - 변환행렬에 회전행렬을 이용한다고 했음(오일러 각 - 0~360도 각도를 이용한 것)
    - 하지만 오일러 각 이용시 짐벌락이라는 현상 일어남
    - 짐벌락 : 각 회전에 대해서 서로가 종속적이어서 생기는 문제
    - 쿼터니언(사원수) 개념 도입해서 짐벌락 문제 해결
    - 회전에 관한것은 전부 쿼터니언을 걸쳐서 연산을 해야함

4) 변환행렬 -> 이동행렬, 회전행렬, 크기변환행렬

	Vector3 position = matrix.GetColumn(3);
        Debug.Log("=== Position ===");
        Debug.Log(position);

        Quaternion rotation = Quaternion.LookRotation(
            matrix.GetColumn(2),
            matrix.GetColumn(1)
        );

        Debug.Log("=== Rotation ===");
        Debug.Log(rotation.eulerAngles);

        Debug.Log("=== Scale ===");
        Vector3 scale = new Vector3(
            matrix.GetColumn(0).magnitude,
            matrix.GetColumn(1).magnitude,
            matrix.GetColumn(2).magnitude
        );
        Debug.Log(scale);
profile
기록용.

0개의 댓글

관련 채용 정보