OpenGL/C++:使用顶点缓冲区进行从后到前渲染

Posted

技术标签:

【中文标题】OpenGL/C++:使用顶点缓冲区进行从后到前渲染【英文标题】:OpenGL/C++: Back to Front rendering with vertex buffers 【发布时间】:2013-04-24 13:59:53 【问题描述】:

我目前正在思考如何在顶点缓冲区中以从后到前的顺序有效地渲染多边形以使透明度正常工作..

我设置了顶点缓冲区和索引缓冲区,进行 glDrawElements 渲染,除了透明度之外,一切都运行良好,因为我目前以任意(创建对象的顺序)顺序渲染..

我稍后会实现八叉树渲染,但这只会有助于整体顶点缓冲区渲染顺序(首先渲染哪个顶点缓冲区),而不是顶点缓冲区内的顺序。..

我唯一能想到的就是每次我更改相机位置时重新排序我的索引缓冲区,这感觉非常低效,因为我每个 vbo 存储了大约 65.000 个顶点(使用 GLushort 作为索引以实现最佳 vbo 大小大约 1-4MB)..

有没有更好的方法来对顶点缓冲区对象中的顶点进行排序(或者更好地表述索引缓冲区对象中的相应索引)?

【问题讨论】:

【参考方案1】:

有两种方法(虽然我自己没有使用过)

    剥离(双剥离)http://developer.download.nvidia.com/SDK/10/opengl/src/dual_depth_peeling/doc/DualDepthPeeling.pdf

    随机透明度 http://www.cse.chalmers.se/~d00sint/StochasticTransparency_I3D2010.pdf

此外,如果您的对象是凸面剥离,则可以通过首先绘制 back facesfront faces 轻松实现(使用 GL_CULL_FACE 并反转法线以在着色器中正确照明)

【讨论】:

以上是关于OpenGL/C++:使用顶点缓冲区进行从后到前渲染的主要内容,如果未能解决你的问题,请参考以下文章

多个顶点缓冲区OpenGL c ++

求数组中两两相加等于20的组合(Python实现)

排序算法的归纳

二维偏序

动态规划专题之线性dp

垃圾回收之倒置复制法