/// <summary>
        /// Prepares the specified eye side for 3D rendering.
        /// </summary>
        /// <param name="eye">The <see cref="Stereo3DEye"/>.</param>
        public void Prepare(Stereo3DEye eye)
        {
            _currentEye = eye;

            switch (_activeMode)
            {
            case Stereo3DMode.Oculus:
                _currentEye = eye;
                const int cuttingEdge = 100;

                switch (eye)
                {
                case Stereo3DEye.Left:
                    _rc.Viewport(0, cuttingEdge, _screenWidth / 2, _screenHeight - cuttingEdge);
                    break;

                case Stereo3DEye.Right:
                    _rc.Viewport(_screenWidth / 2, cuttingEdge, _screenWidth / 2, _screenHeight - cuttingEdge);
                    break;
                }

                break;
            }

            _rc.ClearColor = _clearColor;
            _rc.Clear(ClearFlags.Color | ClearFlags.Depth);
        }
        private void RenderDistortedEye(Stereo3DEye eye)
        {
            var scale   = new float2(0.1469278f, 0.2350845f);
            var scaleIn = new float2(2, 2.5f);
            var hdmWarp = new float4(K0, K1, K2, K3);

            float2 lensCenter;
            float2 screenCenter;

            if (eye == Stereo3DEye.Left)
            {
                _rc.SetShaderParamTexture(_shaderTexture, _contentLTex);

                lensCenter   = new float2(0.3125f, 0.5f);
                screenCenter = new float2(0.25f, 0.5f);
            }
            else
            {
                _rc.SetShaderParamTexture(_shaderTexture, _contentRTex);

                lensCenter   = new float2(0.6875f, 0.5f);
                screenCenter = new float2(0.75f, 0.5f);
            }

            _rc.SetShaderParam(_lensCenterParam, lensCenter);
            _rc.SetShaderParam(_screenCenterParam, screenCenter);
            _rc.SetShaderParam(_scaleParam, scale);
            _rc.SetShaderParam(_scaleInParam, scaleIn);
            _rc.SetShaderParam(_hdmWarpParam, hdmWarp);

            _rc.Render(eye == Stereo3DEye.Left ? _guiLImage.GUIMesh : _guiRImage.GUIMesh);
        }
Beispiel #3
0
        private void RenderColorMaskedEye(Stereo3DEye eye, bool red, bool green, bool blue, bool alpha)
        {
            _rc.SetShaderParamTexture(_shaderTexture, eye == Stereo3DEye.Left ? _contentLTex : _contentRTex);
            _rc.ColorMask(red, green, blue, alpha);

            _rc.Render(_guiLImage.GUIMesh);
        }
        /// <summary>
        /// Aligns the <see cref="Stereo3DEye"/> to the target point.
        /// </summary>
        /// <param name="eye">The <see cref="Stereo3DEye"/>.</param>
        /// <param name="eyeV">The eye vector.</param>
        /// <param name="target">The target.</param>
        /// <param name="up">Up vector.</param>
        /// <returns>A Matrix that represents the current eye's orientation towards a target point.</returns>
        public float4x4 LookAt3D(Stereo3DEye eye, float3 eyeV, float3 target, float3 up)
        {
            var x = (eye == Stereo3DEye.Left)
                ? eyeV.x - Stereo3DParams.EyeDistance
                : eyeV.x + Stereo3DParams.EyeDistance;

            var newEye    = new float3(x, eyeV.y, eyeV.z);
            var newTarget = new float3(target.x, target.y, target.z);

            // change lookat ?? lefthanded change
            return(float4x4.LookAt(newEye, newTarget, up));
        }
        //LookAt3D - Frustum Shift
        public override float4x4 LookAt3D(Stereo3DEye eye, float3 eyeV, float3 target, float3 up)
        {
            //shifttranslation
            var x = (eye == Stereo3DEye.Left)
                ? eyeV.x - Iod / 2
                : eyeV.x + Iod / 2;

            var newEye    = new float3(x, eyeV.y, eyeV.z);
            var newTarget = new float3(x, target.y, target.z);

            return(float4x4.LookAt(newEye, newTarget, up));
        }
        private void RenderDistortedEye(Stereo3DEye eye)
        {
            var scale = new float2(0.1469278f, 0.2350845f);
            var scaleIn = new float2(2, 2.5f);
            var hdmWarp = new float4(K0, K1, K2, K3);

            float2 lensCenter;
            float2 screenCenter;

            if (eye == Stereo3DEye.Left)
            {
                _rc.SetShaderParamTexture(_shaderTexture, _contentLTex);

                lensCenter = new float2(0.3125f, 0.5f);
                screenCenter = new float2(0.25f, 0.5f);
            }
            else
            {
                _rc.SetShaderParamTexture(_shaderTexture, _contentRTex);

                lensCenter = new float2(0.6875f, 0.5f);
                screenCenter = new float2(0.75f, 0.5f);
            }

            _rc.SetShaderParam(_lensCenterParam, lensCenter);
            _rc.SetShaderParam(_screenCenterParam, screenCenter);
            _rc.SetShaderParam(_scaleParam, scale);
            _rc.SetShaderParam(_scaleInParam, scaleIn);
            _rc.SetShaderParam(_hdmWarpParam, hdmWarp);

            _rc.Render(eye == Stereo3DEye.Left ? _guiLImage.GUIMesh : _guiRImage.GUIMesh);
        }
        private void RenderColorMaskedEye(Stereo3DEye eye, bool red, bool green, bool blue, bool alpha)
        {
            _rc.SetShaderParamTexture(_shaderTexture, eye == Stereo3DEye.Left ? _contentLTex : _contentRTex);
            _rc.ColorMask(red, green, blue, alpha);

            // change lookat ?? lefthanded change
            _rc.Render(_guiLImage.GUIMesh);
        }
        /// <summary>
        /// Prepares the specified eye side for 3D rendering.
        /// </summary>
        /// <param name="eye">The <see cref="Stereo3DEye"/>.</param>
        public void Prepare(Stereo3DEye eye)
        {
            _currentEye = eye;

            switch (_activeMode)
            {
                case Stereo3DMode.Oculus:
                    _currentEye = eye;
                    const int cuttingEdge = 100;

                    switch (eye)
                    {
                        case Stereo3DEye.Left:
                            _rc.Viewport(0, cuttingEdge, _screenWidth/2, _screenHeight - cuttingEdge);
                            break;

                        case Stereo3DEye.Right:
                            _rc.Viewport(_screenWidth/2, cuttingEdge, _screenWidth/2, _screenHeight - cuttingEdge);
                            break;
                    }

                    break;
            }

            _rc.ClearColor = _clearColor;
            _rc.Clear(ClearFlags.Color | ClearFlags.Depth);
        }
        /// <summary>
        /// Aligns the <see cref="Stereo3DEye"/> to the target point.
        /// </summary>
        /// <param name="eye">The <see cref="Stereo3DEye"/>.</param>
        /// <param name="eyeV">The eye vector.</param>
        /// <param name="target">The target.</param>
        /// <param name="up">Up vector.</param>
        /// <returns>A Matrix that represents the current eye's orientation towards a target point.</returns>
        public float4x4 LookAt3D(Stereo3DEye eye, float3 eyeV, float3 target, float3 up)
        {
            var x = (eye == Stereo3DEye.Left)
                ? eyeV.x - Stereo3DParams.EyeDistance
                : eyeV.x + Stereo3DParams.EyeDistance;

            var newEye = new float3(x, eyeV.y, eyeV.z);
            var newTarget = new float3(target.x, target.y, target.z);

            // change lookat ?? lefthanded change
            return float4x4.LookAt(newEye, newTarget, up);
        }
 /// <summary>
 /// Extends base. Prepare(Stereo3DEye eye) by setting projrction matrix whether left or right eye is rendered
 /// </summary>
 /// <param name="eye"></param>
 public override void Prepare(Stereo3DEye eye)
 {
     _rc.Projection = (eye == Stereo3DEye.Left) ? _leftFrustum : _rightFrustum;
     base.Prepare(eye);
 }