我正在使用 WebGL 将巨大的点云(1.5 Mio. 点)渲染为 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 没上) 有人能详细说明一下吗!
我使用的引擎有一个默认的透视投影矩阵。显然它会影响每个顶点的坐标。投影矩阵与自动裁剪有何关系?