좌표계 선택, 즉 1세계 단위의 의미 선택은 브러시 입실론 값 선택과 밀접한 관련이 있습니다.
좌표계는 InProgressStrokesView.startStroke()에 전달하는 inputToWorld 변환 행렬 값과 드라이 스트로크를 그릴 때 Canvas에 적용하는 유사한 변환에 반영됩니다.
일반적인 앱은 월드 단위만 고려하고 startStroke()의 strokeToWorldTransform 인수를 기본 ID 매트릭스로 남길 수 있습니다.
앱이 그리기 화면의 이동, 확대/축소 또는 회전을 지원하는 경우 이러한 변환 행렬의 정확한 값은 시간이 지남에 따라 변경되지만 이러한 변경사항은 사용자가 그리기 화면을 통해 보는 카메라에 의해 세계 좌표계가 표시되는 방식의 변경사항을 반영합니다.
세계 좌표계는 각 셀이 세계 단위 크기인 그리드로 생각할 수 있습니다. 엡실론은 그리드의 크기이며 세계 단위의 부동 소수점 숫자입니다.
사용자가 콘텐츠를 확대하면 월드 단위 그리드도 확대되므로 기본 100% 확대/축소 수준에서 월드 단위와 입실론 크기를 선택하는 것이 중요합니다.
세계 단위 크기 정의와 세계 단위의 엡실론 값은 앱의 수명 동안 고정된 값이어야 합니다.
내부 구현에서는 엡실론을 사용하여 두 점이 동일한 점으로 처리되려면 서로 얼마나 가까워야 하는지 결정합니다. 즉, 입실론보다 작은 거리는 0 거리로 처리됩니다. 이는 내부 계산을 양자화하고 반올림하는 데 사용됩니다.
적절한 세계 단위 크기와 입실론 값은 무엇인가요?
다양한 화면 크기와 기기 밀도 간의 이식성을 위해 세계 단위 크기는 밀도에 독립적이어야 합니다. 이러한 시나리오의 클래식 단위는 밀도 독립형 픽셀 (dp)입니다. 일반적으로 1dp를 세계 단위 크기로 선택합니다.
고정된 입실론 값을 선택할 때는 내부 구현에서 픽셀보다 큰 거리로 숫자를 반올림하지 않도록 하세요. 세계 단위 크기가 1dp인 경우 입실론은 최대 1/4 (0.25세계 단위)여야 합니다. 그래야 1dp가 4px일 수 있는 고화질 디스플레이 기기에서 픽셀 크기가 됩니다. 하지만 사용자가 콘텐츠를 최대 10배까지 확대해도 입실론 관련 반올림을 1px 이하로 유지하려면 입실론은 0.25를 10으로 나눈 값인 0.025 세계 단위여야 합니다.
10배 이상으로 확대할 수 없다는 의미는 아니지만, 이 시점부터 스트로크 렌더링에 약간의 부정확성과 아티팩트가 표시될 수 있습니다.
입실론 값을 선택하는 것은 확대 시의 정확한 세부정보와 다음과 같은 컴퓨팅 리소스 간의 균형입니다.
- 더 정확한 지오메트리를 계산하는 CPU 사이클
- 해당 형상에 더 많은 세부정보를 저장하는 메모리
- 해당 지오메트리를 렌더링하는 데 걸리는 GPU 시간
이 가이드라인은 적절한 기본값이지만 이를 사용하여 요구사항에 더 적합한 좌표계와 입실론 값을 선택할 수 있습니다.
이러한 권장 값에서 너무 벗어나면 애플리케이션에 부정적인 영향을 줄 수 있습니다. 예를 들어 리소스 소비가 증가하면 애플리케이션이 느리게 실행될 수 있습니다. 경우에 따라 부동 소수점 정밀도 문제가 이상한 시각적 아티팩트로 나타날 수도 있습니다.