예제 #1
0
        public virtual void Translate(double tx, double ty, double tz)
        {
            Transformacao4D newTransform = new Transformacao4D();

            newTransform.AtribuirTranslacao(tx, ty, tz);

            transform = newTransform.TransformMatrix(transform);
            boundBox.AtualizarBBox(this.vertices, transform);
        }
예제 #2
0
        public GameObject(List <Ponto4D> vertices, Tag tag = Tag.UNTTAGED)
        {
            transform = new Transformacao4D();
            boundBox  = new BoundBox();
            primitive = PrimitiveType.Lines;
            SetVertices(vertices);

            SetHasGravity(true);
        }
예제 #3
0
 public void AtualizarPontos(Transformacao4D transform)
 {
     maiorX = transform.TransformPoint(new Ponto4D(maiorX, 0, 0)).X;
     menorX = transform.TransformPoint(new Ponto4D(menorX, 0, 0)).X;
     menorY = transform.TransformPoint(new Ponto4D(0, menorY, 0)).Y;
     maiorY = transform.TransformPoint(new Ponto4D(0, maiorY, 0)).Y;
     menorZ = transform.TransformPoint(new Ponto4D(0, 0, menorZ)).Z;
     maiorZ = transform.TransformPoint(new Ponto4D(0, 0, maiorZ)).Z;
 }
예제 #4
0
        public Transformacao4D TransformMatrix(Transformacao4D t)
        {
            Transformacao4D result = new Transformacao4D();

            for (int i = 0; i < 16; ++i)
            {
                result.matriz[i] =
                    matriz[i % 4] * t.matriz[i / 4 * 4] + matriz[(i % 4) + 4] * t.matriz[i / 4 * 4 + 1]
                    + matriz[(i % 4) + 8] * t.matriz[i / 4 * 4 + 2] + matriz[(i % 4) + 12] * t.matriz[i / 4 * 4 + 3];
            }
            return(result);
        }
예제 #5
0
        public void AtualizarBBox(List <Ponto4D> pontos, Transformacao4D transform = null)
        {
            AtribuirBBox(pontos[0]);
            ProcessarCentroBBox();

            foreach (Ponto4D ponto in pontos)
            {
                AtualizarBBox(ponto.X, ponto.Y, ponto.Z);
            }

            if (transform != null)
            {
                AtualizarPontos(transform);
            }

            ProcessarCentroBBox();
        }
예제 #6
0
        public void Rotate(double degreeFactor)
        {
            Ponto4D         center = boundBox.ObterCentro;
            Transformacao4D translationTransform        = new Transformacao4D();
            Transformacao4D rotationTransform           = new Transformacao4D();
            Transformacao4D translationTransformInverse = new Transformacao4D();

            translationTransform.AtribuirTranslacao(center.X, center.Y, 0);

            rotationTransform.AtribuirRotacaoZ(Transformacao4D.DEG_TO_RAD * degreeFactor);

            center.InvertSignals();
            translationTransformInverse.AtribuirTranslacao(center.X, center.Y, 0);

            Transformacao4D finalTransform = translationTransform.TransformMatrix(rotationTransform);

            finalTransform = finalTransform.TransformMatrix(translationTransformInverse);
            transform      = finalTransform.TransformMatrix(transform);

            boundBox.AtualizarBBox(this.vertices, transform);
        }
예제 #7
0
        public virtual void Scale(double factor)
        {
            Ponto4D center = boundBox.ObterCentro;

            Transformacao4D globalTransform             = new Transformacao4D();
            Transformacao4D translationTransform        = new Transformacao4D();
            Transformacao4D translationTransformInverse = new Transformacao4D();
            Transformacao4D scaleTransform = new Transformacao4D();

            translationTransform.AtribuirTranslacao(center.X, center.Y, center.Z);
            globalTransform = translationTransform.TransformMatrix(globalTransform);

            scaleTransform.AtribuirEscala(factor, 1.0, 1.0);
            globalTransform = scaleTransform.TransformMatrix(globalTransform);

            center.InvertSignals();
            translationTransformInverse.AtribuirTranslacao(center.X, center.Y, center.Z);
            globalTransform = translationTransformInverse.TransformMatrix(globalTransform);

            transform = transform.TransformMatrix(globalTransform);

            boundBox.AtualizarBBox(this.vertices, transform);
        }