ये सभी अच्छे उत्तर हैं, और फिर भी एक और तरीका है: (क्या हमेशा नहीं है?)
आभासी वास्तविकता की बढ़ती लोकप्रियता के कारण, OculusVR के लोगों ने "मल्टीव्यू" एक्सटेंशन की तिकड़ी विकसित की है, जिसे कहा जाता है:
- OVR_multiview ,
- OVR_multiview2 , और
- OVR_multiview_multisampled_render_to_texture
ये एक्सटेंशन एक ही दृश्य के कई दृश्यों को एक ड्रॉ कॉल में प्रस्तुत करने की अनुमति देते हैं, प्रत्येक दृश्य के दृष्टिकोण से एक ही दृश्य में एक ही दृश्य को प्रस्तुत करने की अतिरेक को समाप्त करते हैं। हालांकि वीआर के उद्देश्य के लिए बनाया गया है, डेवलपर केवल दो विचारों तक सीमित नहीं है। बल्कि, यह एक्सटेंशन 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);
और इसी तरह shader में:
#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);
}
सीपीयू-बाउंड एप्लिकेशन में, यह विस्तार नाटकीय रूप से प्रतिपादन समय को कम कर सकता है , विशेष रूप से अधिक जटिल दृश्यों के साथ :