Configurando o GLUT no Qt - Windows
Autor: Rhuan Victor C. de Santiago | Publicado: 2011-09-06T22:02:00-07:00



Todo mundo que conhece o Qt (não conhece? clique aqui) sabe o quão poderoso ele é.&nbsp;O Qt já vem com uma própria biblioteca para a construção de softwares em OpenGL. Todavia, alguns programadores não querem refatorar seus códigos, mas somente trocar de IDE. O&nbsp;Dev-C++, por exemplo, é muito simples se comparado o Qt Creator. Por isso mostrarei como configurar o ambiente para usar o&nbsp;GLUT api&nbsp;+ Qt.




&nbsp;- Baixe o GLUT. 
&nbsp;- Crie o projeto. 
&nbsp;-&nbsp;Adicione as referencias. 
&nbsp;-&nbsp;Defina alguns Macros. 
&nbsp;-&nbsp;Teste a Aplicação. 
&nbsp;-&nbsp;Possíveis Erros.




Baixe o arquivo binário do GLUT na página do Nate Robins. Apenas as dlls, não precisamos do fonte.

Crie um projeto Qt Gui Application e escolha qualquer nome para a sua classe MainWindow.
Abra a pasta do seu projeto, crie uma pasta chamada GL e adicione os arquivos do glut que você baixou anteriormente.

Abra o arquivo .pro do projeto, localizado no menu lateral esquerdo.
Adicione a referencia do openGl:

QT       += core gui opengl
Adicione o path do glut32.lib:

LIBS += \GL\glut32.lib
Adicione o header glut.h aos HEADERS

HEADERS  +=&nbsp;GL/glut.h
No arquivo main, antes dos includes, defina os macros abaixo para evitar erros de compilação:

#define _STDCALL_SUPPORTED
#define GLUT_NO_LIB_PRAGMA
 #define GLUT_NO_WARNING_DISABLE
Inclua o glut.h no main e pronto, o GLUT está pronto para ser usado.

#include "GL/glut.h"
Se você fez todos os passos anteriores seu main deverá ter ficado mais ou menos assim:
 


#define _STDCALL_SUPPORTED
#define GLUT_NO_LIB_PRAGMA
#define GLUT_NO_WARNING_DISABLE
#include &lt;QApplication&gt;
#include "mainwindow.h"
#include "GL/glut.h"


int main(int argc, char *argv[]) {
        QApplication app(argc, argv);
        MainWindow window;
        window.show();

        return app.exec();
}





Se você compilar e executar esse código, irá aparecer uma janela com o nome da sua classe main window.
Caso tenha dado algum erro de compilação, veja esse site que mostra os erros mais comuns.&nbsp;http://oldwiki.mingw.org/index.php/Glut


Adicione agora dentro da função main, a chamada de algumas funções padrão do GLUT. Em seguida defina as funções que foram passadas em seus argumentos. Analise o código abaixo e veja como funciona.


// Função callback chamada para fazer o desenho
void Desenha(){
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    // Limpa a janela de visualização com a cor de fundo especificada
    glClear(GL_COLOR_BUFFER_BIT);

    glColor3f(.0f, 1.f, .0f);

    glColor3f(0.f, .0f, 1.f);
    // Executa os comandos OpenGL
    glFlush();
}
// Inicializa parâmetros de rendering
void Inicializa (GLfloat r, GLfloat g, GLfloat b, GLfloat a){
    // Define a cor de fundo da janela de visualização como preta
    glClearColor(r, g, b, a);
}

// Função callback chamada quando o tamanho da janela é alterado
void AlteraTamanhoJanela(GLsizei w, GLsizei h) {
    // Evita a divisao por zero
    if(h == 0) h = 1;
    // Especifica as dimensões da Viewport
    glViewport(0, 0, w, h);
    // Inicializa o sistema de coordenadas
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    // Estabelece a janela de seleção (left, right, bottom, top)
    if (w &lt;= h) gluOrtho2D (0.0f, 250.0f, 0.0f, 250.0f*h/w);
    else gluOrtho2D (0.0f, 250.0f*w/h, 0.0f, 250.0f);
}

// Programa Principal
int main(int argc, char *argv[]) {

        glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
        glutCreateWindow("MyOpenGL");
        glutDisplayFunc(Desenha);
        glutReshapeFunc(AlteraTamanhoJanela);
        Inicializa(.0,.0,.0,1);
        glutMainLoop();

        QApplication app(argc, argv);
        MainWindow window;
        window.show();

        return app.exec();
}



Edite a função Desenha() para desenharmos um triângulo.


void Desenha(){
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    // Limpa a janela de visualização com a cor de fundo especificada
    glClear(GL_COLOR_BUFFER_BIT);

    glColor3f(.0f, 1.f, .0f);

    glBegin(GL_POLYGON);
    glVertex2i(10, 10);
    glVertex2i(10, 40);
    glVertex2i(40, 10);
    glEnd();

    glColor3f(0.f, .0f, 1.f);
    // Executa os comandos OpenGL
    glFlush();
}



É isso aí, agora é só aproveitar todo o poder do framework Qt que lhe é oferecido e criar várias aplicações poderosas usando OpenGL, GLUT e Qt.