2013-05-16 38 views
3

我嘗試在親文件我包括OpenGL的標誌來編譯簡單的Qt應用程序,並移植到QT5 :QT5缺失的OpenGL標識的

QT += opengl widgets 

也OpenGL的QT5路徑包括:

..\..\..\..\..\..\..\..\Qt\Qt5.0.1\5.0.1\msvc2010\include\QtOpenGL 

但是當我編譯應用程序即時得到的編譯錯誤

1>qmpwidget.cpp(148): error C3861: 'glClearDepth': identifier not found 
1>qmpwidget.cpp(159): error C3861: 'glLoadIdentity': identifier not found 
1>qmpwidget.cpp(167): error C2065: 'GL_QUADS' : undeclared identifier 
1>qmpwidget.cpp(167): error C3861: 'glBegin': identifier not found 
1>qmpwidget.cpp(168): error C3861: 'glTexCoord2f': identifier not found 
1>qmpwidget.cpp(168): error C3861: 'glVertex2f': identifier not found 
1>qmpwidget.cpp(169): error C3861: 'glTexCoord2f': identifier not found 
1>qmpwidget.cpp(169): error C3861: 'glVertex2f': identifier not found 
1>qmpwidget.cpp(170): error C3861: 'glTexCoord2f': identifier not found 
1>qmpwidget.cpp(170): error C3861: 'glVertex2f': identifier not found 
1>qmpwidget.cpp(171): error C3861: 'glTexCoord2f': identifier not found 
1>qmpwidget.cpp(171): error C3861: 'glVertex2f': identifier not found 
1>qmpwidget.cpp(172): error C3861: 'glEnd': identifier not found 

其他opengl命令做recognazied 什麼即時消息在這裏失蹤?

回答

-3

您是否正確包含GL/gl.h

Qt本身只定義了一小部分OpenGL函數供內部使用,與系統安裝的標題無關。我對glClearDepth感到有點驚訝,但所有其他函數和標記已從OpenGL-3和更高版本中刪除,而Qt5不使用它們。

0

,如果你想使用舊的傳統的OpenGL API,您必須添加

#include <GL/gl.h> 

和您的應用程序鏈接到你的本地平臺的OpenGL庫(見QtCreator的.pro文件文檔做到這一點)。

使用QT 5的新(更好的)方法是使用QOpenGLFunctions。 QOpenGLWidget提供跨平臺訪問OpenGL函數通過

context()->functions()->glxxxx. 

但並不是提供所有傳統功能:唯一的OpenGL 1.x和ES 2.0的公共子集。你必須以現代的方式重寫你的OpenGL代碼(頂點緩衝區,着色器,...)。

您也可以使用更高的OpenGL型材QOpenGLFunctions_X_X_profile包括像文件:

#include <QOpenGLFunctions _4_3_core> 

要使用此高版本的OpenGL的,你還需要提供一個兼容QSurfaceFormat您QOpenGLWidget。