0

最終的に、頂点に色を追加できるようになりました。しかし、今は FPS レートを改善したいと考えています。こちらが現状です。多数の頂点 (~200000) があり、それぞれが ~150 クラスのいずれかに属している可能性があります。各クラスは色によって異なります。現在、次のように頂点を描いています。

    glEnableClientState(GL_VERTEX_ARRAY)         
    glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.bufferVertices)
    glVertexPointer(3, GL_FLOAT, 0, None)          
    glEnableClientState(GL_NORMAL_ARRAY);
    glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.bufferNormals)
    glNormalPointer(GL_FLOAT, 0, None)     
    glEnableClientState(GL_COLOR_ARRAY)
    glBindBufferARB(GL_ARRAY_BUFFER_ARB, self.bufferColors)
    glColorPointer(3, GL_FLOAT, 0, None)
    glDrawArrays( GL_POINTS, 0, len(self.vertices) / 3 )

すべて正常に動作し、FPS は ~60 です。すべてのバッファは初期化時にのみ生成されます。しかし今では、各クラスを表す色が約 1 ミリ秒ごとに急速に変化します。これにより、色も変更されるため、描画ごとにカラー バッファーを再作成する必要があり、頂点が 200000 の場合、FPS が 0 に近くなるような気がします。実装しようとしている修正は、固定色を維持することです。ただし、実際の色の代わりに、それが表すクラスへのポインターを保持します。そうすれば、クラスの 200 色だけが変更されます。問題は、これを OpenGL でどのように実装できるかわかりません。これは実行可能ですか?これを行う方法の指針はありますか?

4

2 に答える 2

2

色の代わりに、クラスは 1D テクスチャ座標を設定する必要があります。その巨大なデータセットを変更する代わりに、テクスチャの一部のみを置き換える必要があります。テクスチャ サンプリング補間を回避するには、テクスチャを GL_NEAREST フィルタリング モードに設定し、頂点シェーダーで頂点ごとにテクスチャをサンプリングします (つまり、通常のようにフラグメントごとのテクスチャ サンプリングは行いません)。

于 2011-05-27T13:32:33.130 に答える
0

シェーダーを真剣に検討する必要があると思います。毎回バッファを再作成する必要はありません。http://en.wikipedia.org/wiki/GLSL。シェーダーはバッファーを使用して、色とジオメトリのあらゆる種類の操作を実行します。

于 2011-05-27T11:27:02.260 に答える