본문 바로가기

공부/Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문

(25)
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 13 - 캐릭터 애니메이션 [1/4] 13.1 캐릭터 골격과 공간 이전 실시간 캐릭터 애니메이션을 위해서는 대체로 캐릭터의 골격(Skeleton)을 이용한다. 골격은 다수의 뼈(Bone)로 구성된 관절체(Articulated body)이다. 13.1.1 골격 (b)의 경우 3ds Max에서 제공하는 바이페드(biped)라는 기본 골격이다. (a)와 같은 캐릭터의 기본 자세를 드레스 포즈(dress pose)라 한다. 위의 그림은 뼈를 마치 부피를 가진 물체처럼 그렸는데, 이는 골격을 드레스 포즈에 맞추는 과정에서만 쓰인다. 일단 골격이 드레스 포즈에 맞춰지면, 각 뼈마다 하나의 변환 행렬이 자동으로 계산된다. 13.1.2 뼈와 공간 이전 골격을 구성하는 뼈들은 계층적으로 부모-자식(Parent-child) 관계를 형성한다. 캐릭터 애니메이션..
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 12 - 스크린 물체 조작 [2/2] 12.2 물체 회전 위 그림은 터치스크린에서 손가락을 밀어 주전자를 회전시키는 것을 보여준다. 손가락 끝의 궤적을 추적해서 얻은 터치스크린 위의 2차원 점들을 {p_1, p_2, p_3...}이라고 할때, 이웃한 두 점 p_i와 p_i+1이 있다고 하자. 물체 회전을 효율적으로 구현하기 위해서, 해상도 w x h의 터치스크린을 2 x 2 크기의 정사각형으로 변환할 것인데, 이 변환을 p_i와 p_i+1에 적용해 q_i와 q_i+1을 얻는다. 터치스크린 위의 점 p와 정사각형 스크린 위의 점 q의 좌표를 각각 (x, y)와 (x', y')로 표기할 때, (x, y)와 (x', y')의 관계는 다음과 같다. x는 [0, w], y는 [0, h], x'와 y'는 [-1, 1] 범위에 있다. 정사각형 스크린 뒤..
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 12 - 스크린 물체 조작 [1/2] 12.1 물체 선택 다음 그림과 같이 마우스를 클릭하여 물체를 선택할 수 있다. 이를 피킹(picking) 이라고도 한다. 스크린에 렌더링된 영상은 픽셀의 2차원 배열이다. 따라서 피킹 시 얻을 수 있는 정보는 마우스로 선택한 점의 2차원 좌표 (x_s, y_s)일 뿐이다. 즉, 물체에 대한 정보는 없고, (x_s, y_s)를 사용해서 해당 위치의 물체를 찾아내는 기법을 이번 장에서 설명한다. 12.1.1 스크린 공간 광선 마우스 커서의 위치가 주어졌을 때, 시작점은 위치에서 z는 0이고, 방향 벡터는 (0, 0, 1)인 스크린 공간 광선(ray)을 정의할 수 있다. 이 광선에 의해 처음 부딪히는 물체가 선택될 것이다. 즉, 광선을 오브젝트 공간까지 변환하여 그 공간에서 광선-물체 교차 검사를 수행해야 ..
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 11 - 오일러 변환 및 쿼터니언 [2/2] 11.3 쿼터니언 11.3.1 쿼터니언 표현 쿼터니언 q는 복소수를 확장한 것으로 네 개의 항으로 표현된다. 여기서 q_x, q_y, q_z는 허수부(imaginary part)를 구성하고, q_w는 실수부(real part)인데, i, j, k를 허수단위(imaginary unit)라 한다. 허수단위는 다음과 같은 특징을 가진다. 두 개의 서로 다른 허수단위가 곱해지면 다음과 같은 순환치환(cyclic permutation)적인 특징을 가진다. 일반 복소수처럼 쿼터니언도 켤레(conjugate)를 가진다. 허수부를 음수로 만드는 게 켤레 쿼터니언이다. 식을 이용하면 두 개의 쿼터니언 p와 q에 대해 (pq)* = q*p*임을 쉡게 증명할 수 있다. 쿼터니언의 크기(norm)는 일반적인 벡터의 경우와 같..
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 11 - 오일러 변환 및 쿼터니언 [1/2] 4.3.2절에서 우리는 x, y, z축을 중심으로 하는 세 종류의 회전을 소개했다. 이 장은 그러한 회전을 적절하게 결합하면 물체가 임의의 방향을 가지게 됨을 보여줄 것이다. 그 다음 주축이 아닌 임의의 축을 중심으로 물체를 회전하는 기법에 대해 기술할 것이다. 11.1 오일러 변환 세 개의 주축 중심 회전을 결합한 것을 오일러 변환(Euler transform)이라 한다. 그런데, 이 주 축은 월드 공간에서 택할 수도 있고, 오브젝트 공간에서 택할 수도 있다. 11.1.1 월드 공간 오일러 변환 11.2 키프레임 애니메이션과 오일러 변환 11.2.1 2차원 키프레임 애니메이션 p_i는 사각형 중심의 좌표를, ∂_i는 회전각 즉 방향을 나타낸다. 중간 프레임 t에서의 사각형의 위치는 위의 식과 같이 선형..
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 10 - 출력 병합기 이번 챕터에서는 출력 병합기가 수행하는 두 가지 주된 작업인 z-버퍼링과 알파 블렌딩을 다룬다. 10.1 Z-버퍼링 GL은 컬러 버퍼(color buffer), 깊이 버퍼(depth buffer), 스텐실 버퍼(stencil buffer)를 제공하는데, 이들을 합해서 프레임 버퍼(frame buffer)라고 한다. 컬러 버퍼는 스크린의 2차원 뷰포트에 나타날 픽셀 전체를 저장하는 메모리 공간이다. (w x z 해상도) 깊이 버퍼는 z-버퍼라고도 불리는데, 컬러 버퍼와 동일한 해상도를 가지며 현재 컬러 버퍼에 저장되어 있는 픽셀의 z값을 저장한다. z가 프래그먼트마다 겉으로 안들어나지만 계산이 된다. 프래그먼트에서 나오는 normal은 라이팅(lighting), texcoord는 텍스쳐링(texturing..
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 9 - 라이팅 (앰비언트, 발산광) [2/2] 9.1.3 앰비언트 항 공간 내 다양한 물체로부터 반사된 빛을 앰비언트 빛(ambient light)이라 부르는데, 이는 간접 조명에 해당한다. 앰비언트 빛은 특정한 방향이 아닌 '모든 방향을 따라' p점에 들어온다. 따라서 이는 p에서 '모든 방향을 따라' 반사된다. 결국 p에 들어오는 앰비언트 빛의 양은 p의 노멀에 무관하고, p에서 반사되는 빛의 양은 카메라 시선에 무관하다. 여기에서 s_a는 앰비언트 빛의 RGB 색상이고, m_a는 물체의 앰비언트 계수(ambient reflectance)이다. 간접 조명을 표현하는 앰비언트 항 덕분에 우리는 광원으로부터의 빛이 직접 닿지 않는 부분에도 조명 효과를 줄 수 있게 된다. 주전자의 다른 부분과 마찬가지로 약간의 조명을 받는다. 하지만 실세계 간접 조명..
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 9 - 라이팅 (디퓨즈, 스페큘러) [1/2] 라이팅(lighting 혹은 illumination)은 빛과 물체 간 상호작용을 처리하는 기술이다. 이 장에서는 퐁(Phong)이 제안한 라이팅 기법(퐁 모델)을 소개하고, 어떻게 쉐이더로 구현되는지 설명한다. 9.1 퐁 모델 라이팅을 위해서는 우선 광원(light source)을 정의해야 한다. 간단한 광원 중 하나는 점 광원(point light source)으로, 이는 3차원 공간의 한 점(point)으로부터 전방위로 빛이 발산되는 것 근처에서 가장 쉽게 볼 수 있는 광원중에 하나인 태양은 매우 강력한 광원이 아주 멀리 존재하는 경우이다. 물체 표면의 여러 점에 입사하는 햇빛의 방향은 서로 평행하다고 가정해도 무리가 없다. 이런 광원을 방향성 광원(directional light source)라고 ..