私は現代のOpenGLの初心者です。私は当面のOpenGL方法論に慣れていますが、VBOを真剣に使用したことはありません。私の質問はアニメーションについてです。即時モードでは、アニメーションを実現するには、オブジェクト空間で(キーフレームから補間された)異なる頂点位置をストリーミングする必要があります。
非イミディエートOpenGLでこれをどのように実現しますか?当然のことながら、フレームごとに新しいVBOデータをアップロードすると、グラフィックバスが占有されます。私はそれを行うための現代的な方法についての文献を見つけていません。それについて考えて、私はいくつかのオプションに行きました:
- 属性: 3Dオフセットとしてのアニメーション。フレームごとに、異なる(可能な補間された)オフセット属性が各頂点に渡され、各キーフレームの同じ頂点に適用されます。
- インデックス:キーフレームを絶対的な頂点として格納し、キーフレームごとに異なる頂点のセットを使用して、インデックスを介してそれらにアクセスします。隣接するキーフレームにアクセスできないため、キーフレーム間を補間できないため、このアプローチは不可能です。また、手続き型アニメーションでは悪い考えのようです。
- テクスチャ:これは非常に伸縮性があるかもしれませんが、私にとっては良い解決策のように聞こえます。この場合も、アニメーションは各頂点のxyzオフセットと見なされます。各キーフレームは、次元が頂点IDにマップされる1Dテクスチャに保存できます。私が間違っていない場合、OpenGL 4.0では、任意のシェーダーからテクスチャにアクセスできるため、このテクスチャを頂点シェーダーから読み取って、各頂点変換を適用できます。2Dテクスチャは複数のフレームを保持できます。引き続き補間を実行します(そして、補間がフラグメントシェーダーの外側のテクスチャに対して機能する場合、確信が持てませんが、線形補間を無料で行うことができます!)これは、骨のアニメーションなどのより複雑なアニメーションシステムにそれほど労力をかけずに適用できます。
私はこれを考えすぎていますか?誰かが光を当てることはできますか?