8

OpenGL ES プログラミング ガイドでは、頂点データの位置合わせの誤りを避けるべきであると説明し、データを 4 バイト ブロックに位置合わせする例を示しています。

OpenGL ES プログラミング ガイド

位置合わせされていない頂点データと位置合わせされた頂点データ

ただし、オンラインで見つけたほとんどのデモ資料とチュートリアルでは、これを行っている人は見当たりません。以下の例は、71 Squared のデモ プロジェクトからのものです。

static const SSTexturedVertexData3D EnemyFighterVertexData[] = {
    {/*v:*/{1.987003, -0.692074, -1.720503}, /*n:*/{0.946379, -0.165685, -0.277261}, /*t:*/{0.972816, 0.024320}},

とにかく、どうやってそれをしますか?v と n にダミーの 0.0 を追加し、そのうちの 2 つを t? に追加します。

私の推測では、頂点データをアプリごとに 1 回だけロードする場合はそれほど問題にはなりませんが、レンダリングされたフレームごとに異なる配列にバインドおよび再バインドする場合は問題になるでしょう。いずれにせよ、すべてのアレイを 1 つに結合することを計画していますが、興味があります。

4

1 に答える 1

2

一般に、頂点はfloats位置合わせされるもので構成されているため、あまり気にする必要はありません。実際、多くの書籍では通常structの s を使用して頂点データを保持していますが、これはパディングの問題により連続しているとは限りませんが、浮動小数点数しかない場合は、パディングが発生する可能性が低いため問題ありません。もちろん、vectorC++ から STL を使用することを好む人もいますが (私も含めて)、iOS を使用している場合は、C++ を使用できますが、おそらく Objective-C を使用しているため、構造体以外の方法での連続性には通常の C 配列が含まれます。一緒に仕事をするのはそれほど楽しくありません。

ドローアブル オブジェクトの頂点データやその他のデータを保持するカスタム構造を作成し、shorts やその他の型を使用すると、パディングが問題になることがあります。しかし、s のみに固執する場合floatは問題なく、OpenGL に関するほとんどの教育ソースがこれを行っているため、良い仲間になります。

于 2013-10-08T08:01:23.020 に答える