Sé que la rotación 3D está bien documentada en SO y en muchos otros sitios, pero a pesar de leer innumerables explicaciones, todavía no he descubierto dónde me estoy equivocando. Mi formación es en arte y diseño, no en matemática y programación, y nunca estoy realmente seguro de si mi ángulo de ataque (sin juego de palabras) es el correcto. En lugar de pegar un mosaico de mi lóbrego código, incluyo una imagen que describe mi problema. Lo que realmente me gustaría es un desglose pormenorizado paso a paso de cómo resolverlo. El seudocódigo es útil, pero aprenderé más si alguien me apunta en la dirección correcta o señala los peligros comunes.Giro 3D con eje & ángulo
Rojo = eje X, Verde = eje-y, Azul = Z-Axis
Magenta vectores = origen -> algunos X, Y, Z punto
cubo magenta = promedio de los puntos finales de los dos vectores magenta (¿hay un mejor nombre para esto?)
Blanco vector = producto cruzado de los dos vectores magenta (extendido para displ ay, vector real es normalizada)
Cyan cubo de objeto = rotación fallan
He usado previamente Away3D y Papervision; en estas bibliotecas, la aplicación de ángulos de Euler a las propiedades de rotaciónX, rotaciónY o rotaciónZ de un objeto rotará el objeto localmente, como si estuviera en el origen, independientemente de su posición real. Con Three.js, este no es el caso. La modificación de las propiedades rotation.x y rotation.y de un objeto produce un efecto extraño donde el objeto aparentemente se inclina un poco en el eje Z. Aún más confuso es que esto sucede cuando el objeto descansa en el origen. Pensé que quizás usar Quaternion -> Matrix o Axis/Angle -> funciones de Matrix resolvería mi problema, pero no los dados. Parece que hay un concepto central que no estoy obteniendo.
De todos modos, lo que quiero hacer es orientar el cubo al vector de producto cruzado (blanco), de modo que la parte superior del cubo esté orientada en ese sentido. Entonces me gustaría rotar el cubo a lo largo del mismo eje. La imagen que adjunté muestra el resultado de más horas de las que me gustaría admitir tratando de lograr este resultado. Mi código vagamente se parece a esto:
axis = Vector3.cross(a, b)
axis.normalize()
angle = 45 * TO_RADIANS;
quat = AxisAngle2Quaternion(axis, angle)
rot = Quaternion2Matrix(quat)
cube.matrix = rot
Gracias de antemano,
Casey
Edición: A partir de una recompensa
Tal vez estoy mal entendido cómo se supone que esto trabajo. Aquí está otra imagen:
Am I incorrecta en el pensamiento de que este vector magenta es el eje, y las flechas de color naranja indican la rotación alrededor de este eje en función del ángulo? De una forma u otra, quiero orientar el cubo cian en función de un vector direccional y girarlo. ¿¡Qué estoy haciendo mal!?
Nadie reacciona, pero en realidad creo que tu pregunta es una de los mejores formulados que vi aquí hasta ahora. Tal vez nadie lo sabe? También me gustaría ver una respuesta aquí. – erikbwork
Tal vez se están alejando del aspecto Three.js ... Esperaba que esto fuera un problema bastante básico – Casey
Pude acercarme con el método "Utils3D.pointTowards()" en Flash: http: // help. adobe.com/en_US/AS3LCR/Flash_10.0/flash/geom/Utils3D.html Pero no sé cómo aplicar la rotación sobre el eje y no puedo encontrar ninguna función comparable OSS – Casey