2

pyglet ライブラリを使用してバッチを作成するコードがいくつかあります。完全にロードすると、全体で約 10,000 個のクワッドが含まれます。シーン全体 (完全に静的なシーン) をレンダリングするスクリプトを実行すると、3FPS が得られます。シーン レンダラーに使用したプロトタイプでは、遅くてずさんな python コードを使用してマップを構築していましたが、これはたまたま同じシーンで 3 FPS で実行されました。pyglet のバッチは C++ を使用して管理されているため、バッチが 3FPS で描画される原因となる明らかな何かが欠けているという厄介な感覚があります。

これは私のシーンの初期化コードです:

glViewport(0, 0, width, height)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(60.0, float(width)/height, .1, 10000.)
glMatrixMode(GL_MODELVIEW)
glClearColor(94.0/255.0, 161.0/255.0, 255.0/255.0, 0.5)
glClearDepth(1.0)
glShadeModel(GL_FLAT)
glEnable(GL_DEPTH_TEST)
glDepthFunc(GL_LEQUAL)  
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

これは、各フレームを実行してシーンをレンダリングするコードです。

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
glTranslatef(0, 0, -1*self.mapZoomLevel)
glRotatef(self.mapPitch/5, 1, 0, 0)
glRotatef(self.mapRotation, 0, 0, 1)
glTranslatef(self.mapX, self.mapY, 0)
self.mapPrimitive.batch.draw()
4

2 に答える 2

1

CPython を使用している場合は、これに対するショートカットがあります。Pypy はしばらくの間 pyglet をサポートしていました ( http://pypy.org/compat.html )。Pypy に切り替えると、簡単にパフォーマンスを向上させることができ、基本的にコードを変更する必要はありません。お役に立てば幸いです。

于 2013-04-05T02:31:19.200 に答える
0

シーンが静的な場合は、表示リストを使用して簡単に修正できます。一部のベンダーは、ディスプレイ リストを VBO および glMultiDrawElements() に内部的に変換することで最適化しているため、10k クワッドの一部が問題になることはありません。そして、それは 4 行のコードのようなものです。

于 2012-02-13T12:11:53.970 に答える