使用着色器进行高效的视锥体裁剪

3
我想知道在可编程管线中进行截锥体裁剪最有效的方法是什么。我的意思是,如果我理解正确,在这里描述的方法(顺便说一下,这是一种曾经对我有用的方法):几何方法,像glGetFloatv(GL_MODELVIEW_MATRIX, ...)这样的函数不再有效,因为最终的顶点位置是在着色器阶段计算的。在渲染之前,我是否需要为每个边界框变换在客户端上计算截锥面?谢谢。
1个回答

1
frustum culling的想法是在第一时间防止多边形被发送到GPU,因为你已经知道那些多边形在顶点着色器之后会被剔除。所以想法是防止顶点着色器转换那些多边形。使用着色器或不使用,最好的方法是在客户端跟踪截锥体平面,并遍历场景图(可以是分层树或仅是列表),并消除位于截锥体外部的对象,不要使用glGetFloatv或其等效物,因为这不是有效的,它将从GPU复制数据。您可以使用反馈缓冲区代替。

谢谢你的建议。我已经在客户端跟踪了视锥体平面,但是根据上述剔除方法,我需要最终的模型视图矩阵来提供算法,该矩阵对于每个模型都是唯一的,并且其最终值是在顶点着色器中计算的,因此似乎我必须为我要检查的每个模型重新计算视锥体,即使相机根本没有移动。我错过了什么吗?因为这对我来说听起来不合逻辑。提前致谢。 - NapardBlose
你需要跟踪每个对象的变换,并在客户端计算模型视图矩阵并应用截锥体裁剪,这样可以避免每次从GPU获取矩阵。我不知道你现在给着色器提供了什么数据,但是你可以在CPU上计算模型视图矩阵并将其传递给着色器。 - concept3d
这正是我正在做的事情,看起来我走在了正确的道路上,谢谢! - NapardBlose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接