已经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文件
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上
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);
}
发布于 2013-07-02 13:58:27
下面的代码在MSVC2008 express、qt 4.8.1和glew版本1.7.0上编译得很好
main.cpp:
#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:
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,并使用扩展来绘制您想要的任何东西。我在这附近没有代码片段。
建议:
据一些人说
人们说了很多话,你不需要全信。
https://stackoverflow.com/questions/17424487
复制相似问题