我想實現shadowmapping,所以我渲染深度紋理。當我不綁定包含深度紋理的framebuffer並使用默認幀緩衝區時,它會輸出到屏幕。然而,它們是紅色的,而不是遠處碎片的白色。Opengl渲染深度紋理 - 紅色?
這是我的片段着色器:
#version 330
out float fragmentdepth;
uniform sampler2D inputTex;
void main(){
fragmentdepth = gl_FragCoord.z;
}
這是個問題嗎?因爲shadowmapping不起作用,我想排除這個問題的根源。
如果您正在寫入深度紋理,爲什麼要將深度輸出到顏色緩衝區?基本上這個着色器的內存帶寬要求增加了一倍,因爲深度也被寫入到FBO深度附着點的任何附件中。 –
我不記得了,但是'gl_FragDepth'還沒有像'gl_FragColour'一樣被刪除?如果'fragmentdepth'在COLOUR_ATTACHMENT0的其他RGBA輸出中被簡單地視爲紅色,則這是有意義的。除非你打算將深度寫入浮點顏色紋理而不是深度紋理,但是你仍然需要進行深度測試,正如@ AndonM.Coleman指出的那樣,帶寬是雙倍的。也許嘗試寫入'gl_FragDepth'? – jozxyqk
絕對不會,'gl_FragDepth'依然存在。儘管在着色器中寫入任何內容是一個很壞的主意,因爲它打破了很多硬件深度優化(Hi-Z,早期深度測試等)。 –