2013-10-12 3 views
0

OpenGL-ES 2.0에서 만든 2D지도가 있습니다. 이제 저는 스케일 바를 그리기를 원합니다.OpenGL에서 화면 코드에 따른 선 그리기

사용자가지도를 이동할 때 이동하지 않으므로 어떻게 든 화면 좌표로 그려야합니다.

이런 식으로 달성하는 방법에 대한 조언을 사용할 수 있습니다.

+0

정규화 된 장치 좌표를 사용하는 것을 고려하면이 좌표계는 [3,1] 모든 범위의 좌표계입니다. 월드 또는 투영법이 어떻게 정의 되더라도이 좌표 공간은 항상 해당 범위를 가지며 (-1, -1, -1)의 점은 항상 맨 아래 왼쪽에 있고 가까운면에 있습니다. 이 좌표 공간은 뷰포트 변환 이전의 마지막 단계이므로 화면 좌표를 얻을 수 있으므로 뷰포트 차원을 알고 있으면 간단한 수학을 쉽게 수행하고 NDC로 쉽게 작업 할 수 있습니다. –

+0

NDC에서 작업 할 때의 이점은 기존 쉐이더를 사용할 수 있다는 것입니다. NDC에서 정의 된 것을 그리려는 경우 투영 및 모델 뷰용 항등 매트릭스 만 제공하면됩니다.이 모든 것에 대해 완전히 혼란 스러울 경우, 답변 형식으로 의사 코드를 작성하려고 할 수 있습니다. 그러나 그것은 내일까지 기다려야 할 것이다. –

+0

안녕하세요 @ AndonM.Coleman 내가 전에 이것을 시도한 적이 없으므로 더 많이 제공 할 수 있습니다. 감사합니다. – Hank

답변

1

이렇게하려면 뷰포트의 크기를 알아야합니다. 뷰포트 변환은 매우 간단 규모와 바이어스 동작 것을 알고, 효과적으로 다음과 같이 작동

나는 추한 ASCII 아트에 대해 사과
NDC Screen 
--- ------ 
-1.0 -> x   \_ X (Passed using glViewport (...)) 
1.0 -> x + width/

-1.0 -> y   \_ Y (Passed using glViewport (...)) 
1.0 -> y + height/

-1.0 -> near  \_ Z (Passed using glDepthRange (...)) 
1.0 -> far  /

, 나는 스택 오버플로가 LaTeX의 지원 바랍니다. X 및 Y, 정규화 디바이스 좌표 (NDC) 용 즉,

는 폭과 높이 단위 수에 맞도록 스케일링되고 하단 가장 왼쪽 점 (X, Y에 의해 정의 된). 당신이 신경 쓸 필요가없는 Z에 대해서, NDC는 정의 된 가까운 값에서부터 정의 된 먼 값까지 스케일됩니다.

역순 뷰포트 매핑 작업입니다. 화면 공간 좌표로 시작하여 NDC로 다시 작업하십시오.

  • NDC X = (* (화면 2.0 X - X 뷰포트 )/W 뷰포트 ) - 1.0;

  • NDC Y = (2.0 * (화면 Y - Y 뷰포트 )/뷰포트 H) - 1.0;

이 NDC (X, Y)를 생산하는 데 필요한 모든 단계를 제공해야합니다는 (X, Y) 화면 에서을 조정합니다. NDC 좌표를 얻으면 Model, View 및 Projection에 대한 항등 행렬을 사용하여 직접 쉐이더에 전달할 수 있습니다.

다른 대안은이 모든 것을 건너 뛰고 투영법과 창 (스크린 공간의 다른 이름) 간의 1 : 1 매핑을 정의하는 정사영 투영 행렬을 사용하는 것입니다.하지만 NDC를 가르치는 것이 더 좋습니다. 뷰포트 매핑이 장기적으로 작동합니다.