UTNianos

Versión completa: TGC : Centro de rotación de un Mesh
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Alguien que esté cursando o que haya cursado Técnicas de gráficos por computadora, tienen idea como cambiar el centro de rotación de un TgcMesh?
Les comento un poco más... estamos haciendo un TP que consiste en un juego que posee un barco. Como todos saben, cuando un barco gira, lo hace respecto a su popa... el problema es que actualmente la malla me gira respecto a la proa y no se parece en nada al movimiento que deseo. Estuve mirando la declaración de la clase y vi que el método rotateY(float angle) gira la malla respecto al plano XZ que vendría a ser el mar... pero lo está haciendo respecto al punto indicado y no es lo que quiero. Existe algún setter para cambiar ese punto de rotación? Alguien se topó con un problema similar?. Gracias de antemano!
hasta donde se, el framework no lo hace solo.
lo que tenes que hacer es armarte tu propia matriz de rotacion. para que gire en base a un pivote arbitrario.

no tengo a mano la definicion de esa matriz, a la noche me fijo si la encuentro.
Dado que la rotación siempre se realiza respecto del 0,0,0 actual, para rotar en base a otro centro de rotación que no sea el 0,0,0, vas a tener que:

1) trasladar la malla en base al vector centro actual - nuevo centro (centro actual debería ser 0,0,0 si no hacés nada raro antes de esta transformación).
2) realizar la rotación.
3) trasladar la malla a su posición inicial.

Ej:

Vector3 nuevoCentro = new Vector3(0, 2, 0);
Matrix m = Matrix.Translation(-nuevoCentro) * Matrix.RotationZ(anguloRotación) * Matrix.Translation(nuevoCentro);

Si querés probar un poco, reemplazá la línea 108 del ejemplo Transformations.cs por:
Vector3 nuevoCentro = new Vector3(0, 2, 0);
matRotate = Matrix.Translation(-nuevoCentro) * Matrix.RotationZ((float)GuiController.Instance.Modifiers["rotationZ"]) * Matrix.Translation(nuevoCentro);

Saludos!
URLs de referencia