2010-12-01 17 views
1

私はAndroidアプリケーションを開発中です。OpenGL ES 2.0:頂点シェーダで属性がバインドされていません

私は以下の頂点シェーダを持っています。

"attribute vec4 vertexPosition; 
attribute vec4 vertexNormal; 
attribute vec2 vertexTexCoord; 

varying vec2 texCoord; 
varying vec4 normal; 

uniform mat4 modelViewProjectionMatrix; 

void main() 
{ 
    gl_Position = modelViewProjectionMatrix * vertexPosition; 
    normal = vertexNormal; 
    texCoord = vertexTexCoord; 
} 
"; 

そして、これは、フラグメントシェーダである:私は結合していないvertexTexCoordを放置すれば

precision mediump float; 

varying vec2 texCoord; 
varying vec4 normal; 

uniform sampler2D texSampler2D; 

void main() 
{ 
    gl_FragColor = texture2D(texSampler2D, texCoord); 
} 
"; 

は問題はありますか?モデルにテクスチャがない場合は、別の頂点とフラグメントシェーダを使用する必要があると思いますか?

ありがとうございました。

答えて

1

はい、テクスチャのないモデルには別のシェーダが必要です。それ以外の場合は、実装に依存する動作が発生すると思います。それに関連し

、OpenGLのドキュメントは言う:glLinkProgramが呼び出されたときに 明示的にバインドされていない

アクティブ属性が リンカに拘束されることになります。割り当てられた位置は、glGetAttribLocationを呼び出すことによって を照会することができます。

頂点属性が有効な場合、属性の1つから頂点テクスコードを取得しようとします。非テクスチャモデルに必要な属性の数が有効になっていて、そのようなことに依存してはならない場合はどうなるでしょうか。別のシェーダを使用します。

関連する問題