/// <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); }
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 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); }