Transformation_1

대인공·2022년 8월 9일
0

OpenGL

목록 보기
5/8
post-thumbnail

개요

  • 화면에서 오브젝트를 임의의 위치에 그려낼 방법
    - Vertex buffer object의 Vertex position값을 매번 수정한다. -> 가능하지만 비효율적이다.
    - 선형 변환(Linear transformation)을 이용한다.

선형 변환 (Linear transformation)

- 가장 기초적이고 일반적인 방법
- 기본적인 선형대수에 대한 이해가 필요하다.

간단한 선형대수

1. Vector

- 크기와 방향을 갖는 값
- 좌표계 상의 벡터 : 여러 차원의 좌표값으로 표현
- 덧셈 / 뺄셈 : 각 차원의 원소별로 계산 가능

  • 스칼라 곱 : 각 차원에 스칼라 값을 곱함

  • 벡터의 크기(길이) 계산 : 각 좌표값의 제곱근의 합의 제곱근

  • 단위벡터(Unit Vector) : 길이가 1인 벡터

  • 벡터의 내적(Inner produce)
    - 연산자를 .(점)으로 표기하기에 Dot produce라고도 함
    - 두 벡터의 길이의 곱 * cos(두 벡터의 사잇각)
    - 각 차원별 좌표값의 곱의 합
    - 곱의 결과는 스칼라 값
    - 기하학적 의미 : 투영(projection) ,두개의 벡터중 하나가 단위벡터일 경우 단위벡터가 아닌 벡터에서 단위벡터에게 수직으로 직선을 내리면 단위벡터는 내적이 된다.

    - 내적의 응용법

    • 사잇각 구하기 : theta = acos(v w / (|v| |w|))
      두 벡터가 수직인 경우는 내저그이 값은 0
  • 벡터의 외적(Cross product)
    - 3차원 벡터에서만 정의
    - 곱의 결과도 3차원 벡터
    - ex) a(길이) * b(길이) a(길이)에서 b(길이)로 향하는 방향으로 손을 감으면 엄지의 방향이 외적의 방향이다.
    - 기하학적 의미

    • 길이 : 두 벡터의 길이의 곱 * sin(두 벡터의 사잇각)
      -> 즉, 두 벡터가 만들어 내는 평행사변형의 넓이
    • 방향 : 두 벡터와 수작한 벡터

    -교환 법칙이 성립하지 않음

    Anti - symmetric : A B = -B A

    - 외적의 응용법

    • 두 3차원 벡터와 수직하는 벡터 구하기
      직교화(Orthogonalization)
  • Vector Multiplication


    • 각각의 축에 대해 계산을 할때는 그 축은 계산에 포함되지 않는다.

2. Matrix

- 행(row)과 열(column)로 이뤄진 숫자 묶음으로 구성된값
- 덧셈/뺄셈: 같은 행과 열에 위치한 원소별로 연산
- 스칼라곱 : 스칼라값을 모든 원소에 곱셈 연산


  • A * B
    - A의 column갯수와 B의 row갯수가 일치해야 계산가능
    - (i, j)의 값 : A의 i번째 행 벡터 (row vector) 와 B의 j번째 열 벡터 (column vector) 간의 내적
    - 교환 법칙이 성립하지 않음

선형 변환

- 선형 : f(ax + by) = a f(x) + b f(y)

  • 행렬식에서 벡터의 선형 변환
    - f(x) = A x
    ->즉, 선형 변환을 나타내는 행렬과 벡터간의 곱

  • 여러개의 선형 변환 적용은 결국 하나의 선형 변환으로 바꿀 수 있다.

    f(x) = A x
    g(x) = B x
    -> f(g(x)) = A(b x) = C x

동차 좌표계 (Homogeneous Coordinates)

- 표현하고자 하는 차원수보다 한차원 늘어난 벡터로 좌표를 표시하는 방법

  • 마지막 원소 값을 1로 두면 '점'을 표현
  • 3D좌표 (x, y, z)는 4차원 벡터 (x, y, z, 1)
  • 동차 좌표계에서 (wx, wy, wz, w)는 (x, y, z, 1)과 같은 위치이다.

-> 이렇게 하는 이유
- 평행 이동을 선형 변환으로 표현할 수 있게 됨
- 원근 투영을 선형 변환으로 표현할 수 있게 됨



  • 단위 행렬 (Identity Matrix)
    - 행렬 곱셈의 항등원

    A i = i A = A

- 대각선의 원소값은 1, 나머지는 0 / 출력 벡터는 입력벡터와 동일해진다.




  • Scaling
    - 원점을 기준으로 벡터의 크기를 확대하거나 축소
    - 대각 성분에 각 차원별 배율을 지정한 행렬로 표현





  • 평행 이동 행렬(Translation)
    - 4번째 열 벡터에 평행이동 벡터를 가진 행렬로 표현

단위행렬의 끝에 기입



  • 회전
    - x축에 대한 회전

    - y축에 대한 회전

    - z축에 대한 회전

    * 각 축에 대한 회전일 경우 그 축에는 1이 들어가있다.

    - 임의의 축 (Rx, Ry, Rz)에 대한 회전

    • 골드만 회전 행렬


  • 직교 행렬(Orthogonal Matrix)
    - 다음 조건을 만족하는 행렬을 Orthogonal Matrix라고 한다.

    • 각 column vector(혹은 row vector)의 길이가 1
    • column vector간의 내적값이 0(수직)

    Inverse(A) = Transpose(A)

    • Rotation matrix는 Orthogonal matrix


  • Combine Matrices
    - 주어진 벡터를 두배로 확대한 다음 (1, 2, 3)만큼 평행이동 시키는 행렬

    - 여러 선형변환을 연속으로 적용시키는 것을 행렬 곱으로 만들어진 하나의 선영변환으로 나타낼 수 있다.

profile
이제 막 시작하는 유니티 클라이언트

0개의 댓글

관련 채용 정보