2010-11-11 6 views
5

Duplicar posible:
How do I determine what is touched in 3D space from the screen?detectar toques de usuario a través de una plaza de OpenGL

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

Tengo un cuadrado dibujado en la pantalla y quiero que el usuario lo mueva cuando lo toque. En otras palabras, el usuario debería poder moverse al cuadrado cuando coloca su dedo sobre el cuadrado. Si toca fuera de la plaza no pasa nada.

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

Gracias.

Respuesta

3

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

Existen, como se indicó en otra parte, esencialmente dos enfoques. Usted puede descubrir cómo los mapas táctiles en su escena y evaluar sus objetos matemáticamente. Si tu cuadrado está plano, como si lo estuvieras dibujando en 2d, puedes lograrlo con bastante facilidad.

Alternativamente, puede hacer algo esencialmente como escoger pero adaptado para la funcionalidad disponible en OpenGL ES. Por ejemplo, borre su escena en negro y dibuje su cuadrado en azul sólido. Use glReadPixels para obtener el valor del color en la ubicación táctil. Si es azul, entonces el toque 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 GL suministra.

Lo único leve a tener en cuenta es que OpenGL usa la misma forma de direccionar los píxeles en todas partes: (0, 0) es la parte inferior izquierda, positiva y sube y positiva x izquierda. Entonces, independientemente de los ejes con los que tenga coordenadas de contacto, necesita transformarlos para que sean relativos a eso antes de hacer glReadPixels.

+0

Parece tan difícil. Voy a poner algunos botones en la pantalla y usarlos para mover objetos OpenGL. – VansFannel

+0

@VansFannel no es tan difícil en absoluto, simplemente siga el tutorial para la selección del color. Un botón para hacer lo que el dedo puede hacer en el iPhone es una mala idea – rano

+0

@rano: lo hago para Android, no para iPhone. – VansFannel

0

Si solo 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 cuadrado no paralelo al eje x, proyectará sus vértices usando la matriz de proyección.

Más en general, hay varias técnicas para 'recoger' un modelo de OpenGL: rayos recoger y de color recogiendo siendo los más utilizados. Asegúrese de echar un vistazo a this doc

4

Los toques de detección se pueden implementar utilizando la selección de rayos. Tuve el mismo problema y utilicé el código en esta página: Android OpenGL ES ray picking. Método getViewRay() calcula la dirección del rayo. Si conoce la dirección de [0,0,0] a rayos [x, y, z], es bastante fácil simular el reparto de rayos y detectar la colisión con un objeto delimitador.

Cuestiones relacionadas