es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Renderizar solo una parte de la ventana en un framebuffer en OpenGL.

He querido crear un menú de edición usando marcos de visualización en OpenGL (con C ++). Luego rendericé algunos botones en el espacio de menú y después rendericé el framebuffer. Así que al crear el framebuffer, solo quiero que sea capaz de leer y dibujar solo una parte de la pantalla (digamos coordenadas entre X1 y X2 e Y1 e Y2), que luego se convertirá en un archivo adjunto de textura.
El problema es que no sé cómo renderear un framebuffer que tenga un tamaño diferente del tamaño de la ventana. Así que necesito saber cómo lograr esto.

Creo que el código que necesita ser modificado son estas 3 líneas:
1. glRenderBufferStorageMultiSample(GL_FRAMEBUFFER, 4, GL_RGB, SCREEN_WIDTH, SCREEN_HEIGHT);
2. glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, SCREEN_WIDTH, SCREEN_HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
3. glBlitFrameBuffer(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0,0,SCREEN_WIDTH, SCREEN_HEIGHT, GL_COLOR_BUFFER_BIT, GL_NEAREST);

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para crear un framebuffer con una dimensión diferente a la de la ventana, se necesita modificar el código anterior de la siguiente manera:

    1. glRenderBufferStorageMultiSample(GL_FRAMEBUFFER, 4, GL_RGB, framebufferWidth, framebufferHeight);
      Aquí, framebufferWidth y framebufferHeight deben ser las dimensiones del tamaño deseado del framebuffer, que pueden ser diferentes a las dimensiones SCREEN_WIDTH y SCREEN_HEIGHT.
    2. glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, framebufferWidth, framebufferHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
      Lo mismo se aplica para esta línea también, donde la textura debe asignarse con las dimensiones del framebuffer.

    3. glBlitFrameBuffer(x1, y1, x2, y2, 0, 0, framebufferWidth, framebufferHeight, GL_COLOR_BUFFER_BIT, GL_NEAREST);
      Aquí, x1, y1, x2 e y2 representan las coordenadas de la parte deseada de la pantalla que se va a mostrar en el framebuffer. Estos valores deben usarse en la llamada glBlitFrameBuffer para copiar el contenido de la parte seleccionada de la pantalla al nuevo framebuffer.

    Estas modificaciones deberían permitir crear un framebuffer con una dimensión diferente a la de la ventana y renderizar una parte de la pantalla en él.

Comments are closed.