fixação glCopyTexSubImage2D texturas de cabeça para baixo
Pergunta
Desde que eu comecei a aprender sobre processamento para uma textura comecei a entender que glCopyTexSubImage2D()
irá copiar a parte designada da tela de cabeça para baixo. Eu tentei um par de coisas simples que me veio à mente a fim de evitar / contornar isso, mas não conseguiu encontrar uma solução elegante.
-
existem dois problemas com fazendo um :: glScalef (1.0f, -1.0f, 1.0f) antes de processar a textura para a tela: 1, eu tenho que fazer isso toda vez que eu estou usando a textura. 2, eu estou trabalhando principalmente com gráficos 2D e ter backface abate desligado por GL_BACKsides. Tanto quanto possível, eu gostaria de salvar mudar esta ligado e desligado.
-
tentou mudar o modo de matriz para GL_TEXTURE e fazer a :: glScalef (1.0f, -1.0f, 1.0f) transformação na captura, mas os resultados foram os mesmos. (Eu estou supondo que a matriz de textura só tem um efeito sobre as chamadas glTexCoord?)
Então, como posso corrigir o up-down direções de texturas capturadas com glCopyTexSubImage2D
?
Solução
O que você vai estar usando as imagens de textura para? Na verdade, tentando torná-los de cabeça para baixo normalmente levaria mais trabalho do que se deslocam que o código em outro lugar.
Se você está tentando usar a imagem sem exportar, basta folhear as coordenadas de textura onde quer que você está usando o resultado seria a maneira mais eficiente.
Se você está tentando exportar lo, então você quer quer lançá-los-se, depois de renderização.
Em uma nota relacionada, se você estiver fazendo um jogo 2D, por isso é backface abate ligado?
Outras dicas
Se o meu entendimento é correto, isso depende de onde sua origem é. Essa função parece assumir a sua origem está na, enquanto a maioria das coisas 2D assume uma origem de canto superior esquerdo, que é por isso que parece de cabeça para baixo.
inferior esquerdoEu suponho que você poderia mudar a origem até o canto inferior esquerdo, fazer a captura, em seguida, mudar a parte traseira origem ao canto superior esquerdo e tornar novamente antes de fazer a troca. Mas isso é uma solução horrível desde que você está tornando efectivamente duas vezes, mas pode ser bom se você não pretende fazê-lo cada quadro.
Use glReadPixels () para copiar para um buffer, inverter a imagem, o uso, em seguida, glTexImage2D () para escrevê-lo de volta.