Necesito una manera simple de convertir la coordenada de mis objetos en coordenadas mundiales, para que pueda ubicarlos en ese sistema de coordenadas y hacer la detección de colisión?¿Cómo convertir coordenadas de objetos locales a coordenadas mundiales?
Respuesta
Primero, algunos antecedentes. En los gráficos 3D, es necesario preocuparse por varios espacios vectoriales:
- espacio modelo - por lo general son las coordenadas que especifique a OpenGL
- espacio Mundial - coordenadas se especifican con respecto a algún punto central en el mundo.
- Espacio de visualización: las coordenadas se especifican con respecto a la cámara
- Espacio de proyección: todo en la pantalla se ajusta en el intervalo
[-1, +1]
en cada dimensión.
Las coordenadas se especifican de forma homogénea, por lo que cada vector tiene los componentes (x, y, z, w)
, donde w
es un factor de escala. Puede obtener coordenadas en 3 espacios como (x/w, y/w, z/w)
. El factor de escala es necesario para ciertas transformaciones como la proyección en perspectiva que no sería posible con coordenadas no homogéneas.
Las matrices 4x4 son necesarias para transformar las coordenadas de un espacio vectorial a otro. Usted podría tener tres matrices diferentes:
- matriz de modelo (modelo de mundo)
- Ver matriz (mundo para ver)
- matriz de proyección (vista al espacio de proyección)
Se podría proyectar una coordenada C
en la pantalla usando la fórmula:
C' = P * V * M * C
OpenGL pasante ally mantiene dos matrices: modelview (modelo y vista multiplicados juntos) y proyección. También hay una matriz de textura de la que no nos preocuparemos. Cuando llamas al glMatrixMode
, estás cambiando entre estas matrices. Reemplace la matriz actual con la matriz de identidad usando glLoadIdentity
. Aplica transformaciones a la matriz actual con funciones como glTranslatef
, glRotatef
o gluProjection
. Cada una de estas funciones solo crea una matriz de 4x4 implementa la transformación específica, luego multiplica la matriz actual por ella. Puede ver cuáles son las matrices de transformación en el OpenGL 2.1 reference pages.
Ahora para la respuesta real. Necesita mantener una matriz de modelo 4x4 para cada objeto en su escena. La matriz del modelo contendrá todas las transformaciones necesarias para cambiar las coordenadas del modelo en coordenadas mundiales.Por ejemplo, cada vez que llame glTranslate
, que actualizaría su matriz de modelo:
T = [ 1 0 0 x ]
[ 0 1 0 y ]
[ 0 0 1 z ]
[ 0 0 0 1 ]
M' = M * T
continuación, puede utilizar su matriz de modelo para obtener las coordenadas en el espacio mundial (asegurarse de que son coordenadas homogéneas primera; acaba de establecer w = 1
, si no lo son):
V' = V * M
Puesto que usted está manteniendo estas transformaciones en paralelo, no se necesita realmente para mantener la matriz modelview OpenGL más. Puede pasar su matriz modelo como uniforme a sus sombreadores. Puede mantener su propia vista y matrices de proyección de manera similar. Esto es requerido en versiones recientes de OpenGL; todas las funciones de manejo de matriz están en desuso.
¿Cómo mantengo mi propia matriz de modelos? –
@Shazad, agregó información de fondo y una explicación más detallada. Espero que ayude. –
@Jay: Primero dijiste 'C '= P * V * M * C', sin embargo, cerca del final dices que' V' = M * V'. Estoy un poco confundido, ya que una vez es 'V * M' y una vez' M * V'. La multiplicación de la matriz no es conmutativa, entonces 'A * B! = B * A'. ¿Podría ser que cualquier orden es incorrecta en tu respuesta? Tal vez también es mi matemática equivocada, sin embargo, en ese caso no dude en corregirme. – Mecki
Usted puede utilizar el producto de la inversa de la matriz de vista de la cámara virtual (V -1) veces el modelview Matrix (V * H) del objeto de obtener coordenadas mundo.
Se obtiene V justo después de la función gluLookAt() usando:
glGetFloatv (GL_MODELVIEW_MATRIX, camViewMatrix)
luego invertir la matriz y almacenarla, (utilizados para multiplicar más adelante en el código.)
usted consigue V * M en el punto en que está a punto para dibujar el objeto, justo después de todo el glTranslatef(), glRotatef() y glScale() comandos usando la misma función GL:
glGetFloatv (GL_MODELVIEW_MATRIX, objectsModelVie wMatrix);
V-1 * (V * M) == M
Entonces múltiple las dos matrices, lo que resulta matriz contiene la posición, M12 = x, m13 = y y m14 = z
más detalles con el código C en: https://sourceforge.net/p/openantz/wiki/Local_to_World_Coordinates/
- 1. Conversión de Coordenadas mundiales a Coordenadas de pantalla en Three.js utilizando Proyección
- 2. MATLAB ¿Cómo convertir coordenadas de ejes a coordenadas de píxeles?
- 3. ¿Cómo puedo convertir coordenadas espaciales 3D a coordenadas espaciales 2D?
- 4. Cómo convertir latitud y longitud a coordenadas mundiales à la Google Maps
- 5. Cómo agrupar objetos (sin coordenadas)
- 6. grados convertir/minutos/segundos a decimal Coordenadas
- 7. ¿Cómo convertir las coordenadas de la vista de imagen a las coordenadas del mapa de bits?
- 8. ¿Cómo puedo convertir coordenadas en un cuadrado a coordenadas en un círculo?
- 9. ¿Cómo convierto estas coordenadas a coordenadas legibles por Google Maps?
- 10. Cómo convertir las coordenadas de GPS a la localidad
- 11. Convertir NSPoint en coordenadas de pantalla a la ventana de coordenadas
- 12. Definición Luz Coordenadas
- 13. Aplicar coordenadas de píxeles a Coordenadas de pantalla
- 14. cómo convertir entre grados, minutos, segundos a coordenadas decimales
- 15. Cómo convertir coordenadas de pantalla para formar coordenadas relativas (formas de win)?
- 16. OpenGL Matemáticas - Proyección de espacio en la pantalla a coordenadas espaciales mundiales
- 17. cartesianas a coordenadas polares
- 18. Convertir Lat/Longs en X/Y Coordenadas
- 19. ¿Cómo traduzco correctamente las coordenadas de píxeles a las coordenadas del lienzo en Android?
- 20. Coordenadas de intersección entre Ray y Plano
- 21. Cómo convertir una dirección (como texto) en coordenadas gps?
- 22. ¿Cómo se convierten las coordenadas del mundo a las coordenadas de la cámara?
- 23. Sistema de coordenadas Cocos2d
- 24. dispositivo Android Convertir sistema de "usuario" sistema de coordenadas
- 25. Conversión de longitud \ latitud a coordenadas cartesianas
- 26. Convertir coordenadas de GPS para coordinar el plano
- 27. Coordenadas táctiles de UIPanGestureRecognizer
- 28. Almacenamiento de objetos para localizar por coordenadas x, y
- 29. Obtener coordenadas de GPS: Android
- 30. ActionScript: ¿Coordenadas del mouse inexactas?
recomiendo leer acerca de acerca de Álgebra lineal o Ma trix álgebra y también un libro sobre gráficos. –