2d ik test |
| programming/graphics 2002/11/13 19:35 |
얼마전에 나름대로 inverse kinematics 를 구현해보고자 만들어 봤던 셈플인데 좀 썰렁해서 적어봅니다. (하도 여기 저기 얘기해서 아시는 분도 계시겠습니다만... 그때랑 똑 같습니다. T_T) 아래는 소스랑 실행 예제를 올려놓은 페이지 입니다.
http://www.digibath.com/noerror/ik/ik.html
정석은 아닌거 같습니다만 우선 시작해봤습니다. (개인적으로 문서보는 거보다는 실제로 프로그램 짜보면서 학습하는 걸 더 좋아해서, 항상 시작은 무작정...)
"현재 링크(본)을 회전해서 피봇에서의 끝점과 타겟점이 일직선을 이루도록 회전한다."를 기본으로 잡았습니다. (제대로 하려면 자코비안 메트릭스까지 나오는 거 같은 데, 아직은 전혀 감이 안와서 그냥 물리적으로 생각하고 이해해서 접근해 봤습니다.)
기본 링크 구조를 만들어서 아무 본이나 타겟이 되도록 연결 했습니다. (여러개의 차일드를 가지게 되서 타겟점부터 상위로 검색하도록 했습니다.)
상위 본부터 회전하는 식으로 접근했습니다. Trace 보면 아래와 같이 되어 있는 데,
회전
Trace(상위)
만약 하위 본부터 회전하고자 한다면 반대로 하면 될텐데, 테스트 해본 결과 상위 먼저 회전하는 것이 좀 더 나은 결과를 나타내더군요. (위험하게도 이론 없이 가시적인 결과로 판단... T_T)
이런 점진적인 IK 같은 경우는 각 링크마다 회전 각속도를 제한해서 처리하던데, 그냥 무조건 일직선이 되도록 회전했습니다. 그래서 갑자기 엉키면서 다른 솔루션을 얻는 경우가 있네요. (구지 이 방법을 유지하면서 한번에 솔루션을 찾아야 하는 경우라면 2진 검색하듯이 각도의 절반, 다시 절반식으로 최선의 결과에 도달할때 까지 접근하면 괜찮은 결과가 나오지 않을 까하는 추측을... - 해본건 아닙니다 ^^)
회전부분은 그냥 벡터 연산의 특성을 그대로 사용했습니다. 크로스 프로덕트해서 sin 값을 구하고 도트 프로덕트값으로 cos 값을 구했습니다. (계산의 편의를 위해서 먼저 노말라이즈를 했습니다.)
http://www.digibath.com/noerror/ik/ik.html
정석은 아닌거 같습니다만 우선 시작해봤습니다. (개인적으로 문서보는 거보다는 실제로 프로그램 짜보면서 학습하는 걸 더 좋아해서, 항상 시작은 무작정...)
"현재 링크(본)을 회전해서 피봇에서의 끝점과 타겟점이 일직선을 이루도록 회전한다."를 기본으로 잡았습니다. (제대로 하려면 자코비안 메트릭스까지 나오는 거 같은 데, 아직은 전혀 감이 안와서 그냥 물리적으로 생각하고 이해해서 접근해 봤습니다.)
기본 링크 구조를 만들어서 아무 본이나 타겟이 되도록 연결 했습니다. (여러개의 차일드를 가지게 되서 타겟점부터 상위로 검색하도록 했습니다.)
상위 본부터 회전하는 식으로 접근했습니다. Trace 보면 아래와 같이 되어 있는 데,
회전
Trace(상위)
만약 하위 본부터 회전하고자 한다면 반대로 하면 될텐데, 테스트 해본 결과 상위 먼저 회전하는 것이 좀 더 나은 결과를 나타내더군요. (위험하게도 이론 없이 가시적인 결과로 판단... T_T)
이런 점진적인 IK 같은 경우는 각 링크마다 회전 각속도를 제한해서 처리하던데, 그냥 무조건 일직선이 되도록 회전했습니다. 그래서 갑자기 엉키면서 다른 솔루션을 얻는 경우가 있네요. (구지 이 방법을 유지하면서 한번에 솔루션을 찾아야 하는 경우라면 2진 검색하듯이 각도의 절반, 다시 절반식으로 최선의 결과에 도달할때 까지 접근하면 괜찮은 결과가 나오지 않을 까하는 추측을... - 해본건 아닙니다 ^^)
회전부분은 그냥 벡터 연산의 특성을 그대로 사용했습니다. 크로스 프로덕트해서 sin 값을 구하고 도트 프로덕트값으로 cos 값을 구했습니다. (계산의 편의를 위해서 먼저 노말라이즈를 했습니다.)
댓글을 달아 주세요
너의 위치를 방문한 즐기는!
좋은 위치! 너를 감사하십시요.
많은 감사 우수한 위치! 나는 너의 웹사이트를 사랑한다!
너는 아름다운 웹사이트가 있는다!
너는 차가운 위치를 만들었다!
너는 아름다운 웹사이트가 있는다!
중대한 위치 축하!경이롭 위치!