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 곡선 처럼 해서 풀수 있다
이것을 위에서 설명한 Catmull- Rom 매개변수 방정식에 대입한다
(위의 식과는 약간 변형된 형태)
가 된다. 이걸로 t를 0부터 1까지 움직이면 BC 간에 곡선을 그린다
실제로 그래프에 그려보면 아래와 같이 된다
현재 DirectX 에서는 아래와 같은 함수를 제공하고있다
D3DXVec2CatmullRom(D3DXVECTOR2* pOut, 위 함수들은 각각 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
'수학 (Mathematics) > 3D수학' 카테고리의 다른 글
점,벡터 구분의 미묘함 (0) | 2013.05.08 |
---|---|
쿼터니온을 사용해 오브젝트 회전시키기 (0) | 2013.04.24 |
Fast Overlap Test for OBBs (0) | 2013.03.20 |
Object Oriented Bounding Box 를 이용한 Collision Detection (0) | 2013.03.18 |
Simple cloud layer SceneNode (0) | 2013.03.05 |