Pour l'auto-éducation, j'écris un moteur de plateforme 2D en C ++ en utilisant SDL / OpenGL. J'ai d'abord commencé avec SDL pur en utilisant les tutoriels sur sdltutorials.com et lazyfoo.net, mais j'utilise maintenant SDL pour créer un contexte de rendu OpenGL, puis effectuer un rendu avec les fonctions OpenGL (en particulier le mode immédiat mais j'apprends les VAO / VBO) ). J'utilise SDL uniquement pour l'interface, l'audio, etc.
SDL utilise un système de coordonnées dont l'origine est située dans le coin supérieur gauche de l'écran et l'axe positif y pointant vers le bas. Il est facile de configurer ma projection orthographique en OpenGL pour refléter cela.
Je sais que les coordonnées de texture sont un système de droite avec des valeurs de 0 à 1 - le retournement vertical de la texture avant le rendu (enfin, retournez le fichier avant le chargement) donne des textures qui se rendent correctement ... ce qui est bien si je dessine la texture entière, mais finalement j'utiliserai des ensembles de tuiles et je peux imaginer des problèmes.
De quoi devrais-je m'inquiéter en termes de rendu lorsque je fais cela?
Si quelqu'un a des conseils ou s'ils l'ont fait eux-mêmes et peuvent signaler de futurs pièges, ce serait formidable, mais vraiment toutes les pensées seraient appréciées.
Réponses:
"De quoi devrais-je m'inquiéter en termes de rendu lorsque je fais cela?" - pas tant. Un système de coordonnées n'est qu'une convention, pas une règle stricte et rapide, et c'est une chose parfaitement légale et valable à faire. Assurez-vous simplement que vous êtes cohérent dans votre propre utilisation et tout fonctionnera bien.
la source
Lorsque je travaille en 2D avec OpenGL, j'utilise souvent le coin supérieur gauche comme origine. Cela peut être fait avec:
Cependant, il y a quelques pièges lors du changement d'origine en haut à gauche.
Un écueil que j'ai rencontré plus d'une fois:,
glScissor()
qui est utilisé pour l'écrêtage, utilise toujours les coordonnées en bas à gauche.Sa signature est:
où
x, y
spécifiez le coin inférieur gauche de la boîte à ciseaux.Plus généralement, toutes les fonctions qui fonctionnent en coordonnées de fenêtre utilisent toutes le coin inférieur gauche comme origine. Cela inclut des fonctions comme
gluProject
,gluUnProject
,glCopyPixels
, etc.Mais certaines fonctions comme l'
glDrawPixels
utilisationglRasterPos
pour le positionnement, etglRasterPos
utilise des coordonnées d'objet (c'est-à-dire transformées) .Si vous utilisez Linux et savez comment l'utiliser
man
, vous voudrez peut-être récupérer une copie des pages de manuel OpenGL ici: ftp://ftp.sgi.com/sgi/opengl/doc/ Je les trouve en temps réel- épargnant.De plus, je remarque que vous dites "retourner le fichier avant de charger" les textures. Ce n'est pas nécessaire. Au lieu de retourner l'image lors du chargement, il suffit de retourner les coordonnées de la texture pour passer de 1,0 à 0,0 lors du rendu.
la source