He estado siguiendo un tutorial XNA de The Hazy Mind Tengo un objeto base que tiene una Posición (Vector3) y una Rotación (Quaternion). El modelo de objetos se parece a esto Rotar 6 lados de un bloque
A partir de la aplicación de la cámara en el tutorial, he hecho una copia de la rotación y giran métodos y las implantó en el objeto
public virtual void Rotate(Vector3 axis, float angle)
{
axis = Vector3.Transform(axis, Matrix.CreateFromQuaternion(Rotation));
Rotation = Quaternion.Normalize(Quaternion.CreateFromAxisAngle(axis, angle) * Rotation);
}
public virtual void Revolve(Vector3 target, Vector3 axis, float angle)
{
Vector3 revolveAxis = Vector3.Transform(axis, Matrix.CreateFromQuaternion(Rotation));
Quaternion rotate = Quaternion.Normalize(Quaternion.CreateFromAxisAngle(revolveAxis, angle));
Position = Vector3.Transform(Position - target, Matrix.CreateFromQuaternion(rotate)) + target;
Rotate(axis, angle);
}
mi bloque objeto crea 6 casos de Quad y llama al método render en cada objeto Quad, que tienen desplazamientos y rotaciones asignadas en cada quad para formar un bloque de textura con este aspecto:
y ahora tenemos el problema real, llamando Girar en mi bloque obj ect hace que el objeto en sí cambie la rotación y mis objetos Quad no giren, así que implementé una nueva función de Girar en mi objeto Block.
public override void Rotate(Vector3 axis, float angle)
{
for (int i = 0; i < mySides.Length; i++)
{
Quad side = mySides[i];
side.Revolve(this.Position, axis, angle);
}
}
Sin embargo, esto no me ha dado el resultado esperado, como se ve aquí:
La solución equivocada
La siguiente solución funciona, pero no va a ser muy genérico y será limitado: Un montón de instrucciones if que comprueban en qué eje quiero girar y luego gira cada lado (objeto Quad) de la manera correcta.
La solución adecuada
alternativa que podría hacer la prestación del Quad objetos depende de la rotación del objeto del bloque (su padre), pero estoy seguro de cómo hacer esto.
La tercera y última opción es hacer que el método de rotación actualice cada rotación y posición de los objetos cuádruples con los valores correctos, esto no estoy seguro de cómo hacerlo.
La pregunta
Así que lo que estoy pidiendo es algunas ideas o pensamientos sobre esto, tal vez algunos enlaces y/o tutoriales que explican cómo usar cuaterniones en XNA, preferiblemente en una forma visual.
Saludos, mirando hacia adelante a la entrada :)