2011-07-25 9 views
3

私は、多数の三角形の面によって定義される曲面を持っています。表面全体が単一色である。OpenGL ESでプレーンカラーのサーフェスを描くにはどうすればいいですか?

これまでは、三角形をそれぞれ別々に描いていました。各三角形について、私は3つの頂点、3つのインデックス、3つの色値(同じ色の)、3つの標準値(すべて三角形の表面法線に等しい)を渡していました。次に、これらの配列をすべてVBOにプッシュして、曲面をレンダリングします。

最近、私はレンダリングのテクスチャ方法と比べてかなり無駄であることを認識しました。今度は、2x2のピクセル配列(曲面に必要な同じ色のすべて)からテクスチャを作成します。次に、曲面上のすべての頂点のテクスチャ座標(s、t)を計算します。したがって、私は効果的に2x2ピクセルのテクスチャを曲面に合わせてストレッチします。いくつかのサーフェスでは、これはかなりうまく動作します。また、これははるかに小さなサイズのバッファを必要とします(頂点には1つの法線と色の値しかありませんので、それらの頂点は1回だけ記述する必要があります)。しかし、この方法では、曲面がまったくレンダリングされないことがあります。私の疑問は、私がテクスチャの座標を計算する方法です。サーフェスがわずかに湾曲していても問題ありませんが、サーフェスが軸を中心に回転して閉じた境界を形成するとき、テクスチャ座標はグラフィックカードを混乱させるようです。

私の質問は、単色のサーフェスを描画するOpenGL ESのお勧めの方法は何ですか?

UPDATE - 答え

を受け入れる上の説明は、それはgenpfaultの答えが動作する方法を理解するために私にしばらく時間がかかりました。ここで説明します。上記では、rgbaのカラー値を使用して、2。単色のテクスチャを使用して、プレーンカラーサーフェスを描画する2つの方法を説明しました。 genpfaultの答えは方法1を効率的に行う方法を説明しています。

頂点ごとに同じrgbaカラー値を複数回渡すことで、最初のメソッドを実装しました。したがって、頂点シェーダコードのこのカラー値を属性として読み取っていました。 genpfaultのメソッドでは、drawArray/Elementsを呼び出す前に色を一様な変数として設定します。これは、頂点シェーダを変更して属性の代わりにユニフォーム変数から値を読み取る必要があります。

答えて

2

各パッチをレンダリングする前に、glColor()で現在の色を設定するだけです。

こうして頂点ごとのカラーコンポーネントを渡す必要はありません。

+0

この機能はOpengl ES 1.1の後で廃止されたと思われます。私は2.0仕様でそれを見つけることができませんhttp://www.khronos.org/opengles/sdk/docs/man/ – Jayesh

+2

まあ、ええ。 2.0では、ユニフォームとしてグローバルカラーで渡すことができます。 – genpfault

関連する問題