2017-11-22 5 views
0

프레임 버퍼와 뷰포트 간의 관계에 대해 약간 혼란 스럽습니다. screenWidth + 1 및 screenHeight 크기의 기본 FBO를 사용하는 응용 프로그램이 있습니다. 나는 X11 (적어도 우리가 사용하는 보드에서)에서 전체 화면을 가능하게하는 유일한 방법을 찾았 기 때문에 너비에 하나를 추가했습니다.프레임 버퍼 크기와 뷰포트 관계

어떤 경우에도 screenWidth & screenHeight (+1 무시)에 따라 투영 및 카메라 매트릭스를 만듭니다. 창문과 주 FBO를 만들 때를 제외하고는이 +1에 실제로 다른 +1이 없습니다. 그래서 모든 것이 모두 잘 작동하고 FBO가 끝날 때 픽셀이 비어있는 것으로 예상됩니다.

내가 사용하는 뷰포트는 glViewport (0, 0, screenWidth, screenHeight)로 설정됩니다. 프로젝션이 y 축에서 뒤집 혔기 때문에 y 좌표는 0입니다. 그게 꽤 오래 동안 있었고 (나는 생각했다.) 그 +1로 인한 인공물이 없었다.

하지만 빠른 테스트를 한 결과 +1이 +500 또는 다른 큰 숫자로 변경되었으며 장면의 일부 개체가 오른쪽으로 이동한다는 것을 알았습니다. FBO의 패딩 (padding)은 물건에 영향을 미치는 것처럼 보입니다.

왜 이런 경우입니까? 뷰포트는 정규화 된 장치 좌표를 창 좌표로 변환합니다. 그래서 올바르게 viewWidth와 viewHeight를 사용하여 이것을 이해한다면 FBW의 screenWidth x screenHeight 영역을 채우고 마지막에 여분의 픽셀을 제외해야합니다.

누군가가이 문제에 대해 밝힐 수 있습니까? FBO의 크기에 맞게 내 뷰포트를 변경해야합니까?

+1

렌더링 한 데이터가 FBO에 표시되지 않으므로 실제로는 화면에 표시되도록 _something_을 수행해야합니다. – derhass

답변

1

전체 화면 렌더링을 위해 여분의 픽셀이 필요하다는 것에 대해서는 전혀 몰라요.

그러나 뷰포트에 대한 이해는 귀하에게 있습니다. 이는 정규화 된 장치 좌표 (-1에서 +1)를 FBO 첨부 파일의 픽셀 좌표에 매핑하는 데 사용됩니다. 정규화 된 장치 좌표의 (-1, -1)은 뷰포트의 왼쪽 하단 모서리입니다 (x 및 y 매개 변수 glViewport()). (+1, +1)은 뷰포트의 오른쪽 위 모서리입니다. 따라서 FBO에서 렌더링 된 서페이스의 크기 (픽셀 단위)는 텍스처 첨부를 더 크게 만들 때 변경되지 않습니다.

렌더링 후 실제로 무언가를 표시하려면 렌더링 된 텍스처에서 창의 프레젠테이션 공간으로 픽셀을 전송해야합니다. 일반적으로 default framebuffer입니다. 일반적으로 렌더링 FBO (멀티 샘플링이 가능할 수도 있음)의 기본 프레임 버퍼로 blit이 지정됩니다. 렌더링 파이프 라인의 블리 팅 파트에 문제가있을 것으로 예상됩니다.

+0

설명해 주셔서 감사합니다. 문제는 프로젝션 및 카메라 매트릭스를 포함하여 응용 프로그램에서 패딩 된 크기를 사용하고 있었기 때문에 모든 것이 엉망이었습니다. 나는 이제 여분의 픽셀을 무시하고 적절한 크기를 사용했는지 확인했다. 뷰포트와 FBO의 색상 첨부 사이의 관계를 명확히 해줄 때이를 답변으로 표시하겠습니다. – DolphinAndWailu