Catmull-Rom 스플라인 곡선은 Edwin Catmull 과Raphael Rom에 의해 개발 되었으며 

통과점만으로부터 매끄러운 곡선을 정의하는 방법중에 하나이다


베지어 곡선은 중간중간의 Point를 지나지 않으며 Point의 영향으로 휘어지는 곡선인 반면 

Catmull-Rom 곡선은 모든 Point를 지나도록 되어있다.


Ferguson / Coons 곡선과 같이 속도를 줄 필요 없이 제어점 만으로 곡선을 결정할수 있으므로 

칼의 궤적같은 형태를 만들거나 할때 자주 쓰인다。






그 밖에 AI 캐릭터가 이동경로를 부드럽게 움직이도록 사용하거나 키프레임들 사이에 부드러운 보간을 얻는데 사용한다




Catmull - Rom 스플라인 곡선의 매개 변수 방정식은 다음과 같으며


 P(t) = 0.5 * ((2.0 * P1) + (-P0 + P2) * t + (2.0 * P0 - 5.0 * P1 + 4.0 * P2 - P3) * t^2 +

         (-P0 + 3.0 * P1 - 3.0 * P2 + P3) * t^3); 


위의 그림처럼 P2와 P3 사이의 곡선을 구하고 싶은 경우 초기위치 마지막위치는 이전과 마찬가지로 P2, P3가 된다



초기속도는 P2의 전후 점인 P1, P3에 의해 결정된다.


이 값은 벡터 P1, P3의 절반이다.


최종속도도 마찬가지로 벡터 P2, P4의 절반이다.


이걸로 초기위치 최종 위치, 및 초기속도 최종속도를 알 수 있으므로

Ferguson / Coons 곡선 처럼 해서 풀수 있다



위 그림의 B와 C의 Catmull-Rom 스플라인 곡선을 구한다.

우선 속도를 구한다.


이것을 위에서 설명한 Catmull- Rom 매개변수 방정식에 대입한다

(위의 식과는 약간 변형된 형태)





가 된다. 이걸로 t를 0부터 1까지 움직이면 BC 간에 곡선을 그린다

실제로 그래프에 그려보면 아래와 같이 된다




현재 DirectX 에서는 아래와 같은 함수를 제공하고있다


 D3DXVec2CatmullRom(D3DXVECTOR2* pOut,
                   CONST D3DXVECTOR2* pV1,
                   CONST D3DXVECTOR2* pV2,
                   CONST D3DXVECTOR2* pV3,
                   CONST D3DXVECTOR2* pV4,
                   FLOAT s)

D3DXVec3CatmullRom(D3DXVECTOR3* pOut,
                   CONST D3DXVECTOR3* pV1,
                   CONST D3DXVECTOR3* pV2,
                   CONST D3DXVECTOR3* pV3,
                   CONST D3DXVECTOR3* pV4,
                   FLOAT s)

D3DXVec4CatmullRom(D3DXVECTOR4* pOut,
                   CONST D3DXVECTOR4* pV1,
                   CONST D3DXVECTOR4* pV2,
                   CONST D3DXVECTOR4* pV3,
                   CONST D3DXVECTOR4* pV4,
                   FLOAT s)


위 함수들은 각각 4개의 점과 0~1사이의 하나의 가중치 값(s)을 받으며

pOut에 보간 된 벡터를 반환한다


만약 s 가 0이면 pv2를 리턴하게 되며 1일 경우 pv3를 리턴하게 된다


그외에도 다양한 보간법들이 있을 것이다..


예를들면.. Bicubic 이라던지...


http://en.wikipedia.org/wiki/Bicubic_interpolation

http://scosco.com.ne.kr/Stereo3DHtml/vr_0002_bicubic.htm


http://cafe.naver.com/devrookie/6085

출처블로그>Vanica's Lifelog - 夢が夢で終わらないように | 풍풍풍

원문http://blog.naver.com/sorkelf/40154552485



반응형

+ Recent posts