Bon, c'est un peu compliqué (du moins pour moi), et je n'ai trouvé aucune solution. Je fais un jeu de golf 2D en OpenGL. Le fond est une texture que j'ai faite qui aura une carte du parcours. Le problème est que les frontières, où la balle ne peut pas atterrir en toute sécurité (hors limites, pièges à sable, etc.) n'est pas géométrique, donc je ne peux pas comparer les coordonnées x et y de la balle à quelques valeurs pour voir si c'est sorti. Une idée que j'ai en tant que solution est d'utiliser le canal alpha de la texture pour marquer ce que les pixels sont en dehors des limites. Je voudrais que mon shader dessine les valeurs RVB indépendamment de l'alpha. Ensuite, je marquerais dans les limites comme alpha==1.0f
et hors-limites comme alpha==0.0f
, ou quelque chose de similaire au moins. Ensuite, je pourrais échantillonner la texture aux coordonnées x et y de la balle pour voir si elle est dedans ou dehors. La plupart de ceci je peux m'accomplir, excepté pour une chose: Comment est-ce que j'échantillonne la texture du CPU? Je sais que les shaders sur la carte graphique peuvent utiliser la fonction texture()
avec sampler2D
et vec2
, et c'est très bien, mais si la seule sortie du fragment shader est de colorer les pièces jointes (sans compter gl_FragDepth
ou quelque chose de similaire), alors comment faire Je récupère la valeur alpha retournée à la CPU? Ou échantillonnez-vous sur la CPU plutôt que d'utiliser un autre shader? Ou est-ce que tout ce concept est défectueux? Toute aide est appréciée.Utiliser la couche alpha d'une texture comme carte de bordure
P.S. J'utilise OpenGL 4, si ce n'était pas clair.
Merci! Mais si je stocke l'image dans un tableau 2D et l'envoie à OpenGL via 'glTexImage()', n'y a-t-il pas un peu de redondance dans le stockage de l'image deux fois? Ou est-ce juste inévitable? – TheJared802