2012-11-16 67 views
7

我正在使用GWT-G3D库中的WebGL吸引着大批向无环图工作了3D树型结构按技术所示:http://www-graphics.stanford.edu/papers/h3/在绘制WebGL的

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

enter image description here

性能是可怕的 - 它需要大约1.5-2秒来渲染这件事。我不是OpenGL专家,所以这里是我正在采用的一般方法。也许有人可以指出一些优化,这将使渲染更快。

enter image description here

我感到惊讶需要多长时间到模型视图矩阵和缓冲区推到显卡。这是大部分时间浪费的地方。我应该在顶点着色器中进行MODELVIEW转换吗?

这使我相信,操纵模型视图矩阵,将其推一次,每个节点不应该是一个不好的做法,但计时不会说谎:

https://gamedev.stackexchange.com/questions/27042/translate-the-modelview-matrix-or-change-vertex-coordinates

+0

你怎么火候?时间做谎言。一些浏览器是并行的,所以时机很难。无论如何,你说每帧需要1.5到2秒? 我不太明白你在做什么,但与24个立方体所有父一些中心简单的场景图应在60Hz就好运行。你(1)着色器编译一次,而不是在渲染循环(2)不调用渲染循环任何glGet的功能呢? (3)只上传一次顶点数据,而不是渲染循环中?希望那些不是愚蠢的问题,但你应该能够以合理的速度绘制大约1000个立方体。 – gman

回答

2

组节点较大而不是单独渲染它们。使用最有可能不会被修改的应用转换对所有几何进行背景缓存,并将其存储在一个缓冲区中并在一次调用中呈现。

另一种解决方案:在一个缓冲存储节点(盒+线)(您可以存储比你更需要在当前时间)和它们的质地转变。在基于节点索引(纹理坐标)的顶点着色器中应用变换它应该快得多,速度更快。

为了测试支持使用this site。我有MAX_VERTEX_TEXTURE_IMAGE_UNITS | 4

最好的解决方案将是Geometry Instancing,但目前不支持WebGL的。

+0

是不是有一个lib,它可以通过渲染组中的节点来提供帮助? Afaik d3也被canvas使用(不仅仅是SVG),它对于这个目的是否有用? – inf3rno