Estoy tratando de escribir una pequeña aplicación javascript 'de perspectiva' que me permita volar a través de un conjunto de puntos x, y, z que habitan en un espacio 3D.ecuación de trigonometría 3D
Tengo el concepto de una cámara que cambia su rotación y posición xyz, mientras que cada punto mantiene un punto xyz constante.
Luego tengo un conjunto de ecuaciones que explican cómo se deben ajustar las coordenadas x, y, z de la cámara para volar directamente hacia delante. Los ajustes x, y, z obviamente dependen de la rotación de la cámara.
Casi funciona, pero en ciertas "actitudes" el ajuste de la posición de la cámara falla y el camino de vuelo no va hacia adelante sino que se desvía en ángulo, o incluso se invierte. Las ecuaciones para la elaboración de la proyección son los siguientes:
var directionFactor = 1;
if (direction == 'backward') directionFactor = -1;
sx = Math.sin(cameraView.rotX);
cx = Math.cos(cameraView.rotX);
sy = Math.sin(cameraView.rotY);
cy = Math.cos(cameraView.rotY);
sz = Math.sin(cameraView.rotZ);
cz = Math.cos(cameraView.rotZ);
// Z-Axis
ztrig = Math.sqrt((cx * cx) + (cy * cy)) * (cx * cy);
cameraView.z = cameraView.z + directionFactor *
(Math.abs(airspeed/15) * ztrig);
// Y-Axis
ytrig = Math.sqrt((sx * sx) + (cz * cz)) * (sx * cz);
cameraView.y = cameraView.y + directionFactor *
(Math.abs(airspeed/15) *ytrig);
// X-Axis
xtrig = Math.sqrt((cz * cz) + (sy * sy)) * (cz * sy);
cameraView.x = cameraView.x - directionFactor *
(Math.abs(airspeed/15) * xtrig);
Obviamente mis ecuaciones no son del todo bien. ¿Alguien puede decirme dónde me estoy equivocando? Muy apreciado y gracias.
¿Puedes agregar tu algoritmo? –
La forma estándar de calcular coordenadas 3D es usar matemáticas vector/matriz. Hay varias bibliotecas de este tipo para javascript. Ver: http://blog.tojicode.com/2010/06/stupidly-fast-webgl-matricies.html –