2012-12-30 118 views
1

我目前正在嘗試製作一個非常簡單的蛇遊戲,並且在創建蛇廣場時遇到了一些問題。現在我通過創建2個三角形來創建方塊。我已經創建了蛇應該像這樣移動的網格: enter image description hereOpenGL 3.2顏色GL_TRIANGLES

正方形的顏色在開始時實際上是黃色的。然後我試着用紅色來製作蛇。但是我所有的方格都變成紅色。

我創造蛇是這樣的:

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

所以,問題是爲什麼我所有的廣場變成紅色時,我明明用另一種顏色加載緩存數據?

我畫他們這樣在顯示():

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(); 
} 
+0

而且你的問題是什麼? – datenwolf

+0

我在最後添加了一個問題抱歉。 – WYS

+0

你怎麼畫矩形? – user1118321

回答

1
glBindVertexArray(shapeVertexArrayBuffer); 
glBindVertexArray(shapeSnakeArrayBuffer); 

drawBlock(); 
drawSnake(); 

你似乎在這裏有一些排序的問題。假設shapeVertexArrayBuffer(注意:沒有「頂點陣列緩衝區」這樣的東西,那些應該是vertex array objects;如果loadBufferData沒有返回一個VAO,那麼你有更多的問題)是用於繪製塊的,而shapeSnakeArrayBuffer是意思是畫蛇。

一次只能有一個VAO處於活動狀態。 glBindVertexArray將給定的頂點數組對象設置爲之後所有渲染命令的用途。由於您使用的最後一個是shapeSnakeArrayBuffer,因此將用於drawBlock以及drawSnake中所有渲染命令的VAO。

1

你不應該做的:

glBindVertexArray(shapeVertexArrayBuffer); 
drawBlock(); 

glBindVertexArray(shapeSnakeArrayBuffer); 
drawSnake();