在WebGL中绘制3D树状结构

7
我正在使用gwt-g3d库在WebGL中绘制大型有向无环图,按照此技术的方法:http://www-graphics.stanford.edu/papers/h3/
目前,我只能呈现简单的两级图形: enter image description here 性能非常差 - 渲染需要大约1.5-2秒钟。我不是OpenGL专家,这是我采取的一般方法。也许有人可以指出一些优化,以使渲染更快。
我惊讶于将MODELVIEW矩阵和缓冲区推送到显卡需要多长时间。这是浪费时间的主要原因。我是否应该在顶点着色器中执行MODELVIEW变换?
这让我相信,操作MODELVIEW矩阵并为每个节点推送它一次不应该是一个不好的做法,但时间证明了这一点: https://gamedev.stackexchange.com/questions/27042/translate-the-modelview-matrix-or-change-vertex-coordinates

你是如何计时的?时间有时会欺骗人。一些浏览器是并行化的,所以计时很困难。无论如何,你是说每帧需要1.5到2秒钟?我不太明白你在做什么,但是简单的场景图,包含24个立方体,全部都作为某个中心的子对象,应该可以以60hz的速度运行。你是否(1)只编译着色器一次,而不是在渲染循环中重复编译(2)在渲染循环中没有调用任何glGet函数?(3)只上传一次顶点数据,而不是在渲染循环中重复上传?希望这些问题不是愚蠢的问题,但你应该能够以合理的速度绘制约1000个立方体。 - gman
1个回答

2
将节点分组成较大的块,而不是单独渲染它们。对于应用变换的所有几何图形进行背景缓存,并将其存储在一个缓冲区中,在一个调用中进行渲染。
另一种解决方案:将节点(框+线)存储在一个缓冲区中(您可以存储比当前所需更多的内容),并将它们的变换存储在纹理中。基于节点索引(纹理坐标)在顶点着色器中应用变换。这样应该会更快。
要测试支持,请使用this site。我有MAX_VERTEX_TEXTURE_IMAGE_UNITS | 4 最好的解决方案将是几何实例化,但目前在WebGL中不受支持。

有没有一个库可以帮助将节点分组渲染?据我所知,d3也被canvas使用(不仅仅是SVG),它适合这个目的吗? - inf3rno

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