示例#1
0
        private void UpdateMatrices()
        {
            if (IsShadowCaster)
            {
                if (Type == LightType.Point)
                {
                    _viewMatrixShadow[0] = Matrix4.LookAt(Position, Position + new Vector3(1, 0, 0), new Vector3(0, -1, 0));
                    _viewMatrixShadow[1] = Matrix4.LookAt(Position, Position + new Vector3(-1, 0, 0), new Vector3(0, -1, 0));

                    _viewMatrixShadow[2] = Matrix4.LookAt(Position, Position + new Vector3(0, 1, 0), new Vector3(0, 0, 1));
                    _viewMatrixShadow[3] = Matrix4.LookAt(Position, Position + new Vector3(0, -1, 0), new Vector3(0, 0, -1));

                    _viewMatrixShadow[4] = Matrix4.LookAt(Position, Position + new Vector3(0, 0, 1), new Vector3(0, -1, 0));
                    _viewMatrixShadow[5] = Matrix4.LookAt(Position, Position + new Vector3(0, 0, -1), new Vector3(0, -1, 0));

                    for (int i = 0; i < 6; i++)
                    {
                        _viewProjectionMatrixShadow[i] = _viewMatrixShadow[i] * _projectionMatrixShadow;
                    }
                }
                else
                {
                    _viewMatrixShadow[0] = Matrix4.LookAt(Position, Target, KWEngine.WorldUp);
                    _frustumShadowMap.CalculateFrustum(_projectionMatrixShadow, _viewMatrixShadow[0]);
                    _viewProjectionMatrixShadow[0] = _viewMatrixShadow[0] * _projectionMatrixShadow;
                }
            }
        }
示例#2
0
 private void UpdateMatrices()
 {
     if (_type == LightType.DirectionalShadow)
     {
         _shadowViewMatrix = Matrix4.LookAt(Position, Target, KWEngine.WorldUp);
         _frustumShadowMap2.CalculateFrustum(_projectionMatrixShadow2, _shadowViewMatrix);
         _viewProjectionMatrixShadow2 = _shadowViewMatrix * _projectionMatrixShadow2;
     }
 }