Heheの例に似た非常に単純なOpenGLESの例があります:http://nehe.gamedev.net/tutorial/ios_lesson_02__first_triangle/50001/
上に示したように、三角形は赤、青、緑の3色で塗りつぶされています。代わりに、私のアプリでは、三角形は常にほぼ完全に黒色で塗りつぶされ、上部の頂点の周りの小さな領域は緑で塗りつぶされ、右下の小さな領域は赤で塗りつぶされます...そして青はまったくありません。
最初の質問は、三角形の中央で色が補間されないのはなぜですか。また、青色がまったく表示されないのはなぜですか。
色の配列を変更しても何も影響しません。たとえば、三角形を白にしようとしても、色は変更されません...その間に、位置の配列でZ座標を変更すると、青い色が表示されます。
2番目の質問は、色を変更しても何も起こらず、位置を変更すると代わりに色が変わるのはなぜですか?
ここのどこかで私は愚かな間違いを1つ犯したようですが、それを捕まえることができません。
これは頂点/カラー配列です:
const float colors[] = { // this does not work, triangle still black-green-red
1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0
};
const float positions[] = { // if i change 3rd index to 1.0 then i will see blue color
-0.5, -0.5, 0.0, 1.0,
0.0, 0.5, 0.0, 1.0,
0.5, -0.5, 0.0, 1.0
};
これはVBOです:
- (BOOL)setupVBO
{
BOOL success = YES;
glGenBuffers(1, &_positionBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _positionBuffer);
glBufferData(
GL_ARRAY_BUFFER,
sizeof(positions) * sizeof(float),
&positions[0],
GL_STATIC_DRAW);
glGenBuffers(1, &_colorBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _colorBuffer);
glBufferData(
GL_ARRAY_BUFFER,
sizeof(colors) * sizeof(float),
&colors[0],
GL_STATIC_DRAW);
return success;
}
与える :
- (void)render:(CADisplayLink*)displayLink
{
glClearColor(0.5, 0.5, 0.5, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
glBindBuffer(GL_ARRAY_BUFFER, _positionBuffer);
glVertexAttribPointer(_positionSlot, 4, GL_FLOAT, GL_FALSE, 0, NULL);
glBindBuffer(GL_ARRAY_BUFFER, _colorRenderBuffer);
glVertexAttribPointer(_colorSlot, 4, GL_FLOAT, GL_FALSE, 0, NULL);
glDrawArrays(GL_TRIANGLES, 0, 3);
[_glContext presentRenderbuffer:GL_RENDERBUFFER];
}
アドバイスありがとうございます...