2009-05-20 18 views
0

私は、スクリーン自体を解像度よりも低い解像度でテクスチャにキャプチャしようとしています(画面にレンダリングしてぼかし/かなりうまくいきません。私はミップマップを使ってこれを行うことができると理解していますが、正しいコマンドシーケンスを得ることができません。OpenGL - その画面より小さい画面からテクスチャをコピーする

私の現在のコード:

width=1024; 
height=1024; 

glGenTextures(1, &texture); 

glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, texture); 

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glEnable (GL_BLEND); 
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); 

glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, width, height, 0); 

// code for rendering the screen back on goes here 

答えて

2

あなたが一度にキャプチャし、downfilterすることはできません。最初にフルスクリーンをより大きなテクスチャにキャプチャする必要があります。次に、ミップマップの自動作成が有効になっている場合はミップマップを作成し、そのテクスチャを再度使用してレンダリングして、ミップマップレベルを適切に調整します。

しかし、自動ミップマップ生成では通常ボックスフィルタが使用されるため、見栄えが悪くなります。

代わりに、FBO(フレームバッファオブジェクト)とGLSLシェーダを設定する方法があります。それはあなたのすべてのステップをより細かく制御できます:

  • は、フレームバッファに元の画像と
  • ブレンドフィルタリングをフィルタリングいくつかの素晴らしいガウスローパスを適用するテクスチャ
  • で元の画像を作成する
関連する問題