首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QT中使用glew解析OpenGL函数

QT中使用glew解析OpenGL函数
EN

Stack Overflow用户
提问于 2013-07-02 11:32:33
回答 3查看 12.5K关注 0票数 8

已经17天了----我正努力用QT用OpenGL编写一个简单的程序,但是所有在谷歌上搜索的教程都失败了。我用-opengl桌面编译了QT5.0.1,使用msvc2010使桌面默认。

我读过Sean的教程,但它是依靠QT来解决opengl函数的。

据一些人说,在QT中使用glew是不可能的,因为QT的内置库阻止了glew包含它的头部,但是Sean 这里认为这是可能的(但是这里没有解释它是如何实现的)。

即使使用QGLWidget,我也不能使用OpenGL扩展。

现在,我想要的是使用所有OpenGL函数分离,所有窗口函数与QT分离,即QT不干扰OpenGL。

如果有人用简单的三角形例子和任何扩展来解释我的程序,我会非常感激的。

我在我的项目中使用了glew库,在我的程序刚开始时就包含了#included w.h,但是在编译时它会产生错误: glwidget.obj:-1: LNK2001: LNK2001:未解决的外部符号LNK2001

我的.pro文件

代码语言:javascript
运行
复制
QT       += core gui opengl

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = Trial
TEMPLATE = app

SOURCES += main.cpp\
        mainwindow.cpp \
    glwidget.cpp

HEADERS  += mainwindow.h \
    glwidget.h

FORMS    += mainwindow.ui

RESOURCES += \
    resources.qrc
win32: LIBS += -L$$PWD/../../../../../OpenGL/glew-1.9.0/lib/ -lglew32s

INCLUDEPATH += $$PWD/../../../../../OpenGL/glew-1.9.0/include
DEPENDPATH += $$PWD/../../../../../OpenGL/glew-1.9.0/include

win32: PRE_TARGETDEPS += $$PWD/../../../../../OpenGL/glew-1.9.0/lib/glew32s.lib

支持glewInfo的输出:GLEW1.9.0版像素格式1的报告功能,运行在NVIDIA 4.3.0版的GeForce GT 540 M/PCIe/SSE2 2上

代码语言:javascript
运行
复制
void GLWidget::initializeGL()
{
    GLenum err = glewInit();
    if(err != GLEW_OK)
    {
        printf("%s",glewGetErrorString(err));
    }

    glEnable(GL_DEPTH_TEST);
    qglClearColor(QColor(Qt::red));

    shaderProgram.addShaderFromSourceFile(QGLShader::Vertex, ":/vertexShader.vsh");
    shaderProgram.addShaderFromSourceFile(QGLShader::Fragment, ":/fragmentShader.fsh");
    shaderProgram.link();
    shaderProgram.bind();

    const GLubyte *oglVersion = glGetString(GL_VERSION);
    printf( "%s\n",oglVersion );

    GLfloat vertices[3][3] ={{ -0.5, -0.5, -1 },
                { 0,    0.5,    -1},
                    { 0.5,  -0.5,   -1}};
    vertexArray.create();
    vertexArray.setUsagePattern(QOpenGLBuffer::StaticDraw);
    vertexArray.allocate( vertices, 3 * 3 * sizeof( GLfloat ) );
    vertexArray.bind();
    shaderProgram.setAttributeBuffer( "vVertex", GL_FLOAT, 0, 3 );
    shaderProgram.enableAttributeArray( "vVertex" );

    GLuint arr[5];
    glGenBuffers(5,arr);
}
EN

Stack Overflow用户

发布于 2013-07-02 13:58:27

下面的代码在MSVC2008 express、qt 4.8.1和glew版本1.7.0上编译得很好

main.cpp:

代码语言:javascript
运行
复制
#include <GL/glew.h>
#include <QApplication>
#include <QGLWidget>

int main(int argc, char** argv){
    glewInit();//<<-- glew function
    QApplication app(argc, argv);
    QGLWidget widget;

    GLuint arr;
    glGenVertexArrays(1, &arr);//<--no linker error (added just for testing, most likely won't gen arrays)

    widget.show();
    return app.exec();
}

gltest.pro:

代码语言:javascript
运行
复制
TEMPLATE = app
TARGET = 
DEPENDPATH += .
INCLUDEPATH += . d:/c++/libs/include
LIBS += -L"d:/c++/libs/lib" -lglew32

CONFIG += console
QT += opengl

# Input
SOURCES += main.cpp

我假设Qt 5的情况不会有任何不同。

可以随意重写QGLWidget的paintGL,并使用扩展来绘制您想要的任何东西。我在这附近没有代码片段。

建议:

  1. 使用预编译的二进制文件。
  2. 使用动态链接版本的glew可能是有意义的。
  3. 注意标题包含顺序。

据一些人说

人们说了很多话,你不需要全信。

票数 4
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17424487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档