1

私は現在、非常に単純なスネーク ゲームを作成しようとしていますが、スネーク スクエアの作成に問題があります。現在、2 つの三角形を作成して正方形を作成しています。ヘビが次のように移動するグリッドを作成しました。 ここに画像の説明を入力

正方形の色は、最初は実際には黄色でした。次に、赤い色のヘビを作成しようとしました。しかし、私の四角はすべて赤くなりました。

次のようにヘビを作成します。

void drawSnake()
{
    mat4 modelView;

    modelView = Translate(1,0,0);
    glUniformMatrix4fv(modelViewUniform, 1, GL_TRUE, modelView);
    GLuint indices2[3] = {0,1,2}; //, 0, 5, 1, 0};

    glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, indices2);

    modelView = Translate(1, 0, 0);
    glUniformMatrix4fv(modelViewUniform, 1, GL_TRUE, modelView);
    GLuint indices6[3] = {4,3,2}; //, 0, 5, 1, 0};
    glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, indices6);
    //vec2 blockCoordinate = vec2(-t + 1, t - 1);
    //blockCol[i] = blockCoordinate;
}

ここで定義されている色:

void loadGeometry() {
    vec3 color(1.0f, 1.0f, 0.0f);
    Vertex rectangleData[rectangleSize] = {
        { vec2( -1.0, -1.0 ), color },
        { vec2( 1.0, -1.0 ), color },
        { vec2( 1.0,  1.0 ), color },
        { vec2( -1.0,  1.0 ), color },
        { vec2(-1.0, -1.0 ), color }
    };
    shapeVertexArrayBuffer = loadBufferData(rectangleData, rectangleSize);

    vec3 color1(1.0f, 0.0f, 0.0f);
    Vertex rectangleData1[rectangleSize] = {
        { vec2( -1.0, -1.0 ), color1 },
        { vec2( 1.0, -1.0 ), color1 },
        { vec2( 1.0,  1.0 ), color1 },
        { vec2( -1.0,  1.0 ), color1 },
        { vec2(-1.0, -1.0 ), color1 }
    };
    shapeSnakeArrayBuffer = loadBufferData(rectangleData1, rectangleSize);
}

問題は、明らかに別の色のバッファ データをロードしたときに、すべての正方形が赤くなったのはなぜですか?

display() で次のように描画します。

void display() {    
    glClearColor(0.0, 0.0, 0.0, 1.0);
    glClear(GL_COLOR_BUFFER_BIT);

    glUseProgram(shaderProgram);

    mat4 projection = Ortho2D(-15.0f, 15.0f, -15.0f, 15.0f);
    glUniformMatrix4fv(projectionUniform, 1, GL_TRUE, projection);

    glBindVertexArray(shapeVertexArrayBuffer);
    glBindVertexArray(shapeSnakeArrayBuffer);

    drawBlock();
    drawSnake();
    glutSwapBuffers();
}
4

2 に答える 2

1
glBindVertexArray(shapeVertexArrayBuffer);
glBindVertexArray(shapeSnakeArrayBuffer);

drawBlock();
drawSnake();

ここで注文に問題があるようです。おそらく、shapeVertexArrayBuffer(注:「頂点配列バッファ」のようなものはありません。これらは頂点配列オブジェクトloadBufferDataであると想定されています。VAOを返さない場合は、さらに問題があります)は、ブロックを描画するためのshapeSnakeArrayBufferものであり、ヘビを描くために。

一度にアクティブにできる VAO は 1 つだけです。glBindVertexArray指定された頂点配列オブジェクトを、それ以降のすべてのレンダリング コマンドで使用されるものに設定します。最後に使用したのは であったため、これはのすべてのレンダリング コマンドと同様shapeSnakeArrayBufferに に使用される VAO になります。drawBlockdrawSnake

于 2012-12-30T17:30:20.860 に答える
1

すべきではありません:

glBindVertexArray(shapeVertexArrayBuffer);
drawBlock();

glBindVertexArray(shapeSnakeArrayBuffer);
drawSnake();
于 2012-12-30T17:30:22.607 に答える