我在使用Qt 5.1.0中的OpenGL时遇到了严重的问题。我的编译器是MinGW 32位,我使用的是Windows10 64位。我试图创建一个包含OpenGL小部件的主窗口。在这个OpenGL小部件中,我尝试绘制一个三角形。
我已经下载了glew1.9.0(因为glew-2.0.0下载给了我一个空的lib文件夹)。我已经包含了静态库glew32s.lib
(而不是动态的.dll
)。我添加了#define GLEW_STATIC
和#include <gl/glew.h>
。我还在我的.pro
文件中添加了库路径、关于链接的库以及包含路径的信息。
但是我仍然无法找到所有在glew.h
中包含的函数的定义。实际上,我注意到,尽管我使用了例如glGenBuffers()
,但我收到了__glewGenBuffers()
的消息。在gl.glew.h
中,我发现定义glGenBuffers
的行调用了未定义的__glewGenBuffers()
。
1685 #define glGenBuffers GLEW_GET_FUN(__glewGenBuffers)
14376 GLEW_FUN_EXPORT PFNGLGENBUFFERSPROC __glewGenBuffers;
那么,问题可能是在glew.h
中调用了__glewGenBuffers
但尚未定义吗?我的意思是,我有什么遗漏吗?我已经尝试了2天,尝试了所有发布在类似帖子中的方法,但我找不到解决方案。
以下是代码的一个小部分,代表性的:
glwidget.cpp:
#define GLEW_STATIC
#include <gl/glew.h>
#include "glwidget.h"
GLWidget::GLWidget(QWidget *parent) :
QGLWidget(parent)
{
}
extern "C" void GLWidget::initializeGL()
{
glewInit();
glClearColor(0, 1, 0, 1);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glEnable(GL_COLOR_MATERIAL);
GLfloat verts[] =
{
+0.0f, +1.0f,
-1.0f, -1.0f,
+1.0f, -1.0f,
};
GLuint myBufferID;
glGenBuffers(1, &myBufferID);
glBindBuffer(GL_ARRAY_BUFFER, myBufferID);
glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
}
void GLWidget::resizeGL(int w, int h)
{
}
void GLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDrawArrays(GL_TRIANGLES, 0, 3);
}
.pro文件:
QT += core gui opengl
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = New_Beam
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp \
glwidget.cpp
HEADERS += mainwindow.h \
glwidget.h \
../../../../../Qt/Qt5.3.2/glew-1.9.0/include/GL/glew.h
FORMS += mainwindow.ui
win32: LIBS += -L"C:/Qt/Qt5.3.2/glew-1.9.0/lib" -lglew32s -lopengl32
INCLUDEPATH += C:/Qt/Qt5.3.2/glew-1.9.0/include
DEPENDPATH += C:/Qt/Qt5.3.2/glew-1.9.0/include
消息如下:
对我所使用的所有 glew 函数都是一样的。 欢迎任何答案。未定义的参考 '__glewGenBuffers'