Uma Revisão no Sistema de Iluminação

Como mencionei no meu primeiro post aqui minha participação no projeto consiste basicamente em duas grandes tarefas subdivididas em várias tarefas pequenas. Até então meu trabalho estava mais focado na integração do V-ART com o Silverlight, no entanto atualmente também estou começando a trabalhar na tarefa de desenvolvimento da base de código da biblioteca. Minha atribuição mais recente foi investigar e consertar alguns comportamentos estranhos no sistema de iluminação.

Após ler o código correspondente pude concluir que somente as definições na classe Light do V-ART estava realmente fazendo alguma diferença no código das aplicações. O método responsável por fazer com que as luzes façam sua parte no backend OpenGL é o método virtual DrawOGL. Esse método deveria então ser sobrescrito pelas classes filhas para extender o comportamento de acordo com o esperado. A classe PointLight, por exemplo, deveria usar a propriedade de posição da lâmpada para efetuar as chamadas OpenGL responsáveis por informar a posição desejada da luz e o mesmo para as propriedades de atenuação. No entanto não era o que estava acontecendo no V-ART. As classes filhas não tinham métodos DrawOGL e, inclusive, estavam desatualizadas em outros aspectos.

Após fazer a implementação da classe PointLight comecei a realizar alguns testes que revelaram um pequeno bug no código, relativo a ordem de aplicação da transformação de câmera em relação a chamada do método que faz a iluminação da cena. A ordem incorreta fazia com que a a transformação da câmera não afetasse as luzes na primeira vez que a cena era renderizada, resultando num posicionamento incorreto das lâmpadas. Após clicar na tela ou escondê-la e mostrá-la novamente um redesenho ocorria e as lâmpadas se moviam para o lugar correto.

A classe PointLight atualizada e a correção do bug já foram submetidas no CVS do projeto. Em breve também estará disponível a classe SpotLight, assim que forem realizados alguns testes.

Last edited Aug 8, 2008 at 5:04 PM by kcfelix, version 1

Comments

No comments yet.