multiplicación apropiado de matrices de rotación/traslación
Con el fin de rotación/traslación objeto (sólo rotación sobre el eje z y la traducción solamente en el plano xy) no sólo WRT a centro global (centro de dispositivo), sino también wrt otros puntos arbitrarios, creé un algoritmo, que es correcto (porque todos los codificadores senior que he discutido lo consideran correcto), pero está tomando mucho tiempo eliminar una traducción no deseada en la implementación (se creó el algoritmo el 4 de agosto y se implementó el mismo día, desde entonces el código ha sido revisado 15 veces).
Aquí es la implementación http://www.pixdip.com/opengles/transform.php#ALGO1
Las líneas de código que están produciendo traducción no deseado están en el interior:
private static void updateModel(int upDown, float xAngle, float yAngle, float zAngle) {
y se enumeran a continuación:
Matrix.multiplyMV(GLES20Renderer._uBodyCentreMatrix, 0, GLES20Renderer._ModelMatrixBody, 0, GLES20Renderer._uBodyCentre, 0);
objX = GLES20Renderer._uBodyCentreMatrix[0];
objY = GLES20Renderer._uBodyCentreMatrix[1];
La traducción no deseada a lo largo de + Y persiste incluso si se realizan los siguientes cambios:
objY = _uBodyCentreMatrix[1] - _uBodyCentre[1];
zAngle = 0;
ds = 0;
El valor -0.545867f
se añade a la coordenada Y en cada llamada a onDrawFrame()
, debido a estos campos de la clase de procesador:
private static final float[] _uBodyCentre = new float[]{-0.019683f, -0.545867f, -0.000409f, 1.0f};
protected static float[] _uBodyCentreMatrix = new float[4];
en http://www.pixdip.com/opengles/transform.php#FIELDS
que necesitan ayuda para entender por qué ocurre esto traducción no deseada, lo que es exactamente malo con las transformaciones, o es el algoritmo que es erróneo.
Can Gimbal lock ser un problema aquí?
Por favor, no me pidas que realice/practique ejemplos más simples, porque he preparado la clase Renderer para rotación/traducción sobre el eje z global, y esta nueva tarea que me gusta utiliza la misma clase con ligera modificación en updateModel()
(tenga en cuenta que la rotación deseada es sólo alrededor del eje Z y la traducción solamente en el plano xy)
[API 10-> 15]
la clase de procesador real tiene dos objetos: torreta del tanque (boquilla) y cuerpo del tanque, mientras torreta (boquilla) ha indeseados hacia adelante traducción, el cuerpo tiene indeseados traducción hacia atrás
Apk una traducción/rotación alrededor del centro del dispositivo (que es fácil de hacer en OpenGLES 2.0): http://www.pixdip.com/opengles/global.php
Apk para la traducción/rotación alrededor de puntos arbitrarios (que ha indeseados traslación a lo largo + y): http://www.pixdip.com/opengles/local.php
Apk una traducción/rotación alrededor de puntos arbitrarios en el que UpdateModel() se llama 4 veces solamente: http://www.pixdip.com/opengles/limited.php y código necesario (w que debería ser suficiente) está aquí: http://www.pixdip.com/opengles/code.php
Partes del objeto (boquilla/torreta, cuerpo) giran actualmente sobre sus propios centros, no el centro del objeto (que es _playerCentre), lo modificaré más adelante.
he tratado de demostrar la lógica http://www.pixdip.com/opengles/images.php
yo no lo entiendo, ¿por qué tienes traducción no deseada? ¿Tu algoritmo los está produciendo? ¿De dónde están viniendo? Sugeriría que elimines la traducción no deseada antes de que surjan. – RaphMclee
Las líneas de código que producen traducción no deseada no se pueden eliminar porque son parte del algoritmo, no tengo otra opción. El algoritmo es correcto o no, todavía no estoy seguro, y la implementación está produciendo una traducción automática, no sé cómo eliminarlo, porque tengo un solo algoritmo y no puedo usar uno alternativo, pruebe el API para entender es más claro – GLES
Veo que ha puesto mucho esfuerzo en esta cuestión, pero debo decir que realmente no puedo entender de lo que está hablando. No puedo entender lo que está tratando de decir en su página 'images.php', y descargué su aplicación' local.php' pero parece que no hace nada. Solo veo dos botones y un cuadrado morado, y no sucede nada cuando toco los botones. Usted sigue mencionando una traducción no deseada, pero no está claro en ninguna parte exactamente qué es o qué es lo que no desea. ¿Puedes tratar de vincular una sola imagen y marcar claramente con un círculo y anotar cuál es el problema? – Tim