문제

저는 여러 입자가 서로 상호 작용하는 힘 기반 물리 시뮬레이션을 모델링하고 있습니다.입자는 정적 뷰포트가 쉽게 추적을 잃을 수 있는 방식으로 움직일 수 있습니다. 전체 입자 그룹이 화면에서 오른쪽으로 이동하고 뷰포트에 빈 배경이 표시된다고 상상해 보십시오.

내 현재 솔루션은 x와 y의 최소/최대를 찾아 입자의 "중심"을 추적하고 뷰포트의 중앙이 이를 따르도록 만드는 것입니다.잘 작동합니다(실제 질량 중심을 찾을 필요가 없습니다).시각적인 내용은 다음과 같습니다.

Viewport

내 문제는 마우스로 입자를 수동으로 드래그하는 기능을 추가하려고 한다는 것입니다.나는 이것을 수행하는 우아한 방법을 찾지 못했습니다.문제는 뷰포트가 입자 중심을 따르기 때문에 뷰포트 좌표와 시뮬레이션 좌표 사이의 변환이 지속적으로 변경된다는 것입니다.

파티클 위에 마우스를 놓으면 시뮬레이션에서 파티클의 위치가 고정되기를 원합니다(파티클에 가해지는 모든 힘은 무시됩니다).버튼을 누른 상태에서 마우스를 움직일 때 입자가 시뮬레이션에서 움직이기를 원합니다.나는 이것을 달성했습니다.그러나 뷰포트와 여전히 움직이는 다른 입자로 인해 불쾌한 부작용이 발생합니다.마우스를 눌렀을 때 입자는 시뮬레이션에서 움직이지 않지만 모든 입자의 중심이 변경되고 그에 따라 뷰포트가 조정되므로 화면에서는 움직이게 됩니다.커서는 고정되어 있으므로 입자가 커서 아래에서 밖으로 "이동"합니다.마우스를 아주 조금만 움직이면 커서의 새 위치가 근본적으로 다른 시뮬레이션 좌표를 나타내기 때문에 입자가 커서 아래로 다시 순간 이동합니다.

위의 부작용 없이 훌륭하고 일관된 사용자 경험을 위한 제안 사항이 있습니까?


나는 이미 다음을 생각했습니다.

  • 마우스를 눌렀을 때 시뮬레이션 일시 중지
  • 마우스를 눌렀을 때 뷰포트 변경 일시 중단
  • 뷰포트 변경에 따라 마우스 커서 이동(정말 나쁨)

그러나 그들은 모두 다른 나쁜 부작용을 가지고 있거나 시뮬레이션의 가치를 앗아갑니다.

또한 이 질문은 언어 및 플랫폼에 구애받지 않는 문제이므로 "뷰포트", "뷰포트 좌표" 또는 "시뮬레이션 좌표"에 리터럴 및 구현별 의미를 첨부하지 마십시오.일반적인 그래픽 개념으로 취급하십시오.

도움이 되었습니까?

해결책

커서 위치를 변환 원점으로 사용하도록 뷰포트를 조정하는 알고리즘을 변경합니다.이렇게 하면 커서의 뷰포트와 시뮬레이션 좌표가 고정된 상태로 유지됩니다.마우스를 누를 때만 이 작업을 수행할 수도 있지만 항상 수행하면 만족스러운 결과를 얻을 수도 있습니다.

수학이 다소 복잡해지기는 하지만 너무 많은 옵션이 남아 있는 것 같지는 않습니다.

다른 팁

시뮬레이션을 일시 중지할 필요는 없다고 생각합니다.설명하신 대로 마우스 입력(뷰 입력)이 모델 데이터를 직접 변경하고 다음 업데이트/플러시/무엇이든 실행될 때 그에 따라 뷰가 업데이트되는 것 같습니다.

아마도 "애니메이션" 중에만 사용되며 다른 입자와 결합되지 않은 새로운 단일 입자를 삽입할 수 있습니다.이 입자를 도입하는 동안 실제 입자(및 가장자리)를 숨길 수 있습니다.따라서 마우스를 움직이는 동안 이 애니메이션 입자의 데이터만 업데이트됩니다.애니메이션이 끝나면(마우스를 놓으면) 애니메이션 개체가 삭제되고 실제 입자가 해당 데이터로 업데이트되어 다시 표시됩니다.

업데이트 시스템을 속이고 있기 때문에 이는 일종의 일시 중지입니다.파티클 시스템의 데이터는 애니메이션 중에 업데이트되지 않습니다. 실제로는 그래픽적으로 사용자를 속이는 것일 뿐 실제 시스템의 파티클을 움직이는 것처럼 보입니다.이것이 의미가 있기를 바랍니다. 오전 2시입니다 :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top