我有一个点云正在渲染到屏幕上。每个点都有其位置和颜色以及ID。

我被要求将每个点的ID渲染到纹理上,因此我创建了FBO并附加了两个纹理,一个用于颜色,另一个用于纹理。深度。我为此屏幕外渲染创建了必要的VAO和VBO,并为每个点上传了其位置和ID。

完成渲染到FBO后,我会读取带有glReadPixels()可以查看值是什么,但似乎已全部清除,即它们具有的值与glClearColor()相同。 FBO的颜色纹理?欢迎您提供任何提示。

#1 楼

通常,为了了解管道的各个步骤中呈现的内容,建议您使用一种用于框架分析的工具。这些通常可以为您提供每个API调用的每个缓冲区内容的视图,这可以帮助您解决情况。

Renderdoc是一个很好的工具,它是完全免费和开源的。此外,它也受到积极支持。

另一个是Intel GPA,不幸的是,根据其网页,它最多支持OGL 3.3内核。

为了再添加一个,我曾经使用gDEBugger,但自上次更新以来已经过去了很长时间。不幸的是,这已经演变成我从未使用过的AMD CodeXL。

评论


$ \ begingroup $
另外,有时我还会有一个命令,当我按下一个键时,该命令会将指定的fbo转储到图像中。这是低技术的方式。
$ \ endgroup $
–乔治·罗德里格斯(Jorge Rodriguez)
15年8月4日在20:33

$ \ begingroup $
确保将正确的深度测试设置用于可视化FBO中也是一个好主意。
$ \ endgroup $
–rys
15年8月7日在23:18

$ \ begingroup $
对于较旧的GL版本,我仍会不时使用gDEbugger。 CodeXL是它的更新版本,可以在以下位置找到:github.com/GPUOpen-Tools/CodeXL请注意,此处的apitrace页面上有图形调试工具的完整列表:apitrace.github.io/#links
$ \ endgroup $
–Bim
17年1月23日在13:52



#2 楼

我测试了几个应用程序/ API /库,以从使用gbuffer的应用程序中的FBO获取数据。经过几个月的苦难,我发现Github上有可用的apitrace来调试OpenGL,Direct3D和WebGL。我在Windows和Linux上使用都没有问题。

希望对您有用。

#3 楼

除了cifz的响应之外,另一种可视化FBO且无需花费太多代码的方法是使用glBlitFramebuffer()将像素从帧缓冲区传输到窗口。
/>有一些明显的“陷阱”,因为HDR缓冲区可能无法直观显示您期望的方式,您可能无法以明显的方式“看到”深度/模板缓冲区,并且FBO与被遮盖的区域不匹配,放大/缩小方法可能非常幼稚。

但是很快“ n肮脏的黑客”就可以了。