2016-03-22 15 views
0

要素バッファを使用することによって、特定の面に使用するvertを示すインデックスを送信します。しかし法線はどうですか?私が基本的な拡散シェーダでキューブをレンダリングしたいのであれば、平滑化された法線を得ることができます(前に滑らかにすると)。しかし、キューブのようなハードサーフェスエッジをレンダリングしようとすると、ハードエッジを描画することはできません。一部のフェースは同じ頂点を共有しているためです。glDrawElements()を使用してハード面のキューブを描画する方法は?

ハードウェアオブジェクトの要素バッファを使用する方法はありますか?

glDrawArrays()を使用しているときに、メモリの無駄がありません。

答えて

1

一般に、「頂点」(OpenGL用語でいうと)には、レンダリングに必要なすべての情報が含まれている必要があります。これには位置も含まれますが、テクスチャ座標、法線なども含まれています(同じ場合があります)。同じ位置にあるがテクスチャ座標または法線が異なる2つの頂点を使用している場合キューブや他の「平らな陰影」オブジェクトの継ぎ目を扱う場合は共通)、それらを一意の頂点として格納する必要があります。

これを行うと、要素バッファを使用できます。頂点バッファオブジェクトのメモリサイズを増やす必要があります。キューブと同じように単純なものをレンダリングする場合は、メモリをあまり節約できませんが、要素バッファオブジェクトは以前より大きくする必要はありません。あなたが正しくそれを行う場合。

関連する問題