2014-05-17 8 views
0

나는 물체의 방향에 대해 투쟁하며 전설의 곡선을 따라 움직입니다. 일정한 속도로 움직이는 방법을 알아 냈습니다. 움직이는 물체의 전방 벡터가 될 수도있는 곡선의 접선이 있습니다. 내 문제는 : 어떻게 위와 오른쪽 벡터를 알아? 가장 쉬운 방법은 주어진 회전을 시작하고 다음에 allways이 참조처럼, 다음 하나에 대한 참조로 마지막 회전을 복용 커브를 단계별로 다음과 같습니다허 마이트 곡선을 따라 움직이는 물체의 방향을 계산하는 방법

Camera movement along a spline

을하지만 이것은 초래 스플라인 끝에서 제어 할 수없는 회전. 내가 뭘 하려는지 그것을 통해 단계없이 커브의 모든 지점에서 올바른 방향을 제공하는 알고리즘을 만드는 것입니다. 이상적으로 현재 세그먼트에 대한 두 개의 제어점의 orentation을 참조로 사용합니다. 컨트롤 포인트와 현재 커브 세그먼트 형식의 두 방향에서 생성되는 일종의 미리 계산 된 데이터를 사용하려고 생각했지만 해결 방법을 찾지 못했습니다. 이 문제에 접근하는 방법에 대한 답변이나 아이디어 만 있으면 기꺼이 기쁩니다.

+0

Frenet 삼차원을 사용하고 싶지 않으십니까? 다른 접근법은 두 번째 커브를 첫 번째 커브와 "평행"으로 지정하여 카메라에서 두 번째 커브까지의 벡터가 접선 벡터와 함께 카메라의 기준 수평면을 정의하도록 할 수 있습니다 (그리고 Gram-Schmidt 완전한 참조 프레임). –

답변

0

나는 frenet 프레임을 사용하는 솔루션을 생각해 냈습니다. 내 제어점 각각에 대한 방향을 정의한 다음 각 세그먼트의 스플라인을 따라 여러 점을 계산합니다. 각 점의 방향은 이전 점의 방향을 사용하여 계산됩니다. 첫 번째 점의 orientatin은 제어점의 방향과 같습니다. Here은 절차에 대한 아주 좋은 설명입니다. 각 점 방위를 계산 한 후 마지막 점 방위가 다음 제어 점의 방위와 일치하도록 보간 할 수 있습니다.

0

C(t)을 탄젠트 벡터 T(t)과 함께 카메라 궤적이라고합시다. 접선 벡터는 피치와 요를 제어합니다. 당신이 놓치고있는 것은 롤 컨트롤입니다.

보조 궤적 D(t)을 정의하면 ""과 같으며 벡터 CD(t)을 사용합니다. 상향 벡터는 U(t)=T(t) /\ CD(t) (정규화)이고 오른쪽 벡터는 U(t) /\ T(t) (정규화)입니다.

+0

Frenet trihendron이 내가 찾고있는 것 같습니다. 이제 어떻게 작동하는지 이해해야합니다. 조언 해주셔서 감사합니다. 만약 내가 두 번째 커브를 정의한다면, 나는 오프셋과 함께 issus를 실행한다. [0,1,0]과 같은 전역 오프셋은 커브의 일부분이 직접 위쪽으로 향하게되거나 다른 커브와 비슷하다. – ObiWanBennobi

+0

나는 오프셋이 일정해야한다고 말하지 않았다. 여분의 커브를 사용하면 카메라 움직임을 제어하고 움직이는면을 벗어나는 유연성을 얻을 수 있습니다. 직선상에서 Frenet 삼차면은 정의되지 않았다고 생각하십시오. –