gpt4 book ai didi

opengl-es-2.0 - 在着色器中禁用/跳过顶点

转载 作者:行者123 更新时间:2023-12-02 00:28:06 26 4
gpt4 key购买 nike

我正在使用 WebGL 将巨大的点云(1.5 Mio.points)渲染为 GLPoints,自然会遇到性能问题。

所以我的第一个想法是限制在屏幕上绘制的点数。特别是远离相机的点是“无用的”,不应该被渲染。

我通过计算任意点和相机之间的距离来解决这个问题。在我的顶点着色器中,我只想渲染足够“接近”相机的点。到目前为止,如果距离“s”在相机和裁剪平面之间(因此为负),我会尝试跳过它们。

if( s < 0.0){
gl_Position = vec4(0.0, 0.0, 0.0, 0.0);
frontColor = vec4(0.0, 0.0, 0.0, 1.0);
gl_PointSize = 0.0;
}else{
gl_Position = ps_ProjectionMatrix * ecPos4;
}

但是,正如我从显示的 FPS 可以看出的那样,它并没有完全跳过顶点,它仍然被渲染(即使我没有看到它)。有没有办法完全禁用/跳过/“删除”顶点着色器中的顶点?


我可以看到截锥体剔除如何有助于加快速度。为了澄清事情,剔除应该在什么时候进行?由于每次相机移动后都必须重新计算剔除,我是否应该放入主循环?但是做 1 Mio。在渲染循环中进行计算似乎不是一个好主意。

我是否正确理解一旦我的相机看起来与我的点完全不同的方向,这些应该被 WebGl/硬件自动剪裁?然而,我觉得看“别处”并没有帮助。 (FPS 没有上升)谁能详细说明一下!

我使用的引擎有一个默认的透视投影矩阵。显然它会影响每个顶点的坐标。投影矩阵与自动裁剪有什么关系?

最佳答案

听起来您需要调整投影矩阵,以便您的视锥体剔除那些距离太远而无法对您的图像做出有意义贡献的点。这tutorial from lighthouse3d提供了视锥体的描述,并描述了在软件中实现基于锥体的剔除的方法。请注意,在您的情况下这不是必需的,因为 OpenGL 会为您完成,前提是您已正确设置投影矩阵。

关于opengl-es-2.0 - 在着色器中禁用/跳过顶点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8086178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com