Sé que hay muchas preguntas sobre la rotación en 3D que se han respondido aquí, pero todas parecen tratar con matrices rotacionales y cuaterniones en OpenGL (y realmente no me importa si obtengo bloqueo de cardán) Necesito obtener coordenadas 3d EX: (x, y, z) de un punto que siempre debe ser la misma distancia, lo llamaré "d" por ahora, desde el origen. La única información que tengo como entrada es la deltax y deltay del mouse en la pantalla. Hasta el momento esto es lo que he intentado:rotación en 3D alrededor del origen
Primero:
thetaxz+=(omousex-mouseX)/(width);
thetaxy+=(omousey-mouseY)/(height);
(thetaxy es el ángulo en radianes en el eje X, Y y thetaxz en la x, eje z) (limito ambos ángulos de modo que si son menos que o igual a 0 que son iguales a 2 * pi)
Segundo:
pointX=cos(thetaxz)*d;
pointY=sin(thetaxy)*d;
(pointx es x del punto de coordenadas y puntiagudo es la y)
Tercero:
if(thetaxz)<PI){
pointZ=sqrt(sq(d)-sq(eyeX/d)-sq(eyeY/d));
}else{
pointZ=-sqrt(abs(sq(d)-sq(eyeX/d)-sq(eyeY/d)));
}
(cuadrados() es una función que plazas y abs() es una función de valor absoluto) (Pointz debe ser z del punto de coordenadas y es, excepto en el cruce entre la z positiva hemisferio y hemisferio z negativo. A medida que se acerca al borde, el punto se estira más allá de la distancia en la que siempre se supone que está en xey, aparentemente de forma aleatoria alrededor de 0.1-0.2 radianes de thetaxz la coordenada z se convierte en NAN o indefinida)
Tengo pensé en esto por un tiempo, y la verdad es que estoy teniendo dificultades para entender el concepto de cuaterniones y matrices rotacionales; sin embargo, si me puedes mostrar cómo usarlos para generar coordenadas reales, me encantaría aprender. Todavía preferiría si pudiera usar algo de trigonometría en algunos ejes. Gracias de antemano por cualquier ayuda y si necesita más información, solo pregunte.
Sugerencia/idea de último minuto: Creo que puede tener algo que ver con la posición z que afecta las posiciones x e y, pero no estoy seguro.
EDIT: dibujó un diagrama:
No estoy 100%, esto es exactamente lo que quiere, pero creo que es posible que desee ver en [gluUnProject] (http://nehe.gamedev.net/article/using_gluunproject/16013 /) para convertir coordenadas 2D en 3D basadas en matrices de cámara. Haga esto para un punto en los planos de cámara cercanos y lejanos, y luego use algunos trigonométricos para encontrar el punto a lo largo de la línea resultante que es la distancia deseada desde el origen. Tenga en cuenta que hay 0, 1 o 2 soluciones para este problema, dependiendo de la línea – Hybrid
¿Puede decirnos el problema original un poco más claro, quizás con una imagen? –
Agregué un enlace de imagen porque solo tengo 1 representante porque soy nuevo en este sitio. –