Я пытаюсь заставить буфер глубины работать, поэтому я могу начать делать игру для iOS. Я в порядке с OpenGL и Objective-C для OSX, но это мой первый раз, когда я делаю приложение iphone.Использование буфера глубины в iOS с OpenGL ES 1.1
Я удалил классы ES1Renderer и ES2Renderer и переместил код ES1 в класс EAGLView. По умолчанию анимация работала, когда я это делал. Когда я попытался использовать перспективу, это пошло не так. Теперь я получаю белый экран. Может ли кто-нибудь сказать мне, что я делаю неправильно?
В методе инициализации:
// Create default framebuffer object.
glGenFramebuffersOES(1, &defaultFramebuffer);
glGenRenderbuffersOES(1, &colorRenderbuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, defaultFramebuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, colorRenderbuffer);
//Initialisation code for the game's graphics and to develop the scene
glEnable(GL_DEPTH_TEST); //Enables Depth Testing
glDepthFunc(GL_LEQUAL);
glDepthMask(GL_TRUE);
//glEnable(GL_CULL_FACE);
//glCullFace(GL_FRONT);
//Setup projection matrix
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
double xmax = 0.04142135624 * ((float) backingWidth)/backingHeight;
glFrustumf(-xmax, xmax, -0.04142135624, 0.04142135624, 0.1, 2000); //The ymax and min have been precalculated
glMatrixMode(GL_MODELVIEW); //Select The Modelview Matrix
glLoadIdentity();
В методе drawView:
static const GLfloat squareVertices[] = {
1, 1,-0.1f,
-1, 1,-0.1f,
1, -1,0.1f,
-1, -1,0.1f,
};
static const GLubyte squareColors[] = {
0,0,200,255,
40,90,250,255,
0,0,200,255,
50,100,230,255,
};
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClear(GL_DEPTH_BUFFER_BIT);
glVertexPointer(3, GL_FLOAT, 0, squareVertices);
glEnableClientState(GL_VERTEX_ARRAY);
glColorPointer(4, GL_UNSIGNED_BYTE, 0, squareColors);
glEnableClientState(GL_COLOR_ARRAY);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
В методе layoutSubviews:
// Allocate color buffer backing based on the current layer size
glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer);
[context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*) self.layer];
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);
glGenRenderbuffersOES(1, &depthRenderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer);
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, backingWidth, backingHeight);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer);
if (glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES)
{
NSLog(@"Failed to make complete framebuffer object %x", glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES));
return NO;
}
return YES;
[self drawView:nil];
Я сделал все это, кажется, я должен делать. Я не знаю, почему это намного сложнее для iOS.
Благодарим за помощь.
Также меняется цвет очистки не работает. Он всегда белый. –
Мне нужно было перестроить буфер цвета: glBindRenderbufferOES (GL_RENDERBUFFER_OES, colourRenderbuffer); Прозрачный цвет теперь работает, но рендеринг площади не сохраняется. –