2016-03-30 9 views
0

QOpenGLWidgetリサイズ機能に問題があります。明らかに、私は正確なピクセル数とウィンドウの実際の中心に合わせたシーンを持つ新しいビューポートを目指しています。しかし、これらの2つのことは何とかしていません。QOpenGLWidget結果のサイズが正しくないビューポートサイズ

初期1:ここでは

は、いくつかのイメージです

Yにスケーリングされた

Correct

Xでスケーリング

Scaled in Y

Scaled in X

結果がピクセル化され、翻訳されます。私にとっては、GLビューポートが正しいピクセル数を持つように見えますが、(0,0)が左下隅と定義されている場合は、右上にスケーリングされます)。 resizeGLが正しい値で呼び出され

void GLWidget::initializeGL() { 
    QOpenGLFunctions::initializeOpenGLFunctions(); 
    glClearColor(0.7f, 0.75f, 0.8f, 1.0f); 
    glEnable(GL_MULTISAMPLE); 
    glEnable(GL_BLEND); 
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
} 

void GLWidget::resizeGL(int w, int h) { 
    qreal aspect = qreal(w)/qreal(h ? h : 1); 
    const qreal zNear = 3, zFar = 7, fov = 3.14/6; 
    //I will leave this at it is. This cannot cause the viewport translation 
    mGraphics->setProjectionPers(fov, aspect, zNear, zFar); 
} 

void GLWidget::paintGL() { 

    glClear(GL_COLOR_BUFFER_BIT); 
    glClear(GL_DEPTH_BUFFER_BIT); 
    glEnable(GL_DEPTH_TEST); 
    glEnable(GL_CULL_FACE); 

    //actual Drawing 
    //... 
} 

は、ここに私のコードです。このコードを実行すると、ピクセル化され変換されたイメージを持っているとどうしたらいいですか?

+0

私はglViewport呼び出しが表示されないため、私は助けになることはできません。 resizeGLでglViewportを呼び出す必要があります。また、私はmGraphics-> setProjectionPersが何をしているのかわかりません – Fabio

+0

私はglViewport(0,0、w、h)で自分自身を呼び出すglViewを試そうとしました。何も変えなかった 実際には、この呼び出しはQtリファレンスに従ってresizeGLを呼び出す前にQtによって実行されます。 setProjectionPersについてglmで投影行列を作成し、実際の描画セクションのシェーダに渡します。 アスペクト(そこで唯一の変数値)を1.0fに設定すると、オブジェクトは最初に中央に配置され、ウィンドウのサイズを変更するとさまようことになります。 – xeed

+0

もう一つのこと。初期サイズは関係ありません。 100x100または1000x100または500x500の場合、オブジェクトは最初は滑らかなエッジで常にセンタリングされます。ウィンドウのサイズを変更すると、シーンが中心から離れてピクセル化されます。 – xeed

答えて

1

何らかの理由で、これは私のQOpenGLWidgetの降順のヘッダファイルにあった:

void resizeEvent(QResizeEvent* ev) { 
    resizeGL(width(), height()); 
} 

QOpenGLWidgetクラスの全てリサイズロジックこれはかなりスキップ。

関連する問題