Question

J'écris une application OpenGL Perl Planet Viewer de base, juste pour le plaisir. Je fais fonctionner les bases, avec la planète glorieuse, implémentée via un gluSphere () , en rotation avec la carte de texture de la Terre classique appliquée.

Maintenant, si je veux appliquer une seconde texture à OpenGL (par exemple, les "nuages ??de la terre")?

Bien sûr, je peux mélanger moi-même les deux cartes de texture dans PhotoShop ou une autre application graphique, mais existe-t-il un moyen d'utiliser l'API OpenGL?

J'ai essayé de charger les deux textures et de générer les mipmaps mais la planète est affichée avec uniquement la première texture appliquée, pas la seconde.

Était-ce utile?

La solution

Comme Jim Buck l’a dit, vous pouvez obtenir l’effet souhaité avec le multitexturing.

Cependant, je ne pense pas que les quadriques GLU prennent en charge la génération de coordonnées multitexture (c'est-à-dire l'utilisation de glMultiTexCoord * () et de glTexCoord * ()). Par conséquent, je pense que vous aurez besoin de votre propre code de sphère pour utiliser la route multitexture.

Autrement, vous pourrez peut-être dessiner une sphère légèrement plus grande autour de votre sphère actuelle sur laquelle figure la deuxième carte de texture (avec l'utilisation appropriée du canal alpha et de la fusion). Cela risque cependant de provoquer des combats en z, ce qui risque de causer plus de problèmes que ça ne vaut la peine.

Écrire votre propre code de sphère n’est pas difficile - c’est probablement la voie la plus facile pour obtenir des résultats satisfaisants.

Autres conseils

Comment voulez-vous que vos textures soient combinées? Vous devriez pouvoir obtenir l'effet souhaité si vous utilisez simplement la multi-texturation:

glEnable(GL_TEXTURE_2D);

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture0ID);
glTexEnvf(GL_TEXTURE_ENV, ..., ...);

glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture1ID);
glTexEnvf(GL_TEXTURE_ENV, ..., ...);

Assurez-vous de configurer vos appels glTexEnvf en fonction de la manière dont vous souhaitez combiner les textures. Puis appelez gluSphere ().

Je suis d'accord avec Drew Hall. Peut-être plus simple de faire une deuxième sphère. Et toutes les cartes opengl ne supportent pas le multi-texturing.

Vous pouvez contrer les combats en z avec glPolygonOffset.

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