以下に示すように、エラーは非常に奇妙です。iPad プログラムで OpenGLES 2.0 とシェーダーを使用していますが、コードまたはプロジェクトの構成に問題があるようです。モデルは無彩色(黒色)で描かれています。
2012-12-01 14:21:56.707 medicare[6414:14303] プログラム リンク ログ:
警告: BindAttributeLocation 要求に一致する頂点シェーダー属性 'color' が見つかりませんでした。
警告: 頂点シェーダー 'colorVarying' の出力がフラグメント シェーダーによって読み取られません
[プロセス 6414 スレッド 0x1ad0f に切り替えます]
そして、私はglBindAttibLocation
次のような位置と通常のデータを渡すために使用します:
// This needs to be done prior to linking.
glBindAttribLocation(_program, INDEX_POSITION, "position");
glBindAttribLocation(_program, INDEX_NORMAL, "normal");
glBindAttribLocation(_program, INDEX_COLOR, "color"); //pass color to shader
私のプロジェクトには 2 つのシェーダーがあります。この奇妙なエラーに対する良い解決策はありますか? どうもありがとう!
私の頂点シェーダー:
uniform mat4 modelViewProjectionMatrix;
uniform mat3 normalMatrix;
attribute vec4 position;
attribute vec3 normal;
attribute vec4 color;
varying lowp vec4 DestinationColor;
void main()
{
//vec4 a_Color = vec4(0.9, 0.4, 0.4, 1.0);
vec4 a_Color = color;
vec3 u_LightPos = vec3(1.0, 1.0, 2.0);
float distance = 2.4;
vec3 eyeNormal=normalize(normalMatrix * normal);
float diffuse = max(dot(eyeNormal, u_LightPos), 0.0); // remove approx ambient light
diffuse = diffuse * (1.0 / (1.0 + (0.25 * distance * distance)));
DestinationColor = a_Color * diffuse; // average between ambient and diffuse a_Color * (diffuse + 0.3)/2.0;
gl_Position = modelViewProjectionMatrix * position;
}
そして、私のフラグメントシェーダーは次のとおりです。
varying lowp vec4 DestinationColor;
void main()
{
gl_FragColor = DestinationColor;
}
とてもシンプルです。どうもありがとう!