私はこの考えを持っていましたが、VBO と FloatBuffers について、それが有効かどうかを知るのに十分な知識がありません。プログラム内のデータを削減するために、顔データを単一の文字列として保持し、レンダリング時に String.split("/") で分割するというアイデアがありました。これにより、WaveFront .OBJ ファイルと同様に、データから冗長な頂点がすべて削除されます。モデルのサイズを大幅に縮小しながら、顔を描画するたびに GPU の速度が少し低下するだけだと思います。ただし、VBO と FloatBuffer は、パックされている場合とアンパックされている場合の両方で、単一の float[] で表される頂点データの一貫した配列を取ります。OGLES2.0 はすべてのデータを 1 つのバッファに順番に入れたいようです。だから、私の考えは持ちこたえていないようです。
元:
冗長性あり:
バッファ = { x1, x2, x3... x30,000 }
(顔を順番に一気に描く)
それなし:
バッファ = { x1, x2, x3... x1,000 }
fData[x] = "x/x/xx/x/xx/x/x"
(一度に 1 つずつ、fData[x] の参照に従って各面を描画します)
私の質問は次のとおりです。
バッファ内の冗長な頂点を除外し、レンダリング時に .OBJs fData を使用して面を組み立てることは適切ですか? なぜですか、そうでないのですか?
そうでない場合、私の制限は何ですか? 冗長性を追加する前に、約 1,000 個の頂点を持つモデルがあります。VBO または FloatBuffer は、Android で (冗長性を備えた) 多くの頂点を処理できますか? これらのモデルのうち、メモリが不足する前に一度にレンダリングできるモデルの数はどれくらいでしょうか?
もしそうなら、どのように OGLES2.0 に私のデータが各面のバッファ内のどこにあるかを知らせることをお勧めしますか? Buffer.setPosition(x)?
Android およびその他の OpenGL のフレーバーで一般的に受け入れられているモデル ストレージの方法は何ですか? データ量を可能な限り最小のサイズに減らすために、各モデルをどのように保存しますか?
事前に助けてくれてありがとう。
編集: 5. glDrawElements は私の問題を解決しますか? 現在、glDrawArrays を使用しています。冗長な頂点が存在する場合は glDrawElements の方が優れていると信じるようになった投稿をどこかで読んだところです。これは正しいです?