키 프레임 대신 트랙 (곡선)을 사용하여 스켈 레탈 애니메이션 시스템을 최적화하려고합니다. 각 곡선은 특정 구성 요소를 처리 한 다음 (현재로서는) 선형 적으로 값을 보간합니다. 내 뼈 위치에 잘 작동하지만 임은 쿼터니언 구성 요소 보간법의 "jagyness"를 제거하는 데 어려움을 겪고 있습니다 ...쿼터니온 컴포넌트 보간
기본적으로 각 뼈대 쿼터니언에 대해 각 구성 요소 (XY 및 Z)마다 1 개의 곡선이 있습니다. I는 XY 독립적 Z 곡선 보간 다음 코드를 사용
// Simple lerp... (f is always a value between 0.0f and 1.0f)
return (curve->data_array[ currentframe ].value * (1.0f - f)) +
(curve->data_array[ nextframe ].value * f);
I는 다음 쿼터니온 XYZ 보간 언제 뼈에 그것을 정규화 및 영향 전에 쿼터니언의 W 성분을 다시 다음 코드를 사용 그림 그리기 전 :
Quaternion QuaternionW(const Quaternion q)
{
Quaternion t = { q.x, q.y, q.z };
float l = 1.0f - (q.x * q.x) - (q.y * q.y) - (q.z * q.z);
t.w = (l < 0.0f) ? 0.0f : -sqrtf(l);
return t;
}
뼈가 수시로 바뀌는 예외적 인 경우 드로잉은 괜찮습니다. 부동 소수점 정밀도 때문일까요? 또는 W 구성 요소의 재 계산? 아니면이 방식으로 쿼터니언의 각 구성 요소를 선형 적으로 보간 할 수있는 방법이 전혀 없습니다.
추신 : 메모 측면 내 곡선 보간 함수 I는 위에서 코드를 대체하는 경우 :
return curve->data_array[ currentframe ].value;
대신 또는 선형 보간 모든 괜찮다 .. 그래서 데이터 분명히 올 .. . 임 ...
[편집]
는 더 많은 연구 후에 나는이 문제가 프레임 데이터에서 오는 것을 발견 ... 의아해 나는 다음과 같은 즉 가지고 :
,536 91,363,210Frame0 : quat.x = 0.950497
프레임 1 : quat.x = -0.952190
프레임 2 : quat.x = 0.953192
이 반전하고 jaggyness 어떤 원인이다 .. 이 사건을 감지하고 데이터의 부호를 반전 시키려고했으나 일부 프레임이 이제는 이상하게 보일 정도로 (시각적으로 볼 때 시각적으로) 문제를 완전히 해결하지 못합니다.
어떻게하면 커브를 올바르게 고정시킬 수 있습니까?
쿼터니언 보간법에 대해서는 잘 모릅니다 만 도움이 될 수 있습니다. http://stackoverflow.com/questions/1684594/can-i-interpolate-rotation-from-two-quaternions-created-from-yaw- pitch-roll – num3ric
"* 키 프레임 대신 트랙 (곡선)을 사용하여 내 골격 애니메이션 시스템을 최적화하려고합니다. *"저는 몇 개의 골격 애니메이션 시스템을 작성했습니다. 이것이 왜 최적화라고 생각합니까? 달성하려는 메모리 또는 성능 최적화입니까? –
잘 둘 다 ... 각 구성 요소에 대한 곡선을 사용하여 각 프레임에 대한 모든 데이터를 저장할 필요가 없습니다 ... "프레임에서", "프레임으로"값만 커브가있는 구성 요소 만 보간하면됩니다. 골격 애니메이션 시스템을 작성했다면 Im과 마주하는 비슷한 문제가 있어야합니다 ... 보간법과 관련이 있습니다.독립적으로 쿼터니언의 구성 요소를 보간하는 것이 가능한가, 아니면 lerp (또는 slerp)에 full (XYZW)가 필요합니까? 톱니 모양은 데이터 부족으로 인해 발생하는 것 같습니다. 맞습니까? – McBob