7

ここに示す手法に従って、gwt-g3d ライブラリを使用して、WebGL で大きな有向非巡回グラフを描画する作業を行っています: http://www-graphics.stanford.edu/papers/h3/

この時点で、単純な 2 レベルのグラフ レンダリングができました。

ここに画像の説明を入力

パフォーマンスは最悪です。これをレンダリングするのに約 1.5 ~ 2 秒かかります。私は OpenGL の専門家ではないので、ここに私が取っている一般的なアプローチを示します。このレンダリングを高速化するための最適化を誰かが指摘してくれるかもしれません。

ここに画像の説明を入力

MODELVIEW マトリックスとバッファをグラフィックス カードにプッシュするのにどれだけ時間がかかるかに驚いています。これは、時間の大部分が無駄になっている場所です。代わりに、頂点シェーダーで MODELVIEW 変換を行う必要がありますか?

これにより、MODELVIEW マトリックスを操作してノードごとに 1 回プッシュすることは悪い習慣ではないと思いますが、タイミングは嘘をつきません。

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

4

1 に答える 1

2

ノードを個別にレンダリングするのではなく、より大きなチャンクにグループ化します。変更されない可能性が最も高い変換を適用して、すべてのジオメトリのバックグラウンドキャッシュを実行し、それを1つのバッファーに格納して、1回の呼び出しでレンダリングします。

別の解決策:ノード(ボックス+行)を1つのバッファーに保存し(現時点で必要以上に保存できます)、それらの変換をテクスチャーに保存します。ノードインデックス(テクスチャ座標)に基づいて頂点シェーダーに変換を適用します。大幅に高速化する必要があります。

サポートをテストするには、このサイトを使用してください。私は持っていますMAX_VERTEX_TEXTURE_IMAGE_UNITS | 4

最善の解決策はGeometryInstancingですが、現在WebGLではサポートされていません。

于 2012-11-17T05:10:19.497 に答える