-2

ビューポートのサイズをピクセル単位で取得し、qt opengl で Vec2f に変換するにはどうすればよいですか? シェーダーに必要です。

getWindowSize() については知っています。

4

3 に答える 3

3

他のフレームワークでビューポートのサイズを取得するのと同じ方法... GLint vp [4]; glGetIntegerv (GL_VIEWPORT, vp);これは 4 つのパラメータの整数配列を返すことに注意してください - に渡すものと同じですglViewport (...)

優れたソフトウェアは、おそらくビューポート サイズをキャッシュされたローカル状態として保持することにより、OpenGL ステート マシンにこの情報を要求する必要がないように記述されます。しかし、それを行う以外に、これがビューポートのサイズを知る唯一の方法です。これは、ウィンドウのサイズとは無関係であるため、Qt からウィンドウのサイズを知っていても、この問題の解決にはまったく役立ちません。

于 2013-09-25T23:23:05.690 に答える
1

resizeGL イベントを使用QWidget::width()QWidget::height()て、ウィンドウのサイズを取得し、そこからビューポートのサイズを決定するだけです。ハンドラーでビューポートを設定しないでください。QGLWidget::resizeGLこれを使用して、後処理の FBO に使用されるテクスチャのように、画面サイズに依存し、変更に費用がかかるものを調整する必要があります。

于 2013-09-25T19:45:27.640 に答える
0

resizeGL メソッドを正しく実装するには、再実装する必要があります。詳細については、ドキュメントを参照してください。次のように書きます。

void resizeGL(int w, int h)
{
    ...
    Vec2f myVec2f((GLint)w, (GLint)h);
    ...
}

そのように幅と高さを取得したら、Vec2f への変換は非常に簡単です。基本的にVec2f(width, height)施工のみです。

サイズ変更イベントのコンテキスト外でそれらを取得する必要がある場合は、、QWidget::size()またはQWidget::width()、およびを使用することもできます。QWidget::height()

于 2013-09-25T19:39:53.727 に答える