Post

Open Graphics Library 7

1. 컴퓨터 그래픽스 - 곡선과 곡면

  • 기존에는 주로 직선과 평면 다각형을 사용하였으나, 실제 세계에서는 곡선과 곡면이 필요합니다.
  • 곡선은 직선과 곡선 조각으로 구성되며, OpenGL에서 직선은 GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP 등을 통해 그릴 수 있습니다. 곡선은 보통 근사값으로 그려집니다.

    2. 객체 표현 방식

    1. 명시적 표현 (Explicit):
    • 종속변수와 독립변수의 관계를 명시적으로 나타냅니다. (예: \(y = f(x)\) 또는 \(x = g(y)\))
    • 모든 곡선을 표현할 수는 없습니다. 예를 들어, 원은 하나의 방정식으로 표현이 어려움.
  1. 암시적 표현 (Implicit):
    • 3D에서는 곡면을 \(f(x, y, z) = 0\)로 표현. 예: 평면 (\(ax + by + cz + d = 0\)), 구 (\(x^2 + y^2 + z^2 - r^2 = 0\))
    • 즉, \(f(x, y, z) = 0\)이면 점이 곡선 위에 있으며, 아니라면 곡선 위에 있지 않다는 것을 의미합니다.
    • 이러한 방정식 형태로는 주어진 \(x\)에 대해 곡선 위의 특정 \(y\) 값을 찾는 분석적인 방법을 제공하지 않습니다.
  2. 파라메트릭 표현 (Parametric):
    • 곡선을 독립 변수 \(t\)를 사용해 표현. 예: 원의 경우 \(x = r \cos(t), y = r \sin(t), t \in [0, 2\pi]\)
    • 파라메트릭 표현은 수학적으로 곡선을 그리기 쉬워 컴퓨터 그래픽에서 자주 사용됩니다.

      3. 베지에 곡선 (Bezier Curve)

      1
      2
      
       - **제어점 (Control Points)**를 사용하여 곡선의 모양을 제어.
       - 베지에 곡선은 보간(Interpolating)과 근사(Approximating) 알고리즘으로 생성되며, `제어점`들을 통해 곡선의 형상을 조정할 수 있음.
      

선형 (1차) 베지에 곡선

  • 두 개의 제어점 \(P_0\)와 \(P_1\)를 이용해 직선 세그먼트로 표현.
  • 곡선 방정식: \(c(u) = (1 - u)P_0 + uP_1\), \(0 \leq u \leq 1\)
  • 1차 베지에 곡선의 혼합 함수는 베르스타인 다항식으로, \(B_{0,1}(u) = 1 - u\), \(B_{1,1}(u) = u\)입니다.
  • 특징:
    • 블렌딩 함수인 베르스타인 다항식 \(B_{0,1}(u)\)는 \(u\)가 0에서 1로 증가하면서 1에서 0으로 감소하며, \(B_{1,1}(u)\)는 그 반대로 변화합니다.
    • 두 베르스타인 다항식 \(B_{0,1}(u)\)와 \(B_{1,1}(u)\)는 모두 \(0 \leq u \leq 1\) 범위에서 0과 1 사이의 값을 가지며, 항상 \(B_{0,1}(u) + B_{1,1}(u) = 1\)을 만족합니다.

2차 베지에 곡선

  • 세 개의 제어점 \(P_0\), \(P_1\), \(P_2\)를 이용.
  • 두 제어점을 선형 보간하고, 이를 다시 보간하여 곡선을 만듦.
  • 곡선 방정식: \(c(u) = (1 - u)^2P_0 + 2u(1 - u)P_1 + u^2P_2\), \(0 \leq u \leq 1\)
  • 블렌딩 함수는 \(B_{0,2}(u)\), \(B_{1,2}(u)\), \(B_{2,2}(u)\)로 표현.

3차 베지에 곡선 (Cubic Bezier Curve)

  • 3차 베지에 곡선은 네 개의 제어점 \(P_0, P_1, P_2, P_3\)을 사용하여 곡선을 정의합니다.
  • 곡선 방정식: \[ c(u) = (1 - u)^3P_0 + 3(1 - u)^2uP_1 + 3(1 - u)u^2P_2 + u^3P_3, \quad 0 \leq u \leq 1 \]
  • 블렌딩 함수: 3차 Bernstein 다항식을 사용하여 각 제어점에 가중치를 부여.

베지에 곡선의 특징

  1. 다항식 차수: \(n+1\)개의 제어점이 있으면 곡선은 \(n\)차 다항식.
  2. 가중치 합: 모든 블렌딩 함수의 합은 항상 1.
  3. Convex Hull: 곡선은 제어점들의 컨벡스 헐 안에 위치.
    • Convex Hull은 주어진 점들의 집합을 포함하는 가장 작은 볼록 다각형
  4. 끝점 보간: 시작점과 끝점은 항상 보간되지만, 중간 제어점은 보간되지 않음.
  5. 어파인 불변성: 제어점의 어파인 변환이 곡선에도 동일하게 적용됨. 따라서 제어점이 아니라 베지에 커브 자체를 어파인 변환해도 된다.

4. 조각 다항식 (Piecewise Polynomial)

  • 제어점이 많아질수록 곡선의 차수도 높아지며, 계산 비용이 증가하고 반올림 오류 발생 가능성이 높음.
  • 로컬 컨트롤 문제: 하나의 제어점 변경이 곡선 전체에 영향을 줌.(각 제어점의 가중치가 항상 0이 아니기 때문)

곡선의 부드러움(Smoothness) 정의

  • 0-스무스 (0-smooth): 주어진 구간에서 곡선이 연속적일 때.
  • 1-스무스 (1-smooth): 곡선의 1차 도함수가 존재하고 연속적일 때.
  • 2-스무스 (2-smooth): 1차와 2차 도함수가 모두 존재하고 연속적일 때.

조각 다항식 (Piecewise Polynomial)

  • Bernstein 다항식의 단점을 해결하기 위해 여러 저차 다항식을 이어붙여 더 유연하게 만듦.
  • 이러한 곡선은 서로 다른 \( t \)-구간에서 서로 다른 다항식으로 정의되며, 조각 다항식이라 불림.
  • \( g(t) \)는 여러 개의 다항식 구간(segments)으로 구성되며, 각 구간은 특정 다항식으로 표현됩니다.
  • 스팬(span): 각 다항식 구간을 나타내는 구간의 범위를 뜻하며, 예를 들어 \( [0, 1] \), \( [1, 2] \), \( [2, 3] \)와 같이 정의됩니다.
  • 노트(knot): 인접한 구간들이 만나는 지점(경계점)을 뜻합니다. 예를 들어, \( t=1 \)과 \( t=2 \)가 노트입니다.
  • 조인트(joint): 인접한 구간이 이어지는 점에서 함수 값이 같아야 하는 지점입니다. 조각 다항식이 매끄럽게 연결되기 위해서는 이 조인트에서 연속성이 유지되어야 합니다.

스플라인 함수(Spline Function) 및 B-스플라인 함수

  • 스플라인 함수는 여러 조각 다항식 구간으로 구성된 함수로, 각 구간을 매끄럽게 연결해 곡선을 형성합니다. 각 구간의 경계에서 충분히 부드러운 연결성을 유지하여 곡선의 연속성을 보장합니다.
  • B-스플라인(B-spline) 함수는 smallest support를 갖으면서 greatest local control을 가능하게 합니다.
    • 2차 B-스플라인은 저차 다항식으로, 계산이 간단하고 곡선의 안정성을 유지하는 데 유리합니다.
    • 3차 B-스플라인 (Cubic B-Spline)은 일반적으로 많이 사용되는 형태로, \(t\)-축을 기준으로 대칭적이고 정수 간격으로 이동하며 곡선을 구성합니다. 이 방식은 더 부드러운 곡선 연결을 제공하고 다양한 형태의 곡선을 만들 수 있게 합니다.
  • B-스플라인 함수의 특성:
    1. 로컬 컨트롤(Local Control): 각 블렌딩 함수의 지원 구간이 제한되어 있어 특정 제어점의 변경이 해당 구간에만 영향을 미칩니다.
    2. 1-스무스(1-smooth) 특성: 각 구간이 1-스무스 특성을 가져서 곡선이 매끄럽고 연속적입니다.
    3. 낮은 차수 다항식: 각 조각 다항식은 2차나 3차로, 계산이 간단하면서도 안정적인 곡선을 생성합니다.
    4. 제어 다각형의 중점을 통과: 곡선이 제어 다각형의 각 변의 중점을 지나도록 하여 직관적이고 기하학적인 특성을 가집니다.

5. 베지에 표면 (Bezier Surface)와 Bilinear Bezier Patch

  • 베지에 곡선을 기반으로 확장하여 표면을 만드는 방식인 Bilinear Bezier Patch를 소개.
  • 베지에 곡선이 단일 파라미터 \( u \)로 곡선을 표현했다면, 표면을 표현하기 위해서는 두 개의 파라미터 \( u \)와 \( v \)가 필요함.

Bilinear Bezier Patch 구성

  • 4개의 제어점 (a, b, c, d)가 필요하며, 이를 기반으로 표면을 구성:
    1. 선분 a와 b 사이의 한 점: \( e(u) = (1 - u)a + ub, \quad 0 \leq u \leq 1 \)
    2. 선분 c와 d 사이의 한 점: \( f(u) = (1 - u)c + ud, \quad 0 \leq u \leq 1 \)
    3. 선분 e와 f 사이의 한 점: \[ p(u, v) = (1 - v)e + vf \] 최종적으로: \[ p(u, v) = (1 - u)(1 - v)a + u(1 - v)b + v(1 - u)c + uv d \] \(0 \leq u \leq 1\), \(0 \leq v \leq 1\) 범위에서 정의됨.
This post is licensed under CC BY 4.0 by the author.