Post

Open Graphics Library 4

1. Freeglut Object와 Rendering

  • Freeglut Object: OpenGL에서 자주 사용되는 3D 객체들을 쉽게 렌더링할 수 있도록 제공하는 라이브러리로, 구, 정육면체, 원기둥 등을 기본 함수로 제공합니다.
    • 예: glutSolidSphere, glutWireSphere, glutSolidCube, glutWireCube
  • Rendering 방식:
    • Wireframe Rendering: 물체의 겉면은 그리지 않고, 점(vertex)과 선(edge)을 이용해 물체의 구조를 나타냅니다.
    • Solid Rendering: 물체의 면(face)을 그려 색상, 질감 등을 표현하는 방식입니다.

2. Homogeneous Coordinates (동차좌표)

  • Point : 수학적으로 위치를 나타내는 요소
  • Vertex : 다각형을 구성하는 기본 단위
  • 동차좌표의 정의: 점 (x, y, z)는 동차좌표로 [x, y, z, 1]로 표현됩니다.
  • 동차좌표의 사용 이유:
    • 변환(transformation) 시 행렬 곱으로 일관되게 표현할 수 있어 여러 변환을 한 번에 처리하는 데 유리합니다.
    • 여러 개의 변환(복합 변환)을 행렬 곱을 하나의 행렬 곱 형태로 일관되게 바꿀수 있다.

3. Affine Transformations (아핀 변환)

  • 아핀 변환: 컴퓨터 그래픽에서 가장 흔히 사용되는 변환으로, 이동(Translation), 크기 조절(Scaling), 회전(Rotation), 비틀기(Shear) 등을 포함합니다.
  • 아핀 변환의 특징:
    1. 행렬로 표현이 가능하며, 여러 변환을 하나의 행렬로 통합할 수 있습니다.
    2. 직선성평행성이 보존됩니다.

Translation (이동 변환)

  • 물체를 특정 방향으로 이동시키는 변환입니다.
  • OpenGL에서는 glTranslatef(p, q, r) 함수를 사용하여 x, y, z 축 방향으로 p, q, r만큼 이동시킵니다.

Scaling (크기 변환)

  • 물체의 크기를 확대하거나 축소하는 변환입니다.
  • non-rigid-body transformation 입니다.
  • Uniform Scaling: 모든 축에 대해 동일한 배율로 크기 변환.
  • Differential Scaling: 하나라도 배율이 다름.
  • fixed point가 존재합니다.
  • OpenGL에서 glScalef(u, v, w)를 사용하여 x, y, z 축 방향으로 각각 u, v, w배만큼 크기 조절합니다.

Shear (전단 변환)

  • x축 전단: 물체의 각 점의 x좌표가 y좌표에 따라 선형적으로 변화합니다.
    • \( x’ = x + h \cdot y \), \( y’ = y \)
    • h는 전단 인수 (shearing factor)입니다.
  • y축 전단: x좌표는 변화하지 않고, y좌표가 x좌표에 따라 선형적으로 변화합니다.
    • \( x’ = x \), \( y’ = y + g \cdot x \)
    • g는 전단 인수입니다.

Rotation (회전 변환)

  • 물체를 특정 축을 기준으로 회전시키는 변환입니다.
  • fixed point가 존재합니다.
  • 2D 회전: 원점을 중심으로 반시계 방향 또는 시계 방향으로 회전합니다.

4. 3D 회전 (Rotation in 3D)

  • 회전축: 회전은 특정 축을 기준으로 회전하게 되며, 이 축을 중심으로 점이 회전합니다. 회전축이 되는 점은 이동하지 않습니다.
  • 오른손 법칙: 회전 방향은 오른손 엄지를 회전축으로 삼아 나머지 네 손가락이 감기는 방향, 즉 반시계 방향으로 회전합니다.

#### 축에 따른 회전

  • z축 회전: 2D 회전처럼 x축과 y축 상의 좌표가 변하고, z축은 변하지 않습니다.
    • \( x’ = x \cdot \cos(\theta) - y \cdot \sin(\theta) \)
    • \( y’ = x \cdot \sin(\theta) + y \cdot \cos(\theta) \)
    • \( z’ = z \)
  • x축 회전: y축과 z축 상의 좌표가 변하고, x축은 변하지 않습니다.
  • y축 회전: x축과 z축 상의 좌표가 변하고, y축은 변하지 않습니다.

#### OpenGL에서 회전

  • glRotatef(angle, x, y, z)는 원점에서 (x, y, z) 방향으로 angle만큼 회전하는 행렬을 생성합니다.

5. 변환의 유형 (Types of Transformations)

유클리드 변환 (Euclidean Transformation)

  • Rigid body transformation이라고도 하며, 객체의 크기와 모양을 유지하는 변환입니다. 크기 조절이나 변형은 일어나지 않습니다.
  • 예: Translation, Rotation

Similarity 변환 (닮음 변환)

  • 유클리드 변환에 스케일링이 추가된 변환입니다.
  • 예: Translation + Rotation + Scaling

Affine 변환 (Affine Transformation)

  • Translation, Rotation, Scaling, Shearing (전단), Reflection (반사) 등의 연산을 허용하는 변환입니다.
  • Affine 변환의 특징: 직선성, 평면성, 평행성이 유지됩니다.
  • Affine 변환의 조합: 두 개의 Affine 변환을 조합하면 또 다른 Affine 변환이 되며, 변환 행렬은 곱셈 순서에 따라 달라집니다.
  • 직선은 변환 후에도 직선으로 남고, 평행한 직선들은 변환 후에도 평행을 유지합니다.
This post is licensed under CC BY 4.0 by the author.