2 augusti, 2019 Incopia

프레임버퍼 예제

이 예제는 위의 샘플 코드와 거의 동일하며 한 가지 차이점이 있습니다: glGenerateMipmapEXT는 밉맵을 생성하는 데 사용됩니다. 원할 때마다 밉맵을 생성하는 데 사용할 수 있습니다. 일반적으로 텍스처에 렌더링한 다음 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0)로 FBO를 바인딩해제한 다음 텍스처를 glBindTexture로 바인딩한 다음 glGenerateMipmapEXT를 호출합니다. 또한 glGenerateMipmapEXT에는 ”s”가 없습니다. 또한 깊이 버퍼로 사용할 렌더 버퍼뿐만 아니라 프레임 버퍼를 만들어야 하며 깊이 버퍼를 프레임 버퍼에 연결해야 합니다. 동일한 프레임 버퍼를 사용하여 텍스처에 대해 6개의 이미지를 모두 렌더링하여 필요에 따라 프레임 버퍼의 색상 버퍼 첨부 파일을 변경할 수 있습니다. 6개의 큐브맵 이미지 중 하나를 색상 버퍼로 연결하려면 gl.framebufferTexture2D()를 호출할 때 해당 큐브맵 텍스처 대상을 지정하기만 하면 됩니다. 예를 들어, 명령 지금 당신은 화면에 렌더링 할. 이 작업은 0을 glBindFramebuffer의 두 번째 매개 변수로 사용하여 수행됩니다.

렌더버퍼 이미지는 glFramebufferRenderbuffer()를 호출하여 첨부할 수 있습니다. 첫 번째 및 두 번째 매개 변수는 glFramebufferTexture2D()와 동일합니다. 세 번째 매개변수는 GL_RENDERBUFFER여야 하며 마지막 매개변수는 렌더버퍼 오브젝트의 ID입니다. 깊이 버퍼의 사용에 영향을 주는 또 다른 예는 렌더링 중에 값이 깊이 버퍼에 기록되는지 여부를 제어하는 부울 값인 깊이 마스크입니다. (깊이 테스트의 활성화 된 상태는 렌더링 하는 동안 깊이 버퍼에서 값을 사용 하는 여부를 결정 합니다., 깊이 마스크 는 깊이 버퍼에 새 값을 작성 하는 여부를 결정 합니다.) 깊이 버퍼에 쓰기 는 명령으로 해제 할 수 있습니다 glRenderbufferStorageMultisample() 만 FBO에 MSAA 렌더링을 사용할 수 있다는 것을 아는 것이 중요합니다. 그러나 MSAA FBO의 결과를 직접 사용할 수는 없습니다. 결과를 텍스처 또는 다중 샘플링되지 않은 다른 프레임 버퍼로 전송해야 하는 경우 glBlitFramebuffer()를 사용하여 결과를 단일 샘플 이미지로 변환(다운샘플링)해야 합니다. OpenGL 렌더링 파이프라인에서 형상 데이터와 텍스처가 변환되고 여러 테스트를 통과한 다음 마지막으로 화면에 2D 픽셀로 렌더링됩니다. OpenGL 파이프라인의 최종 렌더링 대상을 프레임 버퍼라고 합니다.

프레임 버퍼는 OpenGL에서 사용하는 2D 어레이 또는 스토리지의 모음입니다. 컬러 버퍼, 깊이 버퍼, 스텐실 버퍼 및 누적 버퍼. 기본적으로 OpenGL은 프레임 버퍼를 창 시스템에서 전적으로 만들고 관리하는 렌더링 대상으로 사용합니다. 이 기본 프레임 버퍼를 창 시스템 제공 프레임 버퍼라고 합니다. 샘플 코드는 현재 FBO의 정보를 보고하는 몇 가지 유틸리티 함수를 제공합니다. printFrame버퍼Info() 및 체크프레임 버퍼 상태()를 확인합니다. 소스 및 바이너리 다운로드 : fbo.zip (업데이트 : 2016-11-14) 엑스트라 : – 깊이 버퍼로 렌더링 : fboDepth.zip – 스텐실 버퍼를 사용하여 개체의 윤곽을 렌더링 : fboStencil.zip – glBlitFramebuffer () 를 사용하여 2 FBO 사이의 블릿팅 MSAA를 사용하여 텍스처로 렌더링: fboMsaa.zip 텍스처로 렌더링하고 깊이 테스트도 수행하려고 한다고 가정해 보겠습니다.