3

QGLWidgetから継承するクラスを書いています:

class GLWidget : public QGLWidget
{
    Q_OBJECT

public:
    GLWidget(QWidget *parent = 0);
    ~GLWidget();

    void paintEvent(QPaintEvent *event);    

private:
    QImage* _frame;
};

のコンストラクターはGLWidget、ディスクからイメージをロードし、との間でpaintEvent()実行されるネイティブOpenGL呼び出しを使用してデータをGPUに送信する役割を果たします。これは、正常に機能します。beginNativePainting()endNativePainting()

問題は、画像が(垂直に)反転して表示されていることです。これを修正する必要があります。私はこれへの道を見つけていないので、誰かがこの問題について私を助けてくれることを願っています。

ネイティブのGlutアプリケーションではglFrustum()、次のように呼び出すだけでフリップを実行できます。

static void Reshape( int width, int height )
{
   glViewport( 0, 0, width, height );

   glMatrixMode( GL_PROJECTION );
   glLoadIdentity();

   glFrustum( -1.0, 1.0, 1.0, -1.0, 10.0, 100.0 );  // flip vertically

   glMatrixMode( GL_MODELVIEW );
   glLoadIdentity();
   glTranslatef( 0.0, 0.0, -15.0 );
}

しかし、の後に投影行列をロードして、上記の呼び出しと同じ値で呼び出してみましbeginNativePainting()glFrustum()が、表示されるのは黒い画面だけです(つまり、期待どおりに機能しませんでした)。

任意のヒント?

また、フリッピングを行うmirrowed(false, true)方法を使用QImageしても、画像の表示には何の効果もありませんでした。

4

1 に答える 1

3

投影を反転せず、テクスチャ座標をミラーリングします。

ところで:OpenGLは、テクスチャ画像データの原点を左下隅にあると想定しています(左上隅にあるほとんどのウィンドウシステムとは異なります)。

于 2012-01-24T16:14:34.070 に答える