기본적으로 뷰포트 / 창 크기가 변경 될 때 렌더링 된 이미지의 왜곡이나 스트레칭을 제거하는 방법을 알고 싶습니다.
다음 이미지는 내가 말하는 왜곡 / 스트레칭을 보여줍니다.
원본 이미지 (스퀘어 창)
왜곡 / 늘려 진 이미지 (사각형 창)
이상적으로, 두 번째 이미지는 가로로 늘이지 않고 구를 표시해야하며 더 큰 창 크기를 설명하기 위해 더 많은 장면을 사용자에게 노출해야합니다.
어떻게 할 수 있습니까?
OpenGL을 사용하여 이미지를 렌더링하고 있으며 호출을 통해 원근 투영을 사용합니다.
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(60, window.width/window.height, 0.01f, 100.0f)
가로 세로 비율 width/height
은 내가 접한 모든 문서 / 자습서에 따라 다르므로 정확하지 않을 것으로 예상됩니다. 그러나 내 의심은 그것이 스트레칭 문제에 영향을 미친다는 것입니다.
생각 후
솔직히이 문제에 대해 더 많이 생각할 때, 해결책은 포비 (y- 방향의 시야) 각도와 종횡비 사이에 직접적인 비례 관계를 포함한다고 믿었습니다.
위의 이미지를 참조로 사용하여 가로가 늘어 나면 가로 가로가 늘어 나면 렌더링 된 이미지의 비례를 '고정'하는 세로 세로 늘림이 발생하도록 포비 각도가 커져야한다는 것은 매우 타당 해 보입니다.
마찬가지로 폭을 줄이려면 포비 각도를 줄여야합니다.
최신 정보:
그래서, 이것을 더 조사한 후, 다음과 같이 시청 절두체를 설정하는 방식을 변경하기로 결정했습니다.
gluPerspective(60 * (float)window.width/window.height, (float)window.width/window.height, 0.01f, 100.0f)
그리고 내 기대가 정확하여 비례 문제를 해결했습니다. 그러나 원하는 결과를 얻지 못했습니다. 창 너비가 증가하면 렌더링 된 이미지가 작아 지지만 구는 실제로 원형입니다. 대신 구의 크기가 전혀 바뀌지 않아야합니다. 표시되는 장면의 양만 변경되어야합니다.