[그래픽스] 3/13

오늘부터는 구현에 필요한 것들, 기하학에 대한 이야기를 할 거에요.
기본적으로는 이러한 기하학이 필요해요.
여러분의 교과서에는 homogeneous coordinate에 대하여 설명하고 있어요.
그러나 이러한 방식이 적절하지는 않아요.
그래서 옛날 교과서를 보면, 초반에는 이것에 대해서 설명하고 있다가 후반에는 휙 사라져버려요.
이런 이유에 대해서 오늘 설명할거에요.

coordinate imvariant하다는 게 뭐에요?
“좌표계랑 상관없다는 거 아닐까요. 좌표계와 상관 없이 동일하게 보이는 게 아닐까요.”
우리가 하고 싶은 얘기는 coordinate free는 아니고, imvarient에 관한 거에요.

어떤 위치 p, q가 있다고 합시다.
두개를 더하면?
어디에 있게 되는거죠?
더하고 싶으면 coordinate가 필요하죠.
coordinate를 잡는 것은 ‘원점’이라는 것을 잡는 거죠.
원점이 결정되면, 합을 계산할 수 있고, 두개의 벡터를 더해서 sum의 위치를 구합니다.

문제는, 원점을 바꾸면 계산 결과가 변합니다.
세상에는 원점이나, 좌표계가 없잖아요.
원점과 좌표계는 편의상 붙이는거죠.
어디에 붙이냐에 따라서 계산 결과가 dependent합니다.
이것은 coordinate dependent한 것입니다.
coordinate invarient하지 않아요.

이러한 문제는 왜 생기는 걸까요.
위치라는 개념을, 벡터를 원용해서 표현했기 떄문입니다.
vector는 기하학적인 entity인데, 방향과 크기만 있습니다.
이걸 가져다가 위치를 표현하는데 써서 생긴 문제입니다.
vector와 pointer는 다른 거에요.

우리가 흔히 vector space라는 말을 쓰는데, space는 뭐에요.
entity들이 들어있고, 그것들 간의 연산이 정의된 거죠.
vector space라고 하면, vector와 그것의 연산이 정의되어있는 것입니다.

affine space는?
이것은 vector space의 superset이에요.
벡터간의 연산, 포인터간의 연산도 정의되어있어요.

중요한 점은, 벡터는 벡터고, 포인터는 포인터라는 점입니다.
point는 말그대로 위치, vector는 그 방향으로, 그 크기만큼 이동하는 것으로 봅니다.
그래서 포인트와 벡터의 연산 결과는 포인트겠죠.
포인트와 포인트의 차는 그 위치의 차이고,
더하는 연산은 정의되지 않습니다.
물론 원점이 있다면, 포인트를 벡터로 표현할 수는 있습니다.
그렇다고 해서 두 가지가 같은 것은 아니죠.

vector spaces

vector space라는 것은 set of vector에요.
두 가지 연산밖에 없습니다.
벡터+벡터, 혹은 벡터의 스칼라곱.

포인트 p가 있었는데, 곱하기 2를 하면 어떻게 돼요?
또다시, 이게 말이 되려면 원점이 있어야 해요.
위치를 잡을 때 원점에서의 거리를 곱하기 2 하면, 그만큼 먼 곳에 떨어지겠죠.
당연히 다른 좌표계를 잡으면 다른 결과가 나오겠죠.
그래서 포인트 연산에는 스칼라곱을 해서는 안 됩니다.

또 벡터에서는 linear combination을 할 수 있죠.

affine spaces

포인트와 포인트의 차이: 이것은 벡터입니다.

그렇다면 어떻게 포인트를 잡나요?
coordinate free는 어렵습니다.
그래서 coordinate invarient를 쓰죠.

coordinate free

Addition

  • vector + vector
  • vector + pointer

    Subtraction

  • vector - vector
  • point - point
  • vector - point

    Scalar multiplication

  • scalar * vector = vector
  • 1 * point = point
  • 0 * point = vector :
    이건 tricky한데, 벡터로 정의할 거에요. 나중에 이해할 수 있을겁니다.

    Linear Combination

    차원의 수 = basis의 수 = independent vector의 수

    Affine Combination

    n+1의 포인트들이 있어요.
    앞에서는 스칼라를 곱하고, 뒤에는 포인트에서 포인트를 뺍니다.
    전체 sum에 따라서, 1인 경우는 point, 0인 경우 vector라고 합니다.

지금 우리가 하는 걸 보면, 기하학적인 것을 대수적으로 쓰고 있어요.
기하학적인 element에 의미를 부여하는 것과, 그것을 계산하는 것은 달라요.
지금은 기하학적인 연산을 대수적으로 바꾸어서, 어떨 떄 의미를 갖는지 따지고 있습니다.

Example

  • (p+q)/2
  • (p+q)/3: 의미가 없습니다.
  • (p+q+r)/3: centroid, centor of gravity.
  • (p/2+q/2-r): 계수 합이 0이므로, 벡터. p, q의 중점에서 r로 가는 벡터.

coordinate invarient한 경우, 위와 같이 수식을 해석할 수 있습니다.

Affine frame

coordinate system, coordinate frame.
두 개는 다른가요?
미적분을 할 때는 보통 같지만, affine space에서는 나누어서 이야기 해요.
여기서는 vector system인 경우, coordinate system.
affine space인 경우, coordinate frame.

point는 원점을 필요로 합니다.
point = o + vector의 합
vector = vector의 합

Barycentric Coodinates

q = o + v로 표현합니다.

p = c0p0 + c1p1 + c2p2
c0, c1, c2를 통해서 삼각형 내부 point를 계산할 수 있습니다.
밖으로 나가면 음수를 갖게 될 것이구요.

Matrix Representation

point는 한 차원 추가해서 마지막 자리를 1, vector는 0.
이렇게 하면, 먼저 정의한 연산들이 자연스럽게 정의됩니다.
가령 더하기, 빼기에서 끝자리가 어떻게 되는지 봅시다.
point+point = 2, 정의되지 않죠.
빼기에서는 0으로, 자연스럽게 벡터가 되는 것을 볼 수 있습니다.

Projective spaces

교과서에 돌아가서 보면, (x, y, z, w)라고 정의하고 있습니다.
이렇게 정의하면 사실은 좀 골치아파요.
ppt 수식에서 보다시피, equal로 쓸 수가 없어요.
projection에서 이런 게 필요합니다만, 그 때 가서 보도록 합시다.
0이나 1인 case는 일단은 무시하고 갑시다.

OpenGL Programming

이걸로 숙제를 해야합니다.
가르쳐주진 않아요.
알아서 공부하세요.
그래서 아주 shot term의 introduction을 해주죠.

C base로 되어있어요.
하지만 modern한 거의 모든 language에 포팅되어있어서 자유롭게 쓸 수 있어요.

GLU는 어디든 깔려있지만, GLUT는 여러분이 가져다가 깔아야해요.
오리지널의 GLUT는 너무 구려서 더이상 업데이트도 안 돼요.
요새는 free GLUT 등등이 있는데, 찾아보면 있을 거에요.
GLUT는 특정 os에 맞게 window를 오픈해주고, 마우스 등을 바인딩해줍니다.

간단한 예시로, 직선을 긋는 프로그램을 만들면 ppt의 이것과 같습니다.

과제

언제든지 조교가 바로 실행할 수 있는 상태여야 합니다.
make file이든지 뭐든지 만들어져 있어야 하고요,
report에 어떻게 결과를 확인할 수 있는지 적혀있어야 합니다.

질문 없으면 다시 지난 수업 시간에서 이어서 해볼까요.

Bit-Mapped vs. Object-Based

가령 Powerpoint는 Object Based에요.
텍스트, 사각형 등등이 각각의 object로 정의되어 있죠.
하지만 painter 프로그램은 그렇지 않죠.

두 가지 프로그램들은 철학이 완전히 달라요.

Bit Mapped Graphics

Buffer가 있어요.
하나의 점에 들어가는 정보는 매우 작아요.
그 대신 점이 매우 많죠.
천만 개의 픽셀.
아주 심플한 geometric entity를 많이 만드는거죠.

Objected Based

하나하나의 Object에 꽤 많은 정보가 들어가요.
원을 그렸으면, 원의 방정식에 대한 정보가 들어가고.
텍스트를 쓰면 텍스트 정보, 폰트 정보 등등.
하나하나가 복잡한 구조를 가져요.

이를 보면, 두 가지의 장단점이 명확합니다.

  • Object Based의 장점
    • Object가 갖는 특성이 그대로 남아있습니다
      Bitmapped는 사라지거든요. 그러다보니 다른 조작에 의해서 특성이 유실될 수 있습니다.
  • Bitmapped Based 장점
    • 간결, 단순
    • Object는 전부 정보를 저장해야 하잖아요.

이렇다보니, 두 가지를 섞어 씁니다.

Image File Formats

  • GIF
    • 화질이 낮습니다: 256색
    • compression이 잘 안 됩니다.
  • animated GIF
    • 짧은 영상을 저장할 수 있습니다.
  • TIFF
    • 이미지 크기 대비 매우 큰 용량
    • 무손실 압축 포맷. 정보를 하나도 잃어버리지 않아요.
    • 본격적으로 출력을 해야 할 때 사용.
  • JPEG
    • 예전에는 정보가 많이 손실됐었는데, 요새는 거의 손실이 없죠.
    • High quality 영상 기기에서도 많이 사용합니다.
  • JPEG 2000
    • JPEG의 다음 버전 standard
    • 중요한 부분에는 더 많은 픽셀, 아닌 부분은 적은 픽셀 - 다른 resolution
    • 네트워크를 통해 전송할 때, 10% 이미지만 받아도 유의미한 이미지를 볼 수 있음
    • 그렇지만 망했어요….
  • EPS
    • PostScript: programming language.
      레이저?? 에서? pixel based가 아니라 image based로 이미지를 표현하도록 함.
      object인 경우 작은 파일이 되지만, pixel based인 경우, language이기 때문에 매우 큰 파일이 됨.