Ejemplo n.º 1
0
        internal override void Render(MeshDrawer[] meshes, Camera camera, UIEngine ui)
        {
            GL.Viewport(0, 0, camera.Width, camera.Height);
            var reye = CalcRightEyePosition(camera);

            camera.Node.GetTransform.Position -= reye;
            //render scene to left eye
            camera.CalcLook();


            GL.BindFramebuffer(FramebufferTarget.Framebuffer, leftBuffer.RenderBufferDraw);
            GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

            //render background first due to model transperancy
            if (camera.Background != null)
            {
                camera.Background.DrawBackground(camera);
            }

            RenderScene(meshes, camera);
            ui.DrawWorldUI(camera);

            leftBuffer.DownSample();
            vrSystem.SetLeftEye(leftBuffer.RenderTexture.textureID);


            //render scene to right eye
            camera.Node.GetTransform.Position += 2 * reye;
            camera.CalcLook();

            //render scene to left eye
            GL.BindFramebuffer(FramebufferTarget.Framebuffer, rightBuffer.RenderBufferDraw);
            GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

            //render background first due to model transperancy
            if (camera.Background != null)
            {
                camera.Background.DrawBackground(camera);
            }

            RenderScene(meshes, camera);
            ui.DrawWorldUI(camera);

            rightBuffer.DownSample();
            vrSystem.SetRightEye(rightBuffer.RenderTexture.textureID);

            //return camera back
            camera.Node.GetTransform.Position -= reye;
        }