Embora eu particularmente prefira o Direct3D, tenho que reconhecer que OpenGL é mais fácil de usar e é portável para uma variedade de plataformas entre elas Linux, Unix, MacOS, OS/2, Windows 9X/2K/XP, BeOS (que é um SO otimizado para aplicações gráficas) e para várias linguagens de programação como C++, C#, C, Fortran, Perl, Java, Píton, Ada, VB, Delphi.

Só aí, já mostra que vale a pena dedicar um tempo para aprender e utilizar o OpenGL.

Mas o que exatamente é e faz o OpenGL?

Segundo o site, o OpenGL é “o primeiro ambiente para desenvolvimento portável de aplicações gráficas 2D e 3D”.

De fato a API do OpenGL possui uma série de funções de visualizações gráficas, efeitos especiais, renderização e texturização de imagens e dentre as suas principais vantagens estão a Estabilidade, Confiabilidade e Portabilidade.

Outro fator que torna o OpenGL uma boa opção para desenvolvimento gráfico, seja de games ou não, é a farta documentação existente tanto no site oficial quanto em sites de terceiros, forums, sites para desenvolvedores onde podem ser baixados centenas de códigos abertos.

Para não ficarmos somente na teoria, segue abaixo um pequeno código exemplo que fiz utilizando Visual C++ Express Studio que utiliza algumas das funções do OpenGL e GLUT para criar uma janela com um triangulo.

Arquivo testeopengl1.h:

            #ifndef TESTEOPENGL1_H

#define TESTEOPENGL1_H

       void main();

       void triangulo();   

#endif
        
Arquivo testeopengl.cpp:

            #include <glut.h>

                #include "testeopengl1.h"          
                 
                
                void main()
                
                {
                
                       glutInitWindowSize(400,400); //Coordenadas da janela
                
                       glutCreateWindow("meu primeiro triangulo"); // Titulo que vai aparecer na janela
                                 
                
                       glutDisplayFunc(triangulo); // chama a função de desenho do triangulo
                
                              
                       glutMainLoop(); // Fica em loop aguardando outros comandos que possam ser adicionados
                               
                
                }
                
                void triangulo()
                
                {
                                                   
                       glColor3f(0.0f, 0.0f, 1.0f);  //Selecionamos a cor Azul
                
                      
                
                       glBegin(GL_TRIANGLES);  // Escolhendo o tipo TRIANGLES
                
                             glVertex2f(-20.0f, 2.0f);   // Cordenada de Cada vertice
                
                             glVertex2f(  0.0f,20.0f);   //
                
                             glVertex2f( 20.0f, 2.0f);   // 
                
                       glEnd();
                              
                
                       glFlush(); // Força a execução dos comando passados acima
                
                }