이것들은 모두 좋은 대답이지만 다른 방법이 있습니다. (항상 그렇지 않습니까?)
가상 현실의 인기가 높아짐에 따라 OculusVR 직원들은 다음과 같은 "Multiview"확장 트리오를 개발했습니다.
- OVR_multiview ,
- OVR_multiview2 및
- OVR_multiview_multisampled_render_to_texture
이러한 확장을 사용하면 동일한 장면의 여러 뷰를 단일 드로우 콜로 렌더링 할 수 있으므로 각 눈의 관점에서 동일한 상태로 동일한 장면을 렌더링하는 중복성이 제거됩니다. VR의 목적으로 개발되었지만 개발자가 반드시 두 가지 관점으로 제한되는 것은 아닙니다. 오히려이 확장은 MAX_VIEWS_OVR이 지정한 만큼의 보기를 허용 합니다.
이러한 확장을 사용하기 전에 개발자는 다음 코드를 추가하여 사용자의 그래픽 드라이버에서 지원 여부를 확인해야합니다.
const GLubyte* extensions = GL_CHECK( glGetString( GL_EXTENSIONS ) );
char * found_extension = strstr( (const char*)extensions, "GL_OVR_multiview" );
if (NULL == found_extension)
{
exit( EXIT_FAILURE );
}
여기에서이 기능을 활용하기 위해 프레임 버퍼를 설정해야합니다.
glFramebufferTextureMultisampledMultiviewOVR = PFNGLFRAMEBUFFERTEXTUREMULTISAMPLEDMULTIVIEWOVR(eglGetProcAddress("glFramebufferTextureMultisampleMultiviewOVR"));
glFramebufferTextureMultisampledMultiviewOVR (GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, textureID, 0, 0, 2);
마찬가지로 셰이더에서도
#version 300 es
#extension GL_OVR_multiview : enable
layout(num_views = 2) in;
in vec3 vertexPosition;
uniform mat4 MVP[2];
void main(){
gl_Position = MVP[gl_ViewID_OVR] * vec4(vertexPosition, 1.0f);
}
CPU 바운드 응용 프로그램에서이 확장 기능은 특히 복잡한 장면에서 렌더링 시간을 크게 줄일 수 있습니다 .