我的OpenGL ES 1.1存在嚴重問題,雖然我已經查看了它,但仍無法找到解決方案,但我避開了上千次。在這裏找不到類似的問題。我希望你們能幫助我。不顯示opengl紋理,儘管代碼幾乎與代碼示例相同
我看了71squared.com的教程2(你可以找到它here),並從同一頁面下載了代碼示例。它運行良好。
然後我試着寫我自己的代碼,以適應我的項目。無論如何,當涉及到OpenGL調用時,我注意使用與示例相同的代碼。
問題是:我的glClear()調用會影響屏幕的顏色,儘管我的紋理沒有顯示。這個問題既不是由UIView子類引起的,也不是由代碼加載紋理引起的,因爲相應實例的所有iVar都可以正確計算。另外,即使紋理座標和頂點也採用正常值,這與代碼示例中的相同。所以這個問題一定是由我使用OpenGL造成的一些微小錯誤引起的。
這些都是我的OpenGL調用:
初始化:
CGRect rect = [[UIScreen mainScreen] bounds];
// Set up OpenGL projection matrix
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(0, rect.size.width, 0, rect.size.height, -1, 1);
glMatrixMode(GL_MODELVIEW);
glViewport(0, 0, rect.size.width, rect.size.height);
// Initialize OpenGL states
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_DEPTH_TEST);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND_SRC);
glEnableClientState(GL_VERTEX_ARRAY);
繪製紋理:
(t是一個指向包含有關如何繪製圖形信息的結構。 )
glPushMatrix();
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_TEXTURE_2D);
glTranslatef(t->posX, t->posY, 0.0f);
glRotatef(-(t->rotation), 0.0f, 0.0f, 1.0f);
glColor4f(t->filter[0], t->filter[1], t->filter[2], t->filter[3]);
glBindTexture(GL_TEXTURE_2D, _texture.name);
glEnable(GL_BLEND);
glVertexPointer(2, GL_FLOAT, 0, vertices);
glTexCoordPointer(2, GL_FLOAT, 0, _texCoords);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glPopMatrix();
我認爲這是問題產生的地方。如果你想看看我的代碼創建一個幀緩衝區,我可以給你看。儘管如此,它仍然與示例中的幾乎相同。
我非常絕望地找到解決方案,因爲我單步執行整個代碼的次數達到了上千次,但是我找不到代碼段,在這裏我做了一些與代碼示例不同的代碼。
預先感謝您。 Dominik
感謝您的回覆@Toro。我不知道。不過,我剛剛對它進行了測試,看起來這不會導致問題。不管怎樣,謝謝你。 – 2011-05-02 13:34:13