我正在按照此处显示的技术使用gwt-g3d库在WebGL中绘制大型有向无环图。

在这一点上,我有一个简单的两级图形渲染:

性能太差了–渲染此内容大约需要1.5-2秒。我不是OpenGL专家,所以这是我采用的一般方法。也许有人可以指出一些优化方法,以便更快地进行渲染。

我很惊讶将MODELVIEW矩阵和缓冲区推到图形卡需要多长时间。这是浪费大量时间的地方。我应该在顶点着色器中执行MODELVIEW转换吗?

这使我相信,对每个节点处理MODELVIEW矩阵并将其插入一次不是不好的做法,但时机不限时:

http://www-graphics.stanford.edu/papers/h3/

最佳答案

将节点分成更大的块,而不是分别渲染它们。使用所有可能不会被修改的转换对所有几何图形进行后台缓存,并将其存储在一个缓冲区中,并在一次调用中进行渲染。

另一种解决方案:将节点(框+行)存储在一个缓冲区中(您可以存储超出当前所需数量的缓冲区)及其在纹理中的转换。在基于节点索引(纹理坐标)的顶点着色器中应用变换。它应该更快得多。

要测试支持,请使用this site。我有MAX_VERTEX_TEXTURE_IMAGE_UNITS | 4
最佳解决方案是Geometry Instancing,但WebGL目前不支持该解决方案。

10-04 16:09