Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Mapear Objetos Segun Color

Iniciado por tamat, 07 de Marzo de 2004, 02:47:31 PM

« anterior - próximo »

tamat

 He creado un pequeño sistema de GUI 2D con widgets sobre opengl.

Ahora mismo detecto cuando el usuario pulsa sobre un widget a traves de la bounding box de cada widget, cuando el usuario clicka compruebo qué objetos tienen su bounding debajo del raton y así se cual ha pulsado, sin embargo ahora quiero complicarlo un poco más y hacer que la colisión sea pixel perfect, para eso he pensado en renderizar la escena en el backbuffer en el que cada objeto se renderiza sin texturizar, con un color plano diferente para cada widget, y despues mirar qué color hay debajo del raton. Al no hcer swapbuffer el usuario no se enteraría.

Pero para eso necesito indexar todos mis widgets por color y no tengo muy claro como hacerlo. He pensado en hacerlo mediante el depth buffer que es el canal con más profundidad pero veo que con el depth buffer no puedo controlar bien que valor tendrá cada widget al pintarlo. Tambien he pensado en cambiar el modo del colorbuffer (pasarlo a luminosidad) a la hora de pintar, de ese modo convierto los 4 bytes del colorbuffer en un entero y me es más facil indexar.

Pero luego me queda la duda de qué sucedería si el cliente tuviera una profundidad de color baja... ¿como controlo eso?

Por otra parte he visto funciones de mapeado de colores, así que con una LUT podría arreglarmelas pero nunca las he usado.

Cualquier ayuda será bien recibida.

un saludo.
Por un stratos menos tenso

CoLSoN2

 qué problema hay con las bounding boxes? a no ser que vayas a hacer cosas con formas MUY raras, tienes más que suficiente..
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor

tamat

 voy a hacer cosas con formas muy raras ;)
Por un stratos menos tenso

BeRSeRKeR

 Lo único que se me ocurre es o que utilices regiones o la técnica que propuso Haddd en este foro con occlusion queries.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

Zaelsius

 Tamat, en el capítulo 14 del Red Book hay una sección que habla sobre lo que tú quieres hacer.

No sé muy bien donde está tu problema, el color buffer en modo indexado(256 colores) te da para 256 elementos, y si usas 16bit te da para 65536 elementos diferentes(sobran no? xd). Si vas asignando valores de color a cada widget empezando por cero(limite es el bpp), y usas glReadPixels() estaría hecho.

tamat

 Así es como lo hago zaelsius pero preguntaba por si había alguna tecnica mejor o posibles problemas.

Las Occlusion queries se van demasiado de mis capacidades por el momento pero una vez lo tenga funcionando quizá lo mire a ver.
Por un stratos menos tenso

_Grey

 Puedes utilizar el stencil buffer.............. de todas formas, (Ten en cuenta, que hace mucho que no toco OGL), OGL tiene un buffer de seleccion (glRenderMode(GL_SELECTION)), que es "pixel perfect", nop? (En el libro "Programacion en OpenGL" de AnayaMultimedia encontraras esto en capitulo 19). Espero que te pueda ayudar lo dicho.

Saludos.

Kriller

 ¿No estás matando moscas a cañonazos?

Yo haría lo siguiente: suponiendo que cada widget tuyo tiene una textura asociada, simplemente miraría el color del píxel que ha sido pinchado dentro de la textura (si la textura tiene canal alfa y está siendo usado, miraría ahí). Si es cero, es un hueco y por tanto no ha sido pinchado. Así te evitas renderizar los widgets dos veces y trastear con el backbuffer.

Ésto sólo es válido si tus widgets están hechos a base de texturas. Si los dibujas "a mano" (con líneas o algo así) entonces seguramente habría que hacer lo que dices tú.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.