ทั้งหมดนี้เป็นคำตอบที่ดีและยังมีอีกวิธีหนึ่ง: (ไม่มีเสมอ)
เนื่องจากความนิยมที่เพิ่มขึ้นของความเป็นจริงเสมือนผู้คนที่ 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 );
}
จากตรงนั้นเป็นเรื่องของการตั้งค่า framebuffer ของคุณเพื่อใช้คุณสมบัตินี้:
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);
}
ในแอปพลิเคชันที่เชื่อมโยงกับ CPU ส่วนขยายนี้สามารถลดเวลาการเรนเดอร์ลงได้อย่างมากโดยเฉพาะกับฉากที่ซับซ้อนมากขึ้น :