qt5.9.2 下配置opengl!(有坑)

OpenGL是一个应用程序编程接口API,其实就是一个方便访问计算机图形硬件的封装库。

有几个概念需要说下:

模型:由几何里点线面组合而成的数据集

渲染:计算机从模型创建出图形的过程。

着色:被编译为GPU执行的代码。Opengl包含编译工具,把着色的源码编译。

OpenGL是一个操作计算机图形的集合,它包含多种库。常见的如glfw、glut、freeglut等。

本文通过下载freeglut来初步学习了解其原理。

1 下载安装

freeglut库里面有两个版本,都包含32和64位的,根据Qt的配置自己选择:

下载地址:http://www.transmissionzero.co.uk/software/freeglut-devel/ 

 2 配置

msvc环境配置(64位):

1) .解压后将freeglut文件中的bin文件下的x64文件下的freeglut.dll,拷贝至QT的安装路径   D:\Qt\Qt5.2.4\5.2.4\msvc2017_64\bin目录下;
2) .解压后将freeglut文件中的include文件下的GL文件夹,拷贝至QT的安装路径D:\Qt\Qt5.2.4\5.2.4\msvc2017_64\include目录下;
3) .解压后将freeglut文件中的lib文件下的x64文件下的freeglut.lib,安装路径D:\Qt\Qt5.2.4\5.2.4\msvc2017_64\lib目录下;

MinGW环境配置(32位版本):

1) .解压后将freeglut文件中的bin文件下的freeglut.dll,拷贝至QT的安装路径D:\Qt\Qt5.2.4\5.9.4\mingw53_32\bin目录下;
2) .解压后将freeglut文件中的include文件下的GL文件,拷贝至QT的安装路径D:\Qt\Qt5.2.4\5.2.4\mingw53_32\include目录下;
3) .解压后将freeglut文件中的lib文件下的libfreeglut.a、libfreeglut_static.a文件,拷贝至QT的安装路径D:\Qt\Qt5.2.4\5.2.4\mingw53_32\lib目录下;

 上面那样配置的好处是在编译的时候可以不用 -LD:/Qt/Qt5.9.2/5.9.2/msvc2017_64/lib 指定库的目录,方便使用。

 3 使用

#第三种就是多个库在同一个文件夹下的时候,连接使用
LIBS += -LD:/Qt/Qt5.9.2/5.9.2/msvc2017_64/lib -lfreeglut -lOpenGL32

MinGW版本:

win32:LIBS += -lOpengl32 \
                          -lglu32 \
                          -lglut \
                          -lfreeglut

使用库时没有前缀lib及后缀.a .lib,但有前缀-l

最后在cpp中加入#include ,这样就可以使用glut中的函数了。

附上使用的源码:

#include "GL/glut.h"

// 初始化参数
void init() {
    glClearColor(0.1, 0.1, 0.4, 0.0);
    glShadeModel(GL_SMOOTH);
}

// 绘图回调函数
void display() {

    // 清除之前帧数据
    glClear(GL_COLOR_BUFFER_BIT);

    // 绘制三角形
    glBegin(GL_TRIANGLES);
    glColor3f(1, 0, 0);
    glVertex3f(-1, -1, -5);
    glColor3f(0, 1, 0);
    glVertex3f(1, -1, -5);
    glColor3f(0, 0, 1);
    glVertex3f(0, 1, -5);
    glEnd();
    // 执行绘图命令
    glFlush();
}

// 窗口大小变化回调函数
void reshape(int w, int h) {
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(60.0, (GLfloat)w/(GLfloat)h, 0.1, 100000.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

int main(int argc, const char * argv[]) {
    // 初始化显示模式
    glutInit(&argc, const_cast(argv));
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

    // 初始化窗口
    glutInitWindowSize(500, 500);
    glutInitWindowPosition(100, 100);
    glutCreateWindow(argv[0]);

    init();
    glutReshapeFunc(reshape);
    glutDisplayFunc(display);

    // 开始主循环绘制
    glutMainLoop();
    return 0;
}


 

 

你可能感兴趣的:(C++,QT,OpenGL)