OpenGL

Página  7  de  8  

7. Silicon Graphics Inc. OpenGL versus Microsoft Direct3D

   Ambos, o OpenGL e o Direct3D, mostram um tradicional pipeline para a renderização gráfica. A arquitectura do pipeline tem estado presente desde muito cedo na computação gráfica e tem sido melhorada e aumentada ao longo dos anos, com o aumento das capacidades do hardware, contudo o paradigma fundamental não se alterou.
   Uma comparação entre estes dois API’s, não é algo fácil e objectivo. Tentamos aqui mostrar, principalmente as diferenças para que seja possível ao leitor escolher.
   Um dos aspectos muito citados na comparação destas duas interfaces é, como não podia deixar de ser, o desempenho. Este não é, no entanto, um aspecto importante. O desempenho de ambos os API’s é praticamente idêntico para programas bem escritos, independentemente da interface. A performance apenas pode ser medida em função da máquina. No caso de programação de jogos, se um jogo está bem escrito, por programadores com um conhecimento profundo do API, o desempenho fica por conta dos fabricantes das placas gráficas e dos drivers. O que determina a performance, é a forma como API, driver, sistema operativo e hardware interagem [7].
   O mesmo se aplica quando falamos de qualidade. O factor mais importante na qualidade é a capacidade do artista. O bom artista pode fazer um mau jogo parecer fantástico, mas o inverso também se aplica.
   A capacidade de renderização por software é outra das falsas questões. A renderização por software adiciona funcionalidades que o hardware não implementa. Como se pode imaginar, estas funcionalidades têm de ser escritas pelo programador, o que adiciona um enorme overhead ao programa. Como a renderização corre juntamente com o programa, o desempenho é muito penalizado. Adicionando o facto de que, escrever um bom software de renderização, é uma tarefa extremamente difícil. Embora haja algumas vantagens na renderização por software, elas são muito poucas [8].
   A batalha num ambiente Windows entre Direct3D e OpenGL é grande. Se pretender escrever programas para plataformas que não o Windows, então a escolha é simples, uma vez que o Direct3D não corre nessas plataformas. Se pretende escrever programas para Windows, então a decisão é difícil. Os API’s são semelhantes por isso, se conhecer um, facilmente aprender o outro, já que os conceitos fundamentais são os mesmos. Se não tem uma preferência, então procure uma moeda. Não interessa o tipo ou valor, basta que tenha dois lados diferentes. Escolha um para ser “cara” e o outro “coroa”. Atire a moeda ao ar e se for “cara” escolha o OpenGL, se for “coroa” opte por Direct3D. No entanto, seja qual for o API que escolha mantenha-se fiel. A programação gráfica não é fácil de aprender. Não importa questionar-se se seria melhor o outro, porque no fim, verdadeiramente, não interessa.
   Para ajudar numa eventual escolha, baseada em métodos menos aleatórios segue-se a tabela 2, que não pretende ser exaustiva, das características de cada um dos API’s:

Funcionalidade OpenGL 1.2 Core Direct3D 7 Direct3D 8
System Mechanics
Operating System Support Windows (9x, NT, 2000), MacOS, BeOS, *nix, others Windows (9x, 2000, CE) Windows (9x, 2000)
API Definition Control OpenGL ARB Microsoft Microsoft
API Specification OpenGL Specification SDK/DDK Documentation and DDK Reference SDK Documentation
API Mechanism includes and libraries COM COM
Software Emulation of Unaccelerated Features Sim Não Não
Extension Mechanism Sim Não Sim
Source Implementation Available Sim Sim Não
Modeling
Fixed-Function Vertex Blending Não Sim Sim
Programmable Vertex Blending Não Não Sim
Parametric Curve Primitives Sim Não Sim
Parametric Surface Primitives Sim Não Sim
Hierarchical Display Lists Sim Não Não
Rendering
Two-sided Lighting Sim Não Não
Point Size Rendering Attributes Sim Não Sim
Line Width Rendering Attributes Sim Não Não
Programmable Pixel Shading Não Não Sim
Triadic Texture Blending Operations Não Não Sim
Cube Environment Mapping Não Sim Sim
Volume Textures Sim Não Sim
Multitexture Cascade Não Sim Sim
Texture Temporary Result Register Não Não Sim
Mirror Texture Addressing Não Sim Sim
Texture "Wrapping" Não Sim Sim
Range-Based Fog Não Sim Sim
Bump Mapping Não Sim Sim
Modulate 2X Texture Blend Não Sim Sim
Modulate 4X Texture Blend Não Sim Sim
Add Signed Texture Blend Não Sim Sim
Frame Buffer
Hardware Independent Z Buffer Access Sim Não Não
Full-Screen Antialiasing Sim Sim Sim
Motion Blur Sim Não Sim
Depth of Field Sim Não Sim
Accumulation Buffers Sim Não Não
Miscellaneous
Picking Support Sim Não Não
Multiple Monitor Support Não Sim Sim
Stereo Rendering Sim Sim Não

Tabela 2 – Diferenças entre OpenGL e Direct3D [9].

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