2014-01-30 81 views
1

如果我添加Opengl變換,我的圖像消失。當我添加Opengl變換時,我的圖像不斷消失

void renderFileButton() 
{ 
    glClearColor(1.0f, 1.0f, 1.0f, 1.0f); 
    glViewport(0.0f, 0.0f, SCREEN_WIDTH, SCREEN_HEIGHT); 

    glEnable(GL_BLEND); 
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

    glPushMatrix(); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0, 320, 0, 240, -1, 1); 
    glMatrixMode(GL_MODELVIEW); 

    glGenBuffers(1, &vertexBufferID); 
    glBindBuffer(GL_ARRAY_BUFFER, vertexBufferID); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(file_vertices), file_vertices, 
     GL_STATIC_DRAW); 

    glEnableClientState(GL_VERTEX_ARRAY); 
    glVertexPointer(3, GL_FLOAT, sizeof(fileButtonVertexData), (GLvoid *) 
     offsetof(fileButtonVertexData, fileButtonPositionCoordinates)); 

    glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
    glTexCoordPointer(2, GL_FLOAT, sizeof(fileButtonVertexData), (GLvoid *) 
     offsetof(fileButtonVertexData, fileButtonTextureCoordinates)); 

    loadsprite("files/sprites/options.png"); 

    glScalef(0, 0, 1); 
    glRotatef(180, 1, 0, 0); 
    glTranslatef(0, 0, 0); 

    glPopMatrix(); 

} 

有人能告訴我我在哪裏錯了嗎?

+1

顯示沒有顯示內容的轉換的代碼。 –

回答

2

您已經縮小爲零。這使得對象的大小爲零。毫不奇怪,它消失了。

將來,您可以通過每次添加一個轉換來進行故障診斷,並試圖添加一個不做任何事情的轉換(縮放1,旋轉0,轉換0)。然後慢慢增加轉換,直到達到預期的價值。

此外,您的glPopMatrix正在取消您的所有轉換。

最後,我沒有看到任何實際的渲染。只是很多國家操縱。

+0

我對所有進入屏幕的精靈都有單獨的渲染功能。這個功能只是把它分組,所以它可以在屏幕上。 @BenVoigt –

+0

@PoppieSolumon:那麼,所有的轉換都是由'glPopMatrix'撤銷的。 –

+0

我也做過你告訴我的步驟,但只要我將glRotatef和glTranslate添加到派對上,它就會再次消失。 –

-1

昨天晚上我玩完所有的東西后發現問題。轉換順序是問題。

glTranslatef(100, 100, 0); 
glRotatef(180.0f,0.0f,0.0f,1.0f); 
glScalef(-1.0f,1.0f,1.0f); 

這是做的工作,就是這樣。

+0

在我看來,像縮放*值*是一個問題,就像我在我的答案中所說的那樣。我也確定你改變了更多的代碼,因爲在你顯示的代碼中,'glPopMatrix'會殺死你所做的任何轉換。 –

+0

是的,我感謝你把我推向正確的方向。 @BenVoigt –

相關問題