我在OpenGL項目中使用GLKit。一切都基於GLKView和GLKBaseEffect(無自定義着色器)。在我的項目中,我有幾個GLKViews顯示3D對象的視圖,偶爾有幾個視圖可以一次「打開」(即處於模態視圖堆棧中)。GLKBaseEffect不加載紋理(紋理在對象上出現黑色)
雖然到現在爲止所有工作都很好,在創建新視圖時我需要一個帶紋理的矩形來模擬我的應用的3D世界的捲尺。由於某些未知的原因,僅在該視圖中,紋理不會直接加載到opengl上下文中:紋理由GLKTextureLoader正確加載,但在繪製矩形爲黑色並在調試中查看OpenGL框架時,可以看到一個空的紋理被加載(有一個對紋理的引用,但它全部歸零或爲空)。
形狀我畫的定義爲:(它本來是一個三角形帶,但我切換爲三角形,以確保它不是問題)
static const GLfloat initTape[] = {
-TAPE_WIDTH/2.0f, 0, 0,
TAPE_WIDTH/2.0f, 0, 0,
-TAPE_WIDTH/2.0f, TAPE_INIT_LENGTH, 0,
TAPE_WIDTH/2.0f, 0, 0,
TAPE_WIDTH/2.0f, TAPE_INIT_LENGTH, 0,
-TAPE_WIDTH/2.0f, TAPE_INIT_LENGTH, 0,
};
static const GLfloat initTapeTex[] = {
0, 0,
1, 0,
0, 1.0,
1, 0,
1, 1,
0, 1,
};
我設置的影響變量:
effect.transform.modelviewMatrix = modelview;
effect.light0.enabled = GL_FALSE;
// Projection setup
GLfloat ratio = self.view.bounds.size.width/self.view.bounds.size.height;
GLKMatrix4 projection = GLKMatrix4MakePerspective(GLKMathDegreesToRadians(self.fov), ratio, 0.1f, 1000.0f);
effect.transform.projectionMatrix = projection;
// Set the color of the wireframe.
if (tapeTex == nil) {
NSError* error;
tapeTex = [GLKTextureLoader textureWithContentsOfFile:[[[NSBundle mainBundle] URLForResource:@"ruler_texture" withExtension:@"png"] path] options:nil error:&error];
}
effect.texture2d0.enabled = GL_TRUE;
effect.texture2d0.target = GLKTextureTarget2D;
effect.texture2d0.envMode = GLKTextureEnvModeReplace;
effect.texture2d0.name = tapeTex.name;
而渲染循環是:
[effect prepareToDraw];
glDisable(GL_DEPTH_TEST);
glDisable(GL_CULL_FACE);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glEnableVertexAttribArray(GLKVertexAttribPosition);
glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
glVertexAttribPointer(GLKVertexAttribPosition, COORDS, GL_FLOAT, GL_FALSE, 0, tapeVerts);
glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, 0, tapeTexCoord);
glDrawArrays(GL_TRIANGLES, 0, TAPE_VERTS);
glDisableVertexAttribArray(GLKVertexAttribPosition);
glDisableVertexAttribArray(GLKVertexAttribTexCoord0);
我還測試了本身的質感在肛與其他對象的視圖,它工作正常,所以它不是紋理文件錯誤。
任何幫助將不勝感激,因爲我在這個問題上停留了3天以上。
更新:另外,渲染循環中沒有glErrors。
還有什麼我可以添加到我的問題,以幫助人們回答它? –