Detectar los toques del usuario sobre un cuadrado OpenGL

Posible duplicado:
¿Cómo puedo determinar lo que se toca en el espacio 3D de la pantalla?

Estoy desarrollando una aplicación para Android. También estoy trabajando con gráficos OpenGL.

Tengo un cuadrado dibujado en la pantalla y quiero dejar que el usuario lo mueva cuando toque sobre él. En otras palabras, el usuario debe ser capaz de mover cuadrado cuando pone su dedo en el cuadrado. Si toca fuera de la plaza, no pasa nada.

¿Cómo puedo detectar cuándo el usuario toca el cuadrado?

Gracias.

Los tutoriales de selección y selección proporcionados en otras respuestas no son aplicables aquí; Entre otros glSelectBuffer y glRenderMode no forman parte de OpenGL ES.

Hay, como se ha dicho en otra parte, esencialmente dos enfoques. Usted puede averiguar cómo el tacto de mapas en su escena y probar sus objetos matemáticamente. Si su cuadrado está plano, como si estuviera dibujando en 2d, entonces usted puede lograr que con bastante facilidad.

Alternativamente, puede hacer algo esencialmente como picking pero adaptado para la funcionalidad disponible en OpenGL ES. Por ejemplo, despeje su escena a negro y dibuje su cuadrado en azul sólido. Utilice glReadPixels para obtener el valor del color en la ubicación táctil. Si es azul entonces el tacto está en el cuadrado. Esta es probablemente una forma más costosa de probar porque significa un sorteo adicional de la escena, pero significa que no tiene que implementar ninguna matemática adicional u otro código más allá de lo que proporciona GL.

La única cosa a tener en cuenta es que OpenGL utiliza la misma forma de abordar píxeles en todas partes – (0, 0) es la parte inferior izquierda, positivo y sube y positivo x va a la izquierda. Así que, independientemente de los ejes con los que tengas tus coordenadas táctiles, debes transformarlos para que sean relativos a eso antes de hacer glReadPixels.

Los toques de detección se pueden implementar usando ray picking. Tuve el mismo problema y usé código en esta página: Android OpenGL ES ray picking . El método getViewRay () calcula la dirección de ray. Si conoce la dirección de [0,0,0] a ray [x, y, z], es muy fácil simular ray cast y detectar la colisión con el objeto delimitador.

Si sólo tiene un cuadrado, puede comprobar si las coordenadas táctiles se encuentran dentro del espacio formado por los cuatro vértices del cuadrado. En el caso de un eje no paralelo al eje x, deberá proyectar sus vértices utilizando la matriz de proyección.

Más en general hay varias técnicas para "escoger" un modelo de OpenGL: la selección de rayos y la selección de colores son los más utilizados. Asegúrese de echar un vistazo a este documento

  • Vista de imagen en movimiento con evento táctil
  • Manejo de eventos táctiles - onInterceptTouchEvent y onTouchEvent
  • Touchend no dispara después de touchmove
  • Evento táctil: cuando se quita el dedo del elemento
  • Superposición de Android para tomar todo el tacto, y pasarlos?
  • Android Listener para detectar cuando se está presionando la pantalla
  • Toque las coordenadas en la vista de texto
  • Cómo enviar eventos táctiles (Eventos de pantalla) a otra aplicación en android
  • ¿Por qué es el evento touchstart después de hacer clic?
  • ¿Cómo crear un imagebutton de forma irregular donde la parte transparente de la imagen no se puede hacer clic?
  • Transferir el enfoque táctil a otra vista
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.