17 天以来,我一直在努力使用 QT 在 OpenGL 中编写一个简单的程序,但是在 Google 上搜索的所有教程都失败了。我已经使用 msvc2010 使用 -opengl 桌面编译了我的 QT 5.0.1,以使桌面 opengl 成为默认值。
我读过 Sean Harmer 的教程,但它依赖于 QT 来解决 opengl 函数。
根据一些人的说法,不可能在 QT 中使用 glew,因为 QT 的内置库阻止 glew 包含其标题,但根据 Sean Harmer HERE的说法,这是可能的(但那里没有解释如何)。
即使使用 QGLWidget 我也无法使用 OpenGL 扩展。
现在我想要的是单独使用所有 OpenGL 函数和 QT 中的所有窗口函数,即 QT 不会干扰 OpenGL。
如果有人用简单的三角形示例并使用任何扩展名向我解释该过程,我将非常感激..
我在我的项目中使用了 glew 库,并在程序的一开始就使用了 #included glew.h,但是编译时它给出了错误:glwidget.obj:-1: error: LNK2001: unresolved external symbol imp_ _glewGenVertexArrays
我的简历
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 的输出:GLEW 版本 1.9.0 报告像素格式 1 的能力 在 NVIDIA Corporation 的 GeForce GT 540M/PCIe/SSE2 上运行 支持 OpenGL 版本 4.3.0
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);
}