2012-01-24 10 views
3

私はQGLWidgetから継承するクラスを書いている:beginNativePainting()内でテクスチャを反転させる方法は?

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()の間で実行され、これは正常に動作します。

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

私は単純にフリップを行うには、このようなglFrustum()を呼び出すことができますネイティブのGLUTアプリケーションで

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()を呼び出して試してみました私が得るのは黒い画面です(これは期待どおりに機能しなかったことを意味します)。

ヒント?

の方法をQImageとすると、反転しても画像の表示に影響はありませんでした。

答えて

3

投影を反転しないで、テクスチャの座標を反映させます。

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

+0

@karlphillip:テクスチャを描画するコードを私に与えない限り、できます。それはこれに依存します。 – datenwolf

+0

よろしくお願いいたします。今私は何をしなければならないか分かっています。私はちょうどそれをテストし、それは働いた。 – karlphillip

関連する問題