Question

Depuis que j'ai commencé à apprendre sur le rendu à une texture j'ai appris à comprendre que glCopyTexSubImage2D() copiera la partie désignée de l'écran à l'envers. J'ai essayé quelques choses simples qui est venu à l'esprit afin d'éviter / travail autour de cela, mais n'a pas pu trouver une solution élégante.

  • il y a deux problèmes avec faire un :: glScalef (1.0f, -1.0f, 1.0f) avant de rendre la texture à l'écran: 1, je dois le faire à chaque fois que j'utilise la texture. 2, je travaille principalement avec des graphismes 2D et ont backface culling désactivé pour GL_BACKsides. Autant que possible, je serais ravi de sauver passer et désactiver cette fonction.

  • essayé mode de matrice de commutation à GL_TEXTURE et faire le :: glScalef (1.0f, -1.0f, 1.0f) la transformation sur la capture, mais les résultats étaient les mêmes. (Je devine que la matrice de texture n'a d'effet que sur les appels glTexCoord?)

Alors, comment puis-je résoudre les directions vers le haut vers le bas de textures capturées avec glCopyTexSubImage2D?

Était-ce utile?

La solution

Qu'est-ce que vous allez utiliser les images de texture pour? En fait, en essayant de les aurait à l'envers en général rendre plus de travail que de déplacer ce code ailleurs.

Si vous essayez d'utiliser l'image sans l'exporter, en feuilletant les coordonnées de texture où vous utilisez le résultat serait le moyen le plus efficace.

Si vous essayez d'exporter, alors soit vous voulez les retourner vous, après avoir rendu.

Sur le même sujet, si vous faites un jeu en 2D, pourquoi est-backface culling allumé?

Autres conseils

Si je comprends bien, cela dépend de l'endroit où votre origine est. Cette fonction semble supposer que votre origine est dans le coin inférieur gauche, alors que la plupart des choses 2D suppose une origine de la partie supérieure gauche, ce qui est la raison pour laquelle il semble à l'envers.

Je suppose que vous pouvez changer l'origine en bas à gauche, faire la capture, puis modifiez l'origine vers le haut à gauche et de rendre à nouveau avant de faire l'échange. Mais c'est une solution terrible puisque vous rend de fait deux fois, mais il pourrait être bien si vous ne prévoyez pas de le faire toutes les images.

Utilisation glReadPixels () pour copier dans une mémoire tampon, retourner l'image, puis utilisez glTexImage2D () pour écrire de nouveau.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top