Estoy trabajando en una aplicación OpenGL ES1 que muestra una cuadrícula 2D y permite al usuario navegar y escalar/rotarla. Necesito saber la traducción exacta de las coordenadas de View Touch en mi mundo opengl y en la celda de la grilla. ¿Hay ayudantes para hacer el reverso de las últimas transformaciones que hago para la navegación? o debería calcular y hacer las cosas de la matriz a mano?iPhone OpenGL ES - Cómo elegir
Respuesta
El modo de selección no está disponible en openGL ES. Pero es fácil calcular la coordenada de pantalla de cualquier punto 3d usando la matriz de proyección recuperada del estado OpenGL actual. Aquí es cómo lo hago (IMPoint2D y IMPoint3D son básicas (x, y) y (x, y, z) estructuras)
+ (IMPoint2D) getScreenCoorOfPoint:(IMPoint3D)_point3D
{
GLfloat p[16]; // Where The 16 Doubles Of The Projection Matrix Are To Be Stored
glGetFloatv(GL_PROJECTION_MATRIX, p); // Retrieve The Projection Matrix
/*
Multiply M * point
*/
GLfloat _p[] = {p[0]*_point3D.x +p[4]*_point3D.y +p[8]*_point3D.z + p[12],
p[1]*_point3D.x +p[5]*_point3D.y +p[9]*_point3D.z + p[13],
p[2]*_point3D.x +p[6]*_point3D.y +p[10]*_point3D.z+ p[14],
p[3]*_point3D.x +p[7]*_point3D.y +p[11]*_point3D.z+ p[15]};
/*
divide by scale factor
*/
IMPoint2D _p2D = {_p[0]/_p[3], _p[1]/_p[3]};
/*
get result in screen coordinates. In this case I'm in landscape mode
*/
return (IMPoint2D) {_p2D.x*240.0f + 240.0f, (1.0f - _p2D.y) *160.0f};
}
Suena como lo que estás buscando es un método unproject. La biblioteca glut viene con uno, pero no está disponible en OpenGL ES. Es posible rewrite the glut code yourself to be iphone compatible También puede escribir su propio código para desprogramar, lo que implicaría la necesidad de escalar el punto de contacto a su ventana gráfica, multiplicarlo por el inverso de su proyección * matrices de vista modelo y dividir por w para obtener un vector 3D.
¿Podría ser posible hacer esto con GL_MODELVIEW_MATRIX? o GL_MODLVIEW, no estoy modificando la posición de vista, solo del modelo. estoy haciendo esto:
glMatrixMode(GL_MODELVIEW);
// Setup model view matrix
glLoadIdentity();
[gAccel GetAccelerometerMatrix:(GLfloat *) matrix headingX:headx headingY: heady headingZ:headz];
// Finally load matrix
glLoadMatrixf((GLfloat*)matrix);
glPushMatrix();
glRotatef(-90, 1, 0, 0);
glScalef(0.0005, 0.0005, 0.0005);
glTranslatef(x, 0.0, z);
gracias
- 1. OpenGL ES (iPhone) Touch Picking
- 2. Cualquier alternativa glPolygonMode en iPhone (OpenGL ES)?
- 3. iPhone OpenGL ES 2.0 - Pixel Perfect Textures
- 4. retorno glGetUniformLocation -1 OpenGL ES (iPhone)
- 5. OpenGL ES (iPhone) mezcla alfa ve raro
- 6. IPhone OpenGL ES vistas individuales o múltiples?
- 7. Textura de pantalla completa iPhone OpenGL ES
- 8. iPhone OpenGl render texto
- 9. ¿Cómo usar OpenGL ES en un hilo separado en iphone?
- 10. Cómo cargar y mostrar imágenes en OpenGL ES para iphone
- 11. Convolviendo una imagen con OpenGL ES en iPhone: ¿es posible?
- 12. OpenGL u OpenGL ES
- 13. OpenGl ES on Iphone - Visualización y rotación de objetos 3D
- 14. Elija OpenGL ES 1.1 u OpenGL ES 2.0?
- 15. OpenGL ES iPhone - el trazado de líneas anti-aliasing
- 16. OpenGL para Android y iPhone
- 17. Transición de OpenGL ES 1.1 a OpenGL ES 2.0
- 18. Dibujar para renderbuffer fuera de pantalla en OpenGL ES (iPhone)
- 19. juego de mesa iPhone: OpenGL ES o CoreGraphics?
- 20. OpenGL ES 1.1 o 2.0 en el iPhone
- 21. ¿iPad o iPhone son compatibles con OpenGL ES 2.0?
- 22. Nueva aplicación para iPhone: ¿cómo elegir qué plantilla de Xcode usar?
- 23. Aprendizaje OpenGL ES 1.x
- 24. Descripción del Perfil de OpenGL para iPhone
- 25. OpenGL para video en el iPhone
- 26. OpenGL niebla contra OpenGL ES niebla
- 27. OpenGL ES y sombreadores compatibles con OpenGL
- 28. Diferencia en iOS OpenGL ES y Android OpenGL ES
- 29. ¿Es OpenGL compatible con versiones anteriores de OpenGL ES?
- 30. ¿Qué debo aprender: Quartz u OpenGL ES?
que añade la función - (CGPoint) getScreenCoorOfPoint: (IMPoint3D) _point3D que me parece dar mi posición de objetos en el mundo, pero el bit Ahora estoy atascado en es: * tengo objetos que tienen una posición * tengo mi posición en el mundo (gluLookAt ojo [0], ojo [1], ojo [2]) * y luego tengo donde hice tapping en el s creen ¿Cómo unir todo esto, es lo último en mi camino para archivar la grandeza !!!! – Burf2000