/// <summary>
 /// Visits the specified transformation to collect data if required by the current Visitor derivate.
 /// </summary>
 /// <param name="transformation">The transformation.</param>
 public virtual void Visit(Transformation transformation)
 {
 }
 /// <summary>
 /// Init is called upon creation of an ActionCode Object and utilizes the access to a SceneEntitie's transform and renderer objects.
 /// </summary>
 /// <param name="entity">The owner entity of this component.</param>
 public void Init(SceneEntity entity)
 {
     SceneEntity = entity;
     transform = SceneEntity.transform;
     renderer = SceneEntity.renderer;
 }
        /// <summary>
        /// Adds the transform object to the internal stack.
        /// </summary>
        /// <param name="transform">The transform.</param>
        private void AddTransform(Transformation transform)
        {
            if (_mtxModelViewStack.Count > 0)
            {
                if (transform.GlobalMatrixDirty)
                {
                    transform.Matrix = transform.GlobalMatrix*float4x4.Invert(_mtxModelViewStack.Peek());
                    transform.SetGlobalMat(_mtxModelViewStack.Peek()*transform.Matrix);
                    _mtxModelViewStack.Push(_mtxModelViewStack.Pop()*transform.Matrix);
                    //Debug.WriteLine("Matrix: " + transform.GlobalMatrix + " Point: " + transform.GlobalPosition);

                        _hasTransform.Pop();
                        _hasTransform.Push(true);

                    if (HasRenderingTriple())
                    {
                        AddRenderJob(_mtxModelViewStack.Peek(), _meshStack.Peek(), _RendererStack.Peek());
                    }
                    return;
                }

                transform.SetGlobalMat(_mtxModelViewStack.Peek()*transform.Matrix);
                _mtxModelViewStack.Push(_mtxModelViewStack.Pop()*transform.Matrix);
                //Debug.WriteLine("Matrix: " + transform.GlobalMatrix + " Point: " + transform.GlobalPosition);

                    _hasTransform.Pop();
                    _hasTransform.Push(true);

                if (HasRenderingTriple())
                {
                    AddRenderJob(_mtxModelViewStack.Peek(), _meshStack.Peek(), _RendererStack.Peek());
                }

            }else
            {
                _mtxModelViewStack.Push(transform.GlobalMatrix);
                //Debug.WriteLine("Matrix: " + transform.GlobalMatrix + " Point: " + transform.GlobalPosition);

                    if (_hasTransform.Count > 0)
                    {
                        _hasTransform.Pop();
                    }

                    _hasTransform.Push(true);

                if (HasRenderingTriple())
                {
                    AddRenderJob(_mtxModelViewStack.Peek(), _meshStack.Peek(), _RendererStack.Peek());
                }

            }
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="Camera"/> class. The ViewMatrix will be set to a provided float 4x4 matrix.
 /// </summary>
 /// <param name="cameratransformation">The matrix that will become the Viewmatrix.</param>
 public Camera(Transformation cameratransformation)
 {
     ViewMatrix = cameratransformation.GlobalMatrix;
     ProjectionType(proj);
 }
 /// <summary>
 /// Visits the specified <see cref="Transformation"/>.
 /// </summary>
 /// <param name="transform">The transformation instance.</param>
 public override void Visit(Transformation transform)
 {
     AddTransform(transform);
 }