我正試圖在我正在寫的一個自定義ipad應用程序中查看一些3d幾何圖形。我遇到的問題是,當我縮放,平移和旋轉我的模型時,邊緣會被剪切,而我不知道爲什麼。我認爲這不是因爲近/遠裁剪平面,因爲我改變了這些,沒有發生任何事情,它仍然會剪輯。另外,它只在一個方向上進行。另一個方向呈現得很好。有任何想法嗎?轉換矩陣是使用我創建的arcball操作類創建的,但由於顯而易見的原因,我只包含硬編碼的視圖矩陣。硬編碼矩陣顯示問題很好。場景中只有一堆正方形被渲染,在兩個角落被剪切。爲什麼我的opengl 1.1視口剪輯我的幾何?
要重複我的問題,創建用於iPad的新的OpenGL ES的項目,然後將以下代碼粘貼在ES1Renderer.m init方法之前結束「迴歸自我;」:
glMatrixMode(GL_PROJECTION);
CGRect frame = [[UIScreen mainScreen] bounds];
glViewport(0, 0, frame.size.width, frame.size.height);
glFrustumf(-1000, 1000, -1000, 1000, 10000, 10000);
現在更換整個渲染方法具有以下:
static const GLfloat squareVertices[] = {
-0.5f, -0.5f,
0.5f, -0.5f,
-0.5f, 0.5f,
0.5f, 0.5f,
};
[EAGLContext setCurrentContext:context];
glBindFramebufferOES(GL_FRAMEBUFFER_OES, defaultFramebuffer);
glClearColor(0.5f, 0.5f, 0.5f, 1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
CGRect frame = [[UIScreen mainScreen] bounds];
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glViewport(0, 0, frame.size.width, frame.size.height);
glFrustumf(0, backingWidth, 0, backingHeight, -.1, -1000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
float mat2[16];
mat2[0] = .268496;
mat2[1] = .082372;
mat2[2] = .127658;
mat2[3] = 0;
mat2[4] = .051842;
mat2[5] = .193987;
mat2[6] = -.234207;
mat2[7] = 0;
mat2[8] = -.142808;
mat2[9] = .225290;
mat2[10] = .154991;
mat2[11] = 0;
mat2[12] = .034580;
mat2[13] = -.001087;
mat2[14] = -.013952;
mat2[15] = 1;
glMultMatrixf(mat2);
glVertexPointer(2, GL_FLOAT, 0, squareVertices);
glEnableClientState(GL_VERTEX_ARRAY);
for (float i = 0; i <= 6; i += 2) {
for (float j = 0; j <= 6; j+= 2) {
glPushMatrix();
glColor4f(i/6, j/6, 0, 1);
glTranslatef(i-3, j-3, 0);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glPopMatrix();
}
}
glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
最後,在EAGLView.m文件,替換下面的行中的initWithCoder方法
renderer = [[ES2Renderer alloc] init];
有:
renderer = [[ES1Renderer alloc] init];
和運行。您會看到以一定角度旋轉的方格網格,並且剪切了左上角和右下角的邊緣。這是我無法弄清楚如何擺脫。任何幫助表示讚賞。謝謝。