Utilizando as técnicas de seleção de objetos apresentadas no Capítulo 8, implemente um programa splineinter.c que proporcione um processo de modelagem interativa para este exemplo. Utilizando
o botão esquerdo do mouse, o usuário deverá poder movimentar os
pontos da malha de controle, podendo assim controlar livremente
a forma da superfície.
Um método de seleção envolve lançar um raio através da localização do mouse e
testar a proximidade com os objetos da cena. O raio pode ser gerado
chamando duas vezes a função gluUnProject(), uma vez para o plano mais próximo do usuário (winz=0) e outra para o plano
mais distante (winz=1). Subtraindo o resultado obtido para o plano
mais distante do resultado obtido para o plano mais próximo será
possível obter a direção do raio. A origem do raio ficará na posição
do observador, no plano mais próximo.
A posição do ponto em uma reta que se encontra mais próxima de um dado ponto
no espaço pode obtida pela seguinte equação:
P_o + (R - P_o) dot V
--------------- V
V dot V
Nesta equação, P_o é obtida da equação que define a reta, P(t) = P_o + V t. V
é o vetor que dá a direção da reta, e 'dot' representa a operação
de produto interno.