2012-12-28 20 views
2

我嘗試在opengl中使用FBO創建2 pass效果。 在第一遍中,我將深度寫入顏色緩衝區(圖像1)。使用在其頂點着色器下面 :opengl中的2 pass效果

gl_Position = projection * view * gl_Vertex; 
vec4 position = gl_Position/gl_Position.w; 
position = position/2.0 + 0.5; 
float temp_depth = position.z; 
gl_FrontColor = vec4(temp_depth,temp_depth,temp_depth,1); 

在第二遍我嘗試從先前通使用紋理和色彩的場景(圖像2)。 這裏是頂點着色器代碼:

vec4 shadow_coord = projection * view * gl_Vertex; 
shadow_coord = shadow_coord/shadow_coord.w; 
shadow_coord = shadow_coord/2.0 + 0.5; 
gl_FrontColor = texture2D(light_depth_texture, shadow_coord.xy); 

的場景是在一個錐形的前部由一個四邊形。 在這兩種情況下,片段着色器都是gl_FragColor = gl_Color; 兩種情況下的視圖和投影矩陣在開始時都完全相同。 問題是shadow_coord.xy中存在偏差。

只要視圖和投影值完全相同,我不應該得到相同的結果嗎? 我能做些什麼來解決它?

(圖像1) enter image description here

(圖像2) enter image description here

+0

你的'#版本'指令在哪裏? – genpfault

+0

您是否使用浮點紋理作爲深度緩衝區? – Unick

+0

你好。 我不寫入深度緩衝區。我寫入顏色緩衝區。 內部格式:GL_RGBA 源格式:GL_RGBA 類型:GL_UNSIGNED_BYTE 日Thnx – user1176476

回答

0

你用你渲染到紋理的解析度爲何?什麼樣的過濾? (似乎是線性的,應該最接近)。也可以嘗試以抵消座標你喜歡閱讀:

// offset should be 0.5/texture_resolution 
gl_FrontColor = texture2D(light_depth_texture, shadow_coord.xy + offset); 

而作爲其他評論者所說,8位是不夠的,店裏的深度值,可以考慮使用深度紋理或浮點格式(如GL_R32F在ARB_texture_rg)。