OpenGL

Página  3  de  8  

3. Considerações de Design

   O design de qualquer API requer um equilíbrio entre vários factores, tais como a simplicidade na realização de operações comuns versus generalização, ou muitos comandos com poucos argumentos versus poucos comandos com muitos argumentos. Nesta secção pretende-se descrever as considerações peculiares ao design de um API 3D que influenciaram o desenvolvimento do OpenGL.

Desempenho
   Uma questão fundamental em gráficos tridimensionais interactivos é a do desempenho. São necessários inúmeros cálculos para renderizar um cenário 3D de modesta complexidade e, numa aplicação interactiva, um cenário é redesenhado várias vezes por segundo. Desta forma, um API desenvolvido para ser utilizado em aplicações 3D interactivas, deve oferecer um acesso eficiente às funcionalidades do hardware gráfico que utiliza. No entanto, diferentes subsistemas gráficos oferecem diferentes funcionalidades, pelo que deve ser encontrada uma interface comum.
   A interface deve igualmente oferecer meios para a activação ou desactivação das várias funcionalidades de renderização. Este requisito é importante porque algum hardware pode não suportar algumas funcionalidades com um desempenho aceitável e mesmo com o suporte por hardware, a activação de certas funcionalidades, ou de combinações de funcionalidades, pode afectar significativamente o desempenho. Uma renderização lento pode ser aceitável na produção de uma imagem final de uma cena, mas quando há manipulação de objectos num cenário ou o ajuste de um ponto de vista, é necessário um desempenho razoável para tornar a interactividade positiva. Nestes casos, podem ser desejáveis funcionalidades com fraco desempenho para a imagem final mas são indesejáveis durante a manipulação de um cenário.

Ortogonalidade
   Uma vez que é desejável a possibilidade de activar ou desactivar funcionalidades, é também importante que esta não tenha efeitos colaterais sobre outras funcionalidades. Se, por exemplo, é desejável que cada polígono possa ser desenhado com apenas uma cor em vez de uma interpolação de cores sob os seus lados, isto não deve afectar a forma como as texturas ou a iluminação são aplicadas. De forma similar, activar ou desactivar uma funcionalidade não deve conduzir a um estado inconsistente, no qual os resultados da renderização sejam indefinidos. Este tipo de independência de funcionalidades é necessária para permitir ao programador a sua fácil manipulação. Outro benefício da independência de funcionalidades é que estas podem ser combinadas de forma útil, gerando situações diferentes das idealizadas aquando da projecção da interface.

Completo
   Um API gráfico 3D a correr num sistema com um subsistema gráfico deve oferecer alguns meios para aceder a grande parte das funcionalidades desse subsistema. Se uma funcionalidade disponível não for oferecida, o programador vê-se obrigado a recorrer a um API diferente para obter as funcionalidades que faltam. Isto pode inviabilizar uma aplicação por causa da interacção entre duas interfaces.
   Da mesma forma, se a implementação de um API fornece certas funcionalidades numa plataforma de hardware, então estas devem estar presentes em qualquer plataforma, que ofereça o API. Caso esta regra seja quebrada, torna-se difícil usar um API num programa multi-plataforma sem saber quais as funcionalidades suportadas por cada plataforma. Em plataformas sem a aceleração apropriada, algumas funcionalidades podem ter um fraco desempenho mas, pelo menos, uma dada imagem deverá, eventualmente, aparecer.

Interoperabilidade
   Muitos ambientes de computação consistem em vários computadores ligados em rede. Num ambiente deste tipo, é extremamente útil ser capaz de enviar comandos gráficos de uma máquina, para serem executados noutra (este é um dos principais factores do sucesso dos sistemas de janelas). Esta interoperabilidade requer que o modelo de execução dos comandos do API seja do tipo cliente-servidor: o cliente endereça comandos e o servidor executa-os. (Este conceito requer simultaneamente que cliente e servidor partilhem a noção, de como os comandos da interface são codificados, para transmissão através da rede.) Claro que cliente e servidor podem estar na mesma máquina.
   Uma vez que os comandos da interface podem ser enviados através de uma rede, torna-se impraticável requerer grandes semelhanças entre cliente e servidor. Um cliente pode ter que esperar algum tempo por uma resposta a um pedido devido aos atrasos da rede. Assim pedidos simples ao servidor que não necessitam de reconhecimento podem ser guardados num buffer e enviados em grupos e executados pelo servidor, aumentando a eficiência da transmissão.

Extensibilidade
   Uma interface de gráficos 3D deve ser extensível, para poder incorporar novas funcionalidades de hardware ou novos algoritmos tornados populares no futuro. Embora garantir que esta meta seja alcançada possa ser difícil antes de decorrido um período de tempo considerável, alguns passos podem ser dados para atingi-la. A ortogonalidade de um API, é um elemento que ajuda a alcançar este objectivo. Outro é simular a forma como a interface pode ser afectada pela introdução de funcionalidades extra.

Aceitação
   Pode parecer que o desenvolvimento limpo e consistente de um API de gráficos 3D é um objectivo suficiente, em si mesmo. Contudo, a menos que os programadores decidam usar o API numa variedade de aplicações, o desenvolvimento deste não faz sentido. É portanto extremamente importante considerar os efeitos das decisões ao nível do design na aceitação por parte dos programadores.

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8