2016-10-31 16 views
1

私は次のレンダリングパスで結果をテクスチャとして使用できるように、FrameBufferObjectにレンダーパスを行っています。チュートリアルを見て、私が呼び出す必要があります:mWidthとmHeightはフレームバッファオブジェクトの幅と高さOpenGL FrameBufferとglViewport

glBindFramebuffer(GL_TEXTURE2D, mFrameBufferObjectID); 
glViewport(0, 0, mWidth, mHeight); 

。このglViewport呼び出しがなければ、何も正しく描画されません。どのような奇妙なのは、次のフレームの開始時に、私が呼び出す必要がある:私は窓の私の前の幅/高さに戻ることができ

glViewport(0, 0, window_width, window_height); 

ように。それを呼び出すことは、元のウィンドウサイズの半分で私のものをレンダリングするように見える。だから、物理的に見ると、私の画面の四分の一だけがレンダリングされます(すべてのシーンが表示されます)。私はブレークポイントを入れて、幅と高さの値を見てみました、彼らは元の値(1024,640)です。なぜこうなった?私はそれらを倍増させて、それは正しく私のウィンドウ全体を描画します。

私はxcodeとglewでMacでこれをやっています。

+2

のこのリンクを参照してください。 – ybungalobill

+1

これは網膜スクリーンを備えたMacですか?論理ピクセルの解像度と画面上の実際の物理ピクセルの解像度が混在している可能性があります。または、正しい用語が何であれ... –

+0

はい、私はMacのxcodeでこれを使用しています。 – ChaoSXDemon

答えて

0

ビューポートの設定はグローバルな状態で保存されます。したがって、変更すると、glViewportを再度呼び出すまで、新しい値にとどまります。既に指摘したように、以前にバインドされたものとは異なるサイズのFBO(またはバックバッファ)にレンダリングするときはいつでも、サイズを設定する必要があります。

+0

glViewport(0、0、1024、1024)を呼び出すと、 fboをレンダリングすると、(1024、680)の解像度を持つ画面にビューポートを復元したい。 glViewport(0、0、1024、680)を呼び出すと、画面の1/4がレンダリングされ、フルスクリーンはレンダリングされません。 – ChaoSXDemon

+0

私は参照してください。コマンドを実行する順序を正確に示してください。ビューポートをリセットする正しい場所は、画面に描画する直前です。 – BDL

+0

私は何度も何度も見た。 glViewport(0、0、X、Y)は、ウィンドウのX/2とY/2の幅と高さを教えてくれるようです。おそらく、これはMacの「高解像度」のピクセルですか? – ChaoSXDemon

0

あなたは、シザーテストは、あなたの問題を解決するには

glEnable(GL_SCISSOR_TEST); 

を使用して有効にしている場合は、シザーボックスと同様に、ビューポートを調整してみてくださいは毎回

glViewport(0, 0, mWidth, mHeight); 
glScissor(0, 0, mWidth, mHeight); 

glViewport(0, 0, window_width, window_height); 
glScissor(0, 0, window_width, window_height); 

を書きます前のフレームバッファとは異なるサイズの新しいフレームバッファに切り替えるか、常に安全であるようにするe。

は、問題は、あなたが表示されませんでしたコードである可能性があり、参照glScissor またはその目的を説明する。この他のポストhttps://gamedev.stackexchange.com/questions/40704/what-is-the-purpose-of-glscissor

関連する問題