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); }
public GameObject(List <Ponto4D> vertices, Tag tag = Tag.UNTTAGED) { transform = new Transformacao4D(); boundBox = new BoundBox(); primitive = PrimitiveType.Lines; SetVertices(vertices); SetHasGravity(true); }
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; }
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); }
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(); }
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); }
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); }