У меня есть вопрос о том, как FBO обрезает видимую сцену.Все это происходит в iPhone OpenGL ES.
Я рендеринг в 2D и использую рендеринг в текстуру с FBO.
Я обнаружил, что когда какая-либо часть сцены проходит любую сторону прямоугольника с размером экрана (480 * 320), она кажется вырезанной из сгенерированной текстуры FBO.
Почему это происходит?Как отключить или настроить его?
Я пытался отключить тест ножниц с помощью
lDisable(GL_SCISSOR_TEST);
Я пытался чтобы настроить необходимый раздел с помощью
`glEnable(GL_SCISSOR_TEST);
glScissor(0, 0, 100, 100);`
Я пытался настроить Viewport с помощью
glViewport(0,0, 512,512);
это не такработать по мере необходимости.Вместо того, чтобы расширить область рендеринга до необходимого 512 * 512, похоже, он по-прежнему обрезает область до 480 * 320 и затем растягивает ее до 512 * 512
Все это не принесло необходимого результата.
В моем коде: я создаю текстуру
GLuint textureID;
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 512, 512, 0, GL_RGBA, GL_UNSIGNED_BYTE, nil);`
Создаю FBO и прикрепляю к ней текстуру
GLuint textureFrameBuffer;
GLint prevFBO;
glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, &prevFBO);
// create framebuffer
glGenFramebuffersOES(1, &textureFrameBuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, textureFrameBuffer);
// attach renderbuffer
glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, textureID, 0);
if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES)
NSLog(@"ERROR - WHILE CREATING FBO");
// unbind frame buffer
glBindFramebufferOES(GL_FRAMEBUFFER_OES, prevFBO);
И затем, когда я рисую некоторые вещи вFBO и визуализируем квадрат с этой текстурой,
static const float textCoords[] =
{
0, 1,
1, 1,
0, 0,
1, 0,
};
static const float quadVerts[] =
{
0, 320,
320, 320,
0, 0,
320, 0,
};
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, textureID);
glVertexPointer(2, GL_FLOAT, 0, quadVerts);
glTexCoordPointer(2, GL_FLOAT, 0, textCoords);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
По моему мнению, я должен увидеть квадрат, заполненный всем материалом, который я нарисовал для моего FBO.Принимая во внимание, что я вижу только его часть - обрезанный прямоугольник размером 480х320 в левом нижнем углу. Итак, вопрос стальной актуальный