Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Selecion de elementos en Opengl

Iniciado por Degiik, 11 de Marzo de 2003, 07:41:26 PM

« anterior - próximo »

Degiik

                                La unica forma que he encontrado para selecionar elementos en OGL ha sido con el gluPickMAtrix... etc etc. Alternativas ?

Con un poco de habilidad con gluPickMAtrix se puede hacer un Frustrum Culling... que opinais ?

adew.                                
egiik: h-O-5 hoja/ingestión 100mo Vida suspendida ( 1 día )

ethernet

Creo q podrias tomar la posicion en 2d, por ejemplo donde picas con el raton, hacer la inversa de la matriz de proyeccion y desproyectar, habria q pensarlo bien 0:)

No creo q sea muy eficiente ese frutrum culling tuyo XD

saludos

tamat

                                Si por selección de elementos te refieres a detectar que objeto se encuentra en una determinada coordenada de la pantalla hace tiempo leí una manera que me pareció muy inteligente aunque solo es aconsejable si dicha selección se produce pocas veces (como cuando clickas con el raton) y no constantemente (encuadrar un objeto de la pantalla).

El sistema consistia en asignar a cada objeto un color diferente, y cuando quieres saber que objeto hay en una coordenada de la pantalla simplemente renderizas la escena sin iluminacion ni texturas ni efectos, solo renderizando los objetos con su color asignado, vas a la posicion que te interesa del colorbuffer y pillas el color de ese pixel, y finalmente haces un clear del buffer (no un swapbuffers o te mostraria por pantalla un frame basura).

Despues con el codigo de color del pixel te vas al lugar donde tengas indexados todos los objetos y miras a cual corresponde. Parece un poco costoso pero no lo es tanto si tenemos en cuenta que hablamos de perder un unico frame y lo mejor es que al estar renderizado sin luz ni texturas consume una cuarta parte del tiempo de un frame corriente, algo despreciable.

Yo lo tengo pensado implementar para el control de la cabina de una nave para que puedas pulsar sobre los diferentes botones.

Por otra parte si lo que quieres es marcar la posicion en pantalla de un objeto constantemente no te quedará más remedio que proyectar el punto en 2D mediante las matrices de proyección, yo lo usaba para hacer lens flares, pero dado que no podras proyectar todos los vertices pues no sirve para tener precision al pixel de un objeto.

Siempre puedes optar por usar el primer sistema renderizando cada X frames uno planoy usandolo. O incluso se podría hacer un hibrido, quien sabe...                                
Por un stratos menos tenso

MaSteR

                                lo de ethernet puede ser una solucion wena pruebala loco :P                                

ZeruGiran

                                Pal War 3D usamos algo muy similar a lo que comenta tamat.

Busca

glRenderMode(GL_SELECT);
 
Basicamente lo que se hace es asignarle un numero a cada objeto, cambiamos el modo de renderizacio a modo GL_SELECT, rendereizamos la esena y miramos cuantos y cuales objetos estan debajo de las coordenadas fisicas del Puntero del Mouse.

Es practimamente la misma tecnica que sugiere tamat, salvo que OpenGL ya lo tiene hecho. y se llama GL_SELECT

Igual que lo que se propone, esta tecnica te hace perder un frame, pero si rendereas sin efectos no texturas, ni niebla, ni nada raro, puedes reducirlo a menos de 1/4 de frame.

Saludos
[/b]                                






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.