Eu uso SDL2 .
Atualmente, meu único shader possui uma matriz MVP e transforma os pontos com ela.
Calculo minha matriz de exibição e projeção para uma câmera com GLM:
glm::lookAt(pos, pos + forward, up);
glm::perspective(fov, aspectRatio, zNear, zFar);
Eu procurei, mas só consigo encontrar a implementação herdada de várias viewports.
Se eu criar, por exemplo, 4 câmeras e digamos que todas são iguais , exceto que todas as câmeras têm um quarto diferente da tela para renderizar. (Então, eu quero 4 viewports com o mesmo conteúdo)
Como posso fazer isso? Desculpe se eu não dei informações suficientes, não hesite em perguntar.
Respostas:
A renderização para diferentes viewports (partes) da mesma tela pode ser feita da seguinte maneira:
Por exemplo, dividir a tela em quatro partes e renderizar a mesma cena quatro vezes em cada canto com uniformes e viewports diferentes:
fonte
viewport
são x, y do canto inferior esquerdo do pedaço e largura, altura do pedaço. Com a mistura, você pode experimentar.Se você estiver escrevendo seu próprio Vertex / Fragment Shader, há outra possibilidade adicional de fazer isso. É muito mais complicado, mas pode ser útil para você e / ou outras pessoas. Além disso, acelera todo o processo de desenho, pois utiliza apenas uma chamada para um comando de desenho. O número máximo de viewports é definido por GL_MAX_VIEWPORTS e geralmente é 16.
Desde o OpenGL 4.1, o método glViewportArrayv existe. Ele pode definir uma matriz de viewports. As viewports criadas por esse método têm um índice atribuído.
Esse índice pode ser usado no Vertex Shader para definir a Viewport na qual a cena é renderizada. (Você deve incluir a extensão " ARB_shader_viewport_layer_array " no código do shader)
No seu caso, sugiro fazer o seguinte:
fonte
Esta é uma cópia da resposta da @ narthex, exceto apenas com as janelas de exibição, pois é tudo o que você precisa. Não sei por que o buffer de quadro / mistura está incluído em sua resposta.
fonte
Todas essas são boas respostas e, no entanto, existe outra maneira: (nem sempre existe?)
Devido à crescente popularidade da realidade virtual, o pessoal do OculusVR desenvolveu um trio de extensões "Multiview" chamadas:
Essas extensões permitem que várias visualizações da mesma cena sejam renderizadas em uma única chamada de desenho, eliminando a redundância de renderizar a mesma cena no mesmo estado do ponto de vista de cada olho. Embora criado para o propósito de VR, o desenvolvedor não está necessariamente limitado a apenas duas visualizações. Em vez disso, essa extensão permite quantas visualizações o MAX_VIEWS_OVR especifica.
Antes de usar essas extensões, o desenvolvedor deve verificar seu suporte no driver gráfico do usuário adicionando o seguinte código:
A partir daí, é necessário configurar o buffer de estrutura para utilizar este recurso:
e da mesma forma no sombreador:
Em um aplicativo vinculado à CPU, essa extensão pode reduzir drasticamente o tempo de renderização, especialmente em cenas mais complexas :
fonte