0

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];
}

アドバイスありがとうございます...

4

1 に答える 1

0

わかりました、私は問題がどこにあるかを見つけました:)

私がOpen GLの初心者である限り、例からコードをコピーしていくつかの変数の名前を変更しました...そして、ColorBuffer(VBOカラー、つまり描画オブジェクトの実際のカラーデータ)変数の名前をColorRenderBuffer変数(に配置)に変更したことを知りませんでしたGL が実際の色データを処理するメモリ)

ばかげた間違いで、誰も同じことをしないことを願っています:)

于 2012-06-24T13:46:14.003 に答える