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.
- Android Move ImageView
- Arrastra un RelativeLayout en google Map con touch
- ¿Qué es una solución alternativa para Chrome para el comportamiento incorrecto de clientX y clientY de Android?
- Android: ViewPager y HorizontalScrollVIew
- Android: delegar evento táctil a la vista inferior
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.
- Cómo detener otras imágenes para moverse mientras arrastra una imagen
- Cómo configurar un Android SeekBar para ser inmóvil / congelado?
- Android OpenGL ES: ¿Cómo se selecciona un objeto 2D?
- JQuery Arrastrar y soltar en dispositivos táctiles (iPad, Android)
- ¿Cómo puedo cambiar el color de efecto táctil de ActionBar en Android 3.0 y versiones superiores
- ¿Qué significa el valor booleano devuelto por un método de manejo de eventos en Android
- Split motion events - acepta entradas simultáneamente a varias vistas
- La propiedad webkitForce del evento táctil: Feedback de presión de los dedos. Buscando documentación
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
- Mi Macbook Pro no detectará mi samsung galaxy s6
- ¿Hay algún dispositivo Android con resolución 640×960?