opengl-3 - 使用着色器时高效的截锥体剔除

标签 opengl-3 frustum culling

我想知道使用可编程管道进行视锥体剔除的最有效方法是什么。我的意思是,如果我理解正确,请遵循此处描述的方法:Geometric Aproach (顺便说一句,那里描述的唯一方法在一段时间前对我有用),像 glGetFloatv(GL_MODELVIEW_MATRIX, ...) 这样的函数不再有效,因为最终的顶点位置是在着色器阶段计算的。对于渲染前必须检查的每个边界框变换,我是否必须在客户端计算截锥体平面?

谢谢。

最佳答案

截头体剔除的想法是首先防止多边形被发送到 GPU,那些您已经知道的多边形将在顶点着色器之后被剔除。所以想法是防止顶点着色器转换这些多边形。无论是否使用着色器,最好的方法是在客户端跟踪视锥平面,遍历场景图(可以是层次树或只是一个列表)并剔除位于视锥之外的对象,并且不要使用 glGetFloatv 或它的等价物它效率不高,因为它会从 GPU 复制数据。您可以使用 feedback buffers相反。

关于opengl-3 - 使用着色器时高效的截锥体剔除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35256085/

相关文章:

OpenGL 3.x : Access violation when using vertex buffer object and glDrawElements(. ..)

c++ - DX11 中的顶点缠绕顺序

qt - 剔除可见区域之外的项目

java - 建议使用一个用于 OpenGL 的矩阵运算的简单 Java 数学库 (lwjgl)

Unity 3D 中的相机视锥体平面

opengl - GLSL 着色器 : occlusion order and culling

c++ - glBufferData 和 glBufferSubData 偏移量

linux - 无法在 Ubuntu 上运行我自己的 OpenGL 3 程序

python - 通过glUnproject从鼠标坐标到世界坐标

opengl-es - 无法在 OpenGL 中的 2D(正交)之上绘制 3D(视锥体)