2012-01-03 11 views
2

私は、自分で教えた(または教わった)学習の一環として、テクスチャマップされたキューブをレンダリングしようとしています。頂点のインデックスとテクスチャのコーディングを一緒にパックする

ので、同様に、私は、1つの配列に頂点COORDSとテクスチャCOORDSパックthis exampleオンラインが見つかりました:

Vertex Vertices[4] = { Vertex(Vector3f(-1.0f, -1.0f, 0.5773f), Vector2f(0.0f, 0.0f)), 
         Vertex(Vector3f(0.0f, -1.0f, -1.15475), Vector2f(0.5f, 0.0f)), 
         Vertex(Vector3f(1.0f, -1.0f, 0.5773f), Vector2f(1.0f, 0.0f)), 
         Vertex(Vector3f(0.0f, 1.0f, 0.0f),  Vector2f(0.5f, 1.0f)) }; 

が、私はそれがピラミッド型のオブジェクトのために働くと思いますが、それはのためにとてもうまく動作しません。私の立方体。問題は、別の面と共有されている同じ頂点に対して異なるテクスチャ座標を使用する必要があることです。

私は「ああ、私は知っています!代わりにインデックスでテクスチャ座標をパックします!インデックスをテクスチャ座標にマッピングする私のデータ構造をうまく作成しましたが、今では、インデックスはGL_ELEMENT_ARRAY_BUFFERに入り、テクスチャ座標はGL_ARRAY_BUFFERに入る必要があります。

これは、このデータを1つのバッファにパックする方法がないことを意味しますか?インデックス配列とテクスチャ座標配列を2つの別々の構造に分割する必要がありますか?

さらに、頂点位置とテクスチャ座標の間に1:1マッピングが存在しなくなることに気付きました。頂点シェーダをどのように書き直すのか分かりません。

または、私はチュートリアル(頂点の位置とテクスチャ座標をまとめてパックする)と同じようにして、必要に応じて頂点を繰り返します。

最初にインデックスと頂点の位置を分離するという考えはデータの冗長性を減らすことだと思っていましたが、テクスチャを使用するとすぐにその冗長性を追加する必要がありますか?

答えて

1

あなたはよくある誤解のために、位置だけで頂点を識別しました。しかし、これは頂点ではありません。

実際、頂点はすべての属性、つまり位置、標準、テクスチャ座標の完全な組み合わせです。したがって、テクスチャの座標が異なる場合、非常に異なる頂点を持ち、独自のインデックスを持ちます。したがって、異なるテクスチャ座標を除いて、位置、法線などのデータを複製する必要があります。

+0

十分に公正...私はこの事実を受け入れることができます:) – mpen

関連する問題