4

glGenBufferQt5で関数が見つからないようです。インクルードリストは次のようになります

#include <QtOpenGL/qgl.h>
#include <QtOpenGL/qglbuffer.h>
#include <QtOpenGL/qglcolormap.h>
#include <QtOpenGL/qglframebufferobject.h>
#include <QtOpenGL/qglfunctions.h>
#include <QtOpenGL/qglpixelbuffer.h>
#include <QtOpenGL/qglshaderprogram.h>
#include <GL/GLU.h>

次の例のようなことをしようとしています:

http://qt-project.org/doc/qt-5.0/qtopengl/cube.html

それはどこにある?

4

4 に答える 4

7

私は遅れていることを知っていますが、ここにもっとエレガントな解決策があります(GLEWは必要ありません=))

QT += opengl*.pro ファイルに含まれていること、Qt のバージョンに OpenGL が#include <QGLFunctions>含まれていること、および (上にリストしたすべてのインクルードは必要ありません。この 1 行だけ) があることを確認することに加えて、ヘッダー ファイルには、もう 1 つ必要なものがあります。

したがって、これらすべての関数を呼び出すクラスがあるとします。

class MeGlWindow : public QGLWidget
{
   // bla bla bla...
}

保護されたクラスQGLFunctionsを継承する必要があります:

class MeGlWindow : public QGLWidget, protected QGLFunctions // add QGLFunctions
{
   // bla bla bla...
}

glewInit()また、OpenGL 関数を呼び出す前にGLEW を 1 回呼び出す必要があるのと同様に、QGLFunctionsを呼び出す必要がありますinitializeGLFunctions()。たとえば、 in はQGLWidgetinitializeGL()描画を開始する前に 1 回呼び出されます。

void MeGlWindow::initializeGL()
{
    initializeGLFunctions();

    // ...now you can call your OpenGL functions!
    GLuint myBufferID;
    glGenBuffers(1, &myBufferID);

    // ...
}

これで、 GLEW なしglGenBuffersで 、glBindBuffer、またはその他の openGL 関数を呼び出すことができるはずです。glVertexAttribPointer

更新: のような特定の OpenGL 関数は、 では機能glVertexAttribDivisorglDrawElementsInstancedませんQGLFunctions。これは、QGLFunctionsこれらの機能がない可能性がある OpenGL/ES 2.0 API に固有の機能のみを提供するためです。

これを回避するには、Qt 5.1 以降でのみ利用可能なQOpenGLFunctions_4_3_Core (または類似のもの) を使用できます。、およびQGLFunctionsに置き換えます。QOpenGLFunctions_4_3_CoreinitializeGLFunctions()initializeOpenGLFunctions()

于 2014-06-18T13:28:59.573 に答える
1

プロジェクト (.pro) ファイルに追加する、インポートする各ヘッダーのフォルダーを指定する必要がなく、すぐに使用できることQT += openglがわかります。#include <QGLFunctions>

GLEWを使用QGLFunctionsする利点は、アプリケーションを任意のプラットフォームでコンパイルでき、GLEW ライブラリがシステムのどこに隠されているかに依存しないことです。Qt ライブラリがこれを行います。@phyatt が指摘したように、Qt の Cube の例は、このライブラリの使用方法を確認するための良い例です。

于 2013-02-25T15:50:17.833 に答える
1

あなたが引用した例のソースを見る:

http://qt-project.org/doc/qt-5.0/qtopengl/cube-geometryengine-h.html

それは持っています:

#include <QGLFunctions>

どちらが持っていますかglGenBuffers

http://qt-project.org/doc/qt-5.0/qtopengl/qglfunctions.html

http://qt-project.org/doc/qt-5.0/qtopengl/qglfunctions.html#glGenBuffers

それが役立つことを願っています!

于 2013-02-24T05:51:42.747 に答える
0

私はexamplesフォルダーで私の質問に対する答えを見つけました。

glextensions.h具体的には、 GLEWのように機能するというヘッダーをコピーする必要がありました。

結局GLEWを使いました。

于 2013-02-25T09:11:30.437 に答える