Let's look at implementing binocular view in our example program. So first, I create a new class called StereoView, and then I copy those from the reflection effects, that source code from the reflection effects onto this new StereoView. The Vertex Shader and the Fragment Shader are relatively simple as we only need to draw the 2D plane with a texture. In the Constructor, I set the width to be equal to the half of the screens width, height is the same as the height of the screen, and then calculate the aspect ratio. Then I used that to create the mDisplay Projection Matrix, which is used to project the 2D plane on the screen. Then, I set the View Matrix and also set the Model Matrix. In the case that is for the left view, we shift the ModelMatrix to left, and for the right view, we shift the ModelMatrix to the right. Now then we set the ProjectionMatrix for the left or right view. For left view, we set the frustum of the ProjectionMatrix to be equal to the frustum shift minus aspect, frustum shift plus aspect, -1, 1, near Z, far Z. Then set the model translation to equal to IOD over 2, and set the eye location to be minus IOD over two, zero, 0.1 for the View Matrix. Then for the right view, we do the same but the Projection Matrix will have different parameters of minus aspect minus frustum shift, and then aspect minus frustum shifts, minus one, one, near Z, far Z, and a different eye location. Then I create a new function called GetModelMatrix to help calculating the Model Matrix for drawing objects onto the Framebuffer. It takes the rotationx, rotatey, rotatez, as the parameters which are rotational angles of x, y, z, set by the user, and then calculate the Model Matrix by multiplying those Rotational Matrixes with the mFrame Rotation Matrix calculated earlier. Then I add the draw functions to basically draw the Framebuffer as a 2D plane on the screen. So in the MyRenderer, I added the two StereoView objects, mleftview and mrightview for the two StereoView. Then the onSurfaceChanged functions, I added the constructor for the mleftview and mrightview, setting the width and height of the views. In the onDrawView functions, I added the functions to draw the objects into the Framebuffer for both the left and right views. So for the left view, I first bind the Framebuffer, set the Viewports, and then find the Model Matrix, and set the Model View Projection Matrix. Then draw the object and unbind the Framebuffer, which is similar as per the previous example for joining the mirror, or reflection effect. Then I do the same functions, similar methods, for the right view to draw the objects onto the Framebuffer for the right view. After drawing the objects onto the Framebuffers of the left and right views, I then reset the Viewport to the screen's width and height and draw the left and right views on the screen. When I run the program, I see there is a 360 image of Imperial College. As you can see, there are two images on the screen side-by-side, which are the left and right view of the scene. As you can see, on the left image, you can see a little bit more on the left, and then on the right image, you can see a bit more on the right. This will create the disparity effect for the user to see the 3D.