4

シンプルなQtアプリケーションをコンパイルして、openglフラグを含めたproファイルでQt5に移植しようとしました:

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コマンドは、ここに何が欠けているかを認識していますか?

4

4 に答える 4

1

古いレガシー OpenGL API を使用する場合は、追加する必要があります

#include <GL/gl.h> 

アプリをネイティブ プラットフォームの opengl ライブラリにリンクします (これを行うには、QtCreator .pro ファイルのドキュメントを参照してください)。

QT 5 での新しい (より良い) 方法は、QOpenGLFunctions を使用することです。QOpenGLWidget は、OpenGL 関数へのクロスプラットフォーム アクセスを提供します。

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

ただし、すべてのレガシー機能が提供されているわけではなく、OpenGL 1.x と ES 2.0 の共通サブセットのみが提供されています。OpenGL コードを最新の方法 (頂点バッファー、シェーダーなど) に書き直す必要があります。

次のような QOpenGLFunctions_X_X_profile インクルード ファイルを使用して、より高い OpenGL プロファイルを使用することもできます。

#include <QOpenGLFunctions_4_3_core>

このより高いバージョンの OpenGL を使用するには、互換性のある QSurfaceFormat を QOpenGLWidget に提供する必要もあります。

于 2016-03-31T15:43:27.143 に答える