Viewing Pipeline
Virtual Camera Model
카메라의 viesing direction이 정해지면, 이미지를 projection 합니다.
virtual camera model은 이미지가 있으면, 가상의 point에 맺히게 한다는 것입니다.
실제 카메라와는 어떤 차이가 있나요?
렌즈로 받아들이는 거니까, 점으로 받는 거랑은 달라요.
왜 렌즈로 받을까요.
세상에 있는 빛은 얌전히 날아오지 않죠.
어떤 광원에서의 빛이 물체에 반사되어서 들어올텐데,
한 픽셀로 정확히 들어오는 것이 아닙니다.
모든 방향으로 반사됩니다.
모든 포인트에서 온 빛이, 모든 포인트로 반사되고요.
그냥 포인트에서 보게 되면, 뿌옇게 보입니다.
그래서 렌즈를 쓰죠.
실제 카메라를 virtual camera로 시뮬레이션 할 수 있을까요?
혹은 virtual camera를 실제 카메라로 시뮬레이션 할 수 있알까요?
virtual camera를 physical camera로 시뮬레이션 하는 것은 해볼 만한 주제입니다?
실제 카메라에는 여러가지 한계가 있어요.
여기에 소프트웨어를 추가하여 이를 극복합니다.
가령 이미 찍은 사진의 초첨을 resetting합니다.
highly dynamic ranging ?
동시에 여러 장을 찍을 수 있어요.
이미 핸드폰에 들어있는 정도의 idea입니다.
일단은, ideal한 projection model을 다룹니다.
현실상에 존재하기 어렵죠.
일반적으로 3D viewing pipeline이라고 하면, ppt..
uvn: cross product로 직교하는 vector를 얻습니다.
기준점에서 바라보는 벡터를, 다른 쪽에서 바라보는 벡터로 transform 합니다.
…
임의의 직교 벡터가 주어지면, 어렵지 않게 변환할 수 있어요.
이제 공간상의 물체를, 특정시점에서 보는 좌표계로 변환했습니다.
굉장히 자주 하는 실수인데, 물체가 카메라의 뒤편에 있게 됩니다.
effective focal length.
여기서는 진짜 초점 거리는 아니에요.
눈을 통해서 직선으로 날아와서 맺히는 포인트.
z의 좌표는 이미 결정되어있고, x, y만 구하면 돼요.
삼각형의 닮음을 이용해서 구합니다.
또하나 눈여겨 봐야 하는 것은, linear하지 않다는 점입니다.
따라서 모든 transform을 linear하지 않게 변환해야 합니다.
다행히도, homogeneous coordinate에서 쓰지 않았던 맨 마지막 row를 사용합니다.
갑자기 linear하게 바뀝니다.
따라서 다른 모든 연산도 linear transform으로 남습니다.
옛날 교과서는 여기까지 오는 데 절반이나 걸리는데, 짧게 줄여서 왔습니다.
Traditional Classification of Projections
Vanishing point.
관찰 시점과 평행선이 orthogonal하지 않은 경우, 소실점이 생깁니다.
따라서 무수히 많은 소실점을 관찰할 수 있습니다.
왜 앞뒤로 자를까요?
frame buff에 depth도 있죠.
엄청 멀어지게 되면, resolution이 떨어집니다.
엄청나게 가까워도 마찬가지입니다.
따라서 맨 앞을 자른 것이 viewing frustum입니다.
이것을 다시 perspective proejction을 하면 직사각형이 됩니다.
보면 알 수 있듯이, affine transform은 불가능합니다.
변이 평행하지 않게 되거든요.
이렇게 해서 normalize cordinate를 얻습니다.
이게 openGL의 역할입니다.
그 다음에는 device driver의 역할입니다.
Prallel Projection
엄청 멀리 있는 경우, 평행하게 보입니다.
가령 태양빛.
parallel projection을 하는 것은 굉장히 쉽습니다.
구분법이 참 다양한데, 이건 전부 건축학 교과서에 나오는 말입니다.
Orthographic Transfrom
Axonometric Transform
대충 6면체를 취하고 있는데, standard basis가 아닌 지점에서 바라보는 것입니다.
이것도 3가지의 이름이 붙어있습니다.
- 세개의 각도가 모두 같으면 = trimetric
- 두개만 같으면 = dimetric
- 다 같으면 = isometric
이것까지는 눈으로 볼 수 있습니다.
Oblique parallel Projections
shear transformation을 통해서 이렇게 볼 수 있습니다.
전형적인 사례죠.
지도를 3차원으로 그릴 때 이렇게 많이들 합니다.
높이감을 주기 위해서죠.
shear angle.
보통은 30도 근처로 그려요. 혹은 45도.
또 옆면과 정면의 변 길이로 구분할 수 있습니다.
- Cavalier: 옆변이 좀 더 긺
- Cabinet: 변이 같음
OpenGL 3D Viewing Functions
- Viewing transformation function:
여러분이 직접 써 볼 기회는 없을거에요.
OpenGL 내부적으로 잘 구현되어 있습니다. - OpenGL otrhogonal projection function:
요새는 지원하지 않는 경우도 있어요. - OpenGl perspective projection function
직접 컨트롤하지 않을 가능성이 높습니다.
glut를 사용하면, 거기에서 윈도우의 크기를 조정함에 따라서 알아서 조정될 거에요.
뒤에는 클리핑 이야기가 많이 나오는데..
열심히 가르쳐도 써먹을 일이 없겠더라구여.
그래서 요새는 잘 안 가르칩니다.
관심 있으면 보세요.
굉장히 low level story에요.