Skip to main content

¿Qué es la selección OpenGL®?

La selección de OpenGL® en la programación de computadoras es el proceso de determinar qué objeto dentro de una escena tridimensional (3D) se encuentra en un punto dado de la pantalla una vez que se representa la escena. También puede referirse a la ubicación de múltiples objetos en un punto o dentro de un cuadro. Con mayor frecuencia, la selección OpenGL® se utiliza para determinar qué objeto 3D en la pantalla está intentando seleccionar un usuario con el cursor del mouse. Si bien esta operación puede parecer simple, hay varias sutilezas en cómo OpenGL® renderiza una escena que puede hacerla bastante compleja. Además, hay fallas intrínsecas en ciertas tarjetas gráficas y controladores que pueden hacer que la función de selección OpenGL® falle y devuelva resultados falsos.

Cuando un usuario mira una escena 3D en un monitor de computadora, la imagen resultante se conoce como una representación de la escena. La escena en realidad se almacena en la memoria como una colección de formas primitivas o polígonos, que en sí mismos son solo colecciones de puntos 3D dentro del espacio de la escena. La computadora usa coordenadas mundiales, que a veces se llaman coordenadas absolutas, para realizar la mayoría de las funciones básicas que manipulan objetos en la escena. En la mayoría de las aplicaciones, el usuario puede maniobrar la vista de la escena a diferentes ángulos para que los objetos se puedan ver desde diferentes perspectivas. La ubicación virtual del usuario dentro de la escena se llama ángulo de la cámara o posición de la cámara.

La complejidad de la selección de OpenGL® proviene de determinar la ubicación del mouse en la pantalla bidimensional (2D) desde una posición y ángulo posiblemente arbitrarios dentro de la escena, la posición de la cámara. Además, dado que la representación desde la perspectiva del espectador humano es realmente 2D, no hay forma de que el usuario proporcione la profundidad del clic del mouse dentro de la escena. La función de selección OpenGL® resuelve este complejo problema de dos maneras.

La primera es que, en lugar de realizar una serie de cálculos separados para traducir dónde está el espectador de forma abstracta y luego encontrar un objeto en la ventana de representación, la función realmente representa la escena como lo hace cuando normalmente funciona, con la excepción de que la representación utilizada para la selección no se muestra, solo se usa para calcular las posiciones correctas de los objetos. La diferencia es que, en lugar de representar el área completa que sería visible para el usuario, solo representa el área donde se encuentra el mouse. Esto significa que cualquier objeto renderizado está técnicamente en el punto donde se encuentra el puntero del mouse.

El segundo problema, es decir, no tener forma de indicar la profundidad de un área seleccionada, se resuelve devolviendo todos los objetos que están debajo de las coordenadas del mouse en la escena. La función de selección de OpenGL® devuelve todos los objetos en una matriz junto con qué tan lejos están de la ubicación del espectador. Esto permite que un programa encuentre rápidamente el objeto más cercano si lo desea.

Una forma de visualizar la selección de OpenGL® es imaginar una línea, a veces denominada rayo en programación 3D, que se mueve desde la ubicación del puntero del mouse hacia la escena y lejos de la ubicación del espectador. Cada objeto que toca este rayo se agrega a una serie de objetos, junto con la distancia que está del espectador. Esta es una explicación muy simple de cómo funciona una forma de selección OpenGL®.

Otro método de selección de objetos en OpenGL® consiste en localizar un objeto por color, y puede ser considerablemente más rápido. Este método renderiza la escena pero, en lugar de aplicar iluminación y textura a los objetos, se representan con un solo color simple. Cada objeto o grupo de objetos tiene su propio color distinto. La escena solo se representa en la memoria y no se muestra, por lo que esto no afecta lo que ve el usuario. En lugar de buscar colisiones 3D entre objetos, se devuelve el color en la posición del cursor del mouse, y ese color se correlacionará con un objeto específico.