簡體   English   中英

在OpenGL ES 2.0或3.0中生成深度紋理

[英]Generate a depth texture in OpenGL ES 2.0 or 3.0

我有一個場景要在Android中使用OpenGL ES(使用Java庫)進行渲染。 我想將一些效果(例如景深)應用於場景。 我找到了一個不錯的bokeh着色器,它需要深度紋理才能完成這項工作。 然后,我需要生成一個深度紋理以傳遞給着色器。 我花了一天半的時間在互聯網上閑逛,試圖弄清楚這一點,似乎找不到如何從現有場景生成深度紋理的好例子。 似乎我需要做幾遍,可能是使用屏幕外渲染到幀緩沖區,然后從中生成深度紋理,以傳遞到我的bokeh着色器以實際渲染場景。

如何生成深度紋理? 一個很好的工作示例將不勝感激。

對於任何后期處理效果,您都需要將主場景渲染到FBO,以便可以在后續渲染中使用顏色和深度附件數據。

渲染到深度紋理非常容易。 您只需要將深度紋理綁定到FBO目標即可,例如

glGenFramebuffers(1, &m_fbo);
glBindFramebuffer(GL_FRAMEBUFFER, m_fbo);

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_depth_texture, 0);

PowerVR SDK的RenderToTexture和ShadowMapping演示應具有您需要的所有參考代碼:

https://github.com/powervr-graphics/Native_SDK/blob/3.4/Examples/Intermediate/RenderToTexture/OGLES2/OGLES2RenderToTexture.cpp https://github.com/powervr-graphics/Native_SDK/blob/3.4/Examples/Intermediate /ShadowMapping/OGLES2/OGLES2ShadowMapping.cpp

您可以使用gl_FragCoord從片段着色器內部訪問每個像素的深度值。 編寫一個片段着色器,將深度寫入gl_FragColor,如下所示:

gl_FragColor = vec4(gl_FragCoord.z, 0.0, 0.0, 1.0);

使用此片段着色器將場景渲染為紋理,最終將得到深度圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM