O que é o OpenGL® Picking?
A seleção do OpenGL® na programação de computadores é o processo de determinar qual objeto dentro de uma cena tridimensional (3D) está localizado em um determinado ponto da tela depois que a cena é renderizada. Também pode se referir à localização de vários objetos em um ponto ou dentro de uma caixa. Na maioria das vezes, a seleção do OpenGL® é usada para determinar qual objeto 3D na tela um usuário está tentando selecionar com o cursor do mouse. Embora essa operação possa parecer simples, existem várias sutilezas em como o OpenGL® renderiza uma cena que pode torná-la bastante complexa. Além disso, existem falhas intrínsecas em determinadas placas gráficas e drivers que podem causar falhas na função de seleção do OpenGL® e retornar resultados falsos.
Quando um usuário está vendo uma cena 3D em um monitor de computador, a imagem resultante é conhecida como renderização da cena. A cena é realmente armazenada na memória como uma coleção de formas ou polígonos primitivos, que são apenas coleções de pontos 3D no espaço da cena. O computador usa coordenadas mundiais, às vezes chamadas de coordenadas absolutas, para executar as funções mais básicas que manipulam objetos na cena. Na maioria das aplicações, o usuário é capaz de manobrar a vista da cena em diferentes ângulos, para que os objetos possam ser vistos em diferentes perspectivas. O local virtual do usuário na cena é chamado de ângulo ou posição da câmera.
A complexidade da escolha do OpenGL® vem da determinação da localização do mouse na tela bidimensional (2D) de uma posição e ângulo possivelmente arbitrários na cena, a posição da câmera. Além disso, como a renderização da perspectiva do visualizador humano é realmente 2D, não há como o usuário fornecer a profundidade do clique do mouse dentro da cena. A função de seleção OpenGL® resolve esse problema complexo de duas maneiras.
A primeira é que, em vez de executar uma série de cálculos separados para traduzir onde o visualizador é abstrato e depois encontrar um objeto na janela de renderização, a função realmente renderiza a cena da mesma forma que quando trabalha normalmente, com a exceção de que a renderização foi usada para a seleção não é exibida, é usada apenas para calcular as posições corretas dos objetos. A diferença é que, em vez de renderizar toda a área que seria visível para o usuário, ela renderiza apenas a área em que o mouse está localizado. Isso significa que quaisquer objetos renderizados estão tecnicamente no ponto em que o ponteiro do mouse está localizado.
O segundo problema, ou seja, não ter como indicar a profundidade de uma área selecionada, é resolvido retornando todos os objetos que estão sob as coordenadas do mouse na cena. A função de seleção OpenGL® retorna todos os objetos em uma matriz, bem como a que distância eles estão do local do visualizador. Isso permite que um programa encontre rapidamente o objeto mais próximo, se desejado.
Uma maneira de visualizar o picking do OpenGL® é imaginar uma linha, às vezes chamada de raio na programação 3D, movendo-se do local do ponteiro do mouse para a cena e para longe do local do visualizador. Cada objeto que este raio toca é adicionado a uma matriz de objetos, além da distância que está do visualizador. Esta é uma explicação muito simples de como uma forma de seleção do OpenGL® funciona.
Outro método de seleção de objetos no OpenGL® envolve a localização de um objeto por cor e pode ser consideravelmente mais rápido. Esse método renderiza a cena, mas, em vez de aplicar iluminação e textura aos objetos, eles são renderizados com uma única cor simples. Cada objeto ou grupo de objetos tem sua própria cor distinta. A cena é renderizada apenas na memória e não é exibida, portanto, isso não afeta o que o usuário vê. Em vez de procurar colisões 3D entre objetos, a cor na posição do cursor do mouse é retornada e essa cor se correlaciona com um objeto específico.