2016-07-06 12 views
0

私はOpenGl ES 2.0でプロジェクトを進めています。私のメッシュ内のすべての頂点には、色属性が固定されています(5と言うことができます)。最終的な頂点ごとの色は、2つの選択された色属性間の補間として計算されます。GLSL ES 2.0の多くの色属性間の補間方法

私の実装では、2つの色の選択は、2つの指定されたインデックスに基づいています。私はifステートメントが大きなパフォーマンスヒットである可能性があるので、すべての属性を1つの配列に入れ、必要な色を取得するためにインデックスを使用することを選択します。それでも私は大幅なパフォーマンスの低下を見る。

attribute vec4 a_position; 
//The GLSL ES 2.0 specification states that attributes cannot be declared as arrays. 
attribute vec4 a_color; 
attribute vec4 a_color1; 
attribute vec4 a_color2; 
attribute vec4 a_color3; 
attribute vec4 a_color4; 

uniform mat4 u_projTrans; 
uniform int u_index; 
uniform int u_index1; 
uniform float u_interp; 

varying vec4 v_color; 


void main() 
{ 
    vec4 colors[5]; 
    colors[0] = a_color; 
    colors[1] = a_color1; 
    colors[2] = a_color2; 
    colors[3] = a_color3; 
    colors[4] = a_color4; 

    v_color = mix(colors[u_index], colors[u_index1], u_interp); 

    gl_Position = u_projTrans * a_position; 
} 

最終的な色補間をより効率的に計算する方法はありますか?または、補間の色を選択するには少なくとも良い方法はありますか?

答えて

0

ここで使用するインデックスは制服です。これは、各レンダリングコマンドのすべての頂点が同じインデックスを使用することを意味します。そうだとすれば、なぜVSでこのようなものを取り出すのはどうですか?

入力値は2色でなければなりません。次に、glVertexAttribPointerを使用して、間に挿入される2つの配列を選択します。

"重要なパフォーマンスの低下"は、そのような値を取得する方法とは無関係で、何も使用されない頂点ごとのデータをたくさん送信していることとは関係ありません。

+0

すべての属性を一度に使用しているわけではありません。しかし、メッシュは現在、頂点バッファオブジェクトとして行われています。頂点配列を使用するときにかなりのオーバーヘッドはありませんか?私のユースケースはかなり静的です。メッシュを作成し、ユニフォームを使用してアニメートし、必要がない場合は破壊します。 – plastique

+1

@plastique: "*しかし、メッシュは現在、頂点バッファオブジェクトとして処理されています。頂点配列を使用するとかなりのオーバーヘッドはありませんか?*" ...あなたは*頂点配列を使用しています。バッファオブジェクトに何を格納していると思いますか? *クライアントサイド*頂点配列を使うべきではないと私は提案していません。 –

関連する問題