Ejemplo n.º 1
0
 public void SetPositionDirection(Vector3 NewPosition, Vector3 Direction, Vector3 Axis, bool IsOrthogonal)
 {
     RenderCamera.Position = NewPosition;
     if (IsOrthogonal)
     {
         RenderCamera.GenerateOrthogonalViewMatrix(RenderCamera.Position, RenderCamera.Position + Direction, Axis);
     }
     else
     {
         RenderCamera.GenerateLookAtViewMatrix(RenderCamera.Position, RenderCamera.Position + Direction, Axis);
     }
 }
Ejemplo n.º 2
0
        private void RenderCubeMap(GraphicsDevice Graphics, Vector3 Position)
        {
            List <Geometry3D> RenderTargetGeometries = SceneNode.GetAllGeometries(Position);

            for (int i = 0; i < CubeDirections.Length; i++)
            {
                Graphics.SetRenderTarget(RenderTarget);
                Graphics.DepthStencilState = DepthStencilState.Default;

                RenderCamera.GenerateLookAtViewMatrix(RenderCamera.Position, RenderCamera.Position + CubeDirections[i], CubeUpVectors[i]);

                Matrix CameraProjection = RenderCamera.ProjectionMatrix;
                Matrix CameraView       = RenderCamera.ViewMatrix;
                Graphics.Clear(Color.CornflowerBlue);

                for (int j = 0; j < RenderTargetGeometries.Count; j++)
                {
                    Geometry3D Geom   = RenderTargetGeometries[j];
                    Effect     Shader = Geom.Shader;

                    if (Geom.HasCull)
                    {
                        continue;
                    }

                    if (Shader.GetType() == typeof(BasicEffect))
                    {
                        BasicEffect CastShader = (BasicEffect)Shader;
                        CastShader.Projection = CameraProjection;
                        CastShader.View       = CameraView;
                        CastShader.World      = Matrix.CreateTranslation(Geom.Position);
                    }
                    else
                    {
                        Geom.Shader.Parameters["WorldViewProjection"].SetValue(CameraView * CameraProjection);
                    }

                    foreach (var pass in Shader.CurrentTechnique.Passes)
                    {
                        pass.Apply();
                        Graphics.SetVertexBuffer(Geom.VertexBuffer);
                        Graphics.DrawPrimitives(PrimitiveType.TriangleList, 0, Geom.VertexBuffer.VertexCount / 3);
                    }
                }
                Graphics.SetRenderTarget(null);
                Color[] Data = new Color[RenderTarget.Width * RenderTarget.Height];
                RenderTarget.GetData(Data);

                CubeMap.SetData(CubeFaces[i], Data);
            }
            HasRendered = true;
        }