UNIV

2022-04-03 04:47

컴퓨터그래픽스 - 4강. 컴퓨터 그래픽스 기본요소

원 그리기

  • 원뿔곡선
  • 원의 방정식
    • 중심이 (xc, yc) 반경이 r인 원
    • (x - xc)^2 + (y - yc)^2 = r^2
  • 타원의 방정식
    • 두 초점으로부터의 거리의 합이 일정한 점들의 집합
    • 장축과 단축이 좌표축에 정렬된 방향에 놓인 경우
  • 포물선의 방정식
    • 한점 (초점) 과 하나의 직선(준선)과의 거리가 동일한 점들의 집합
  • 쌍곡선의 방정식
    • 두 점으로부터의 거리의 차가 일정한 점들의 집합으로 구성된 곡선
    • 중심이 원점에 존재하며 횡단축이 x축과 일치하는 쌍곡선

원의 방정식

  • 데카르트 좌표계에서의 원의 방정식
    • (x - xc)^2 + (y - yc)^2 = r^2

원 그리기 알고리즘

  • 원주상의 좌표 계산
    • 중심 좌표가 (0,0) 인 원의 좌표들을 구한 후 (xc, yc)를 더하여 실제 좌표들을 구함
    • 단위 x좌표 변화에 대한 y좌표 변화 크기가 1보다 작은 구간에서 원주상의 좌표를 구함
    • x = 0부터 x = y가 되는 구간
  • 원의 대칭성을 이용한 좌표 계산

중간점 원 그리기 알고리즘

  • 판별 함수
    • x^2 + y^2 < r^2 -> 원 내부의 점
    • x^2 + y^2 = r^2 -> 원주 상의 점
    • x^2 + y^2 > r^2 -> 원 외부의 점
  • F(x,y) = x^2 + y^2 - r^2
  • F(x,y)
    • < 0 원 내부의 점
    • = 0 원주 상의 점
    • 0 원 외부의 점

  • Mk+1 = (xk + 1, yk - 0.5)
  • 판별 함수 값에 따른 다음 좌표 결정
  • (xk+1, yk+1) 을 결정하기 위한 판별식
  • (xk+2, yk+2) 을 결정하기 위한 판별식
  • 판별식의 초기값 F(M1)
    • P0 = (0, r), M1 = (1, r - 0.5)
    • F(M1) = 1^2 + (r - 0.5)^2 - r^2 = 1.25 - r
  • 다음 픽셀위치의 결정 및 판별식 갱신
void bresenham_circle (int xc, int yc, int radius) {
    void circlePoints(int, int, int, int);
      int F = 1 - radius;
      int x = 0;
     int y = radius;
      
      circlePoint(xc, yc, x, y);
      while (y > x) {
        if (F < 0)
          F += x * 2 + 3;
          else {
            F += (x - y) * 2 + 5;
              y--;
        }
      x++;
      circlePoint(xc, yc, x, y);
    } 
}

다각형 그리기

  • 다각형이란?
    • 세 개 이상의 선분으로 둘러싸인 평면 도형
      • 모서리 (edge) 또는 변 (side): 다각형을 구성하는 선분
      • 꼭짓점 (vertex)
  • 단순 다각형
    • 다각형의 변들이 꼭짓점에서만 만나는 다각형
  • 블록 다각형과 오목 다각형
    • 볼록(convex) 다각형: 모든 내각들이 180도 이하인 다각형
    • 오목(concave) 다각형: 볼록하지 않은 다각형 (180도 이상인 내각이 존재)
  • 볼록 다각형과 오목 다각형의 판별
    • 꼭짓점들을 정해진 순서로 연결하는 벡터를 나열한 후 모든 두 인접 벡터 쌍의 외적을 구함
    • 볼록 다각형: 모든 외적의 방향이 동일
    • 오목 다각형: 일부 외적의 방향이 반대

다각형의 앞면과 뒷면

  • 앞면을 정하기 위한 꼭짓점 나열 순서
    • 시계 반대방향 (ccw) 순서
    • 시계 방향 (cw) 순서
  • 홀-짝 규칙
    • 판별하고자 하는 점으로부터 다각형 외부의 점을 잇는 선과 다각형의 변이 교차하는 횟수가 홀수면 내부, 짝수면 외부로 판단함
    • 주의: 판별을 위한 선이 다각형의 꼭짓점을 교차하는 경우 올바른 판별이 이루어지지 않을 수 있음

Open GL의 다각형 그리기

  • 다각형의 종류를 지정하는 상수 사용
    • GL_TRIANGLES
    • GL_TRIANGLE_STRIP
    • GL_TRIANGLE_FAN