2009-05-20 54 views
0

我試圖將屏幕捕獲到具有比屏幕本身更低的分辨率的紋理(要呈現回屏幕上並創建模糊/布盧姆效果),並且它工作不太好。我知道mipmap可以用來做到這一點,但我無法獲得正確的命令序列。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。您必須首先將全屏捕捉到較大的紋理,然後在啓用自動創建mipmap的情況下創建mipmap,然後再次使用該紋理渲染紋理,並確保適當調整mipmap級別。

但是,這看起來很醜陋,因爲自動mipmapgeneration通常使用盒式過濾器。

我要做的是設置一些FBO(幀緩衝區對象)和GLSL着色器。這讓你在所有的步驟更精細的控制:

  • 在紋理
  • 創建原始圖像應用了一些不錯的高斯低通濾波
  • 混合過濾與原始圖像的幀緩衝器