To było 17 dni Staram się napisać prosty program w OpenGL przy użyciu QT, ale wszystkie tutoriale wyszukiwane w Google nie powiodły się. Skompilowałem mój QT 5.0.1 z użyciem pulpitu -opengl, używając msvc2010, aby ustawić domyślny OpenGL na pulpicie.Rozstrzyganie funkcji OpenGL za pomocą glew w QT
Przeczytałem samouczek Seana Harmera, ale jest zależne od QT w celu rozwiązania funkcji opengl.
Według niektórych osób nie jest możliwe użycie polecenia QT, ponieważ wbudowane biblioteki QT uniemożliwiają użycie glew z nagłówkami, ale według Seana Harmera HERE jest to możliwe (ale nie jest tam wyjaśnione) .
Nawet przy użyciu QGLWidget nie mogę używać rozszerzeń OpenGL.
Teraz chcę tylko użyć wszystkich funkcji OpenGL oddzielnie i wszystkich funkcji okienkowania z QT oddzielnie, tj. Bez interferencji w OpenGL przez QT.
Jeśli ktoś wytłumaczyć mi procedurę z prostym przykładzie trójkąta i za pomocą dowolnego rozszerzenia, I'l być tak wdzięczny ..
I'v używany glew biblioteki w moim projekcie i #included glew.h na samym początku mój program, ale gdy kompilowany daje błąd: glwidget.obj: -1: błąd: LNK2001: nierozwiązanych zewnętrznych symbolu imp_ _glewGenVertexArrays
mój plik .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
Wyjście przez glewInfo: wersja GLEW 1.9.0 raportowania z PixelFormat 1 przebiegu na GeForce GT 540M/PCIe/SSE2 z NVIDIA Corporation OpenGL w wersji 4.3.0 jest obsługiwana
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);
}
"Według niektórych osób nie można użyć polecenia QT" Wrong. Większość osób korzystających z OpenGL w aplikacjach Qt konfiguruje rozszerzenia z GLEW i wywołuje surowe funkcje OpenGL z wnętrza 'QGLWidgets'. Ale bez konkretnych komunikatów o błędach użyty plik '.pro', z którego korzystamy, itp., Nie możemy Ci pomóc. – cmannett85
błędy "nierozwiązany zewnętrzny symbol imp__glew" pojawia się, gdy glew32s.lib jest dodany z oznaczeniem statycznym i znika, gdy glew32.lib zostanie dodany z dynamicznym oznaczeniem. Chociaż mój program kończy się nieoczekiwanie, po uruchomieniu w trybie debugowania problem jest w glDrawArrays ... – avg598
Jeśli próbujesz uzyskać łącze statyczne w systemie Windows, musisz zdefiniować token "GLEW_STATIC". Prawdopodobnie nazywasz również 'glewInit()', gdy już masz poprawny kontekst. – cmannett85