3 votes

Visages avec différentes résolutions dans GL_TEXTURE_CUBE_MAP

J'ai créé un Cube dans openGl et j'ai besoin de fournir 6 textures avec des résolutions différentes les unes des autres. Actuellement, j'utilise glTexImage2D pour fournir des textures avec la même résolution, mais évidemment ne peut pas être utilisé pour mon nouvel objectif.

Le code suivant est similaire à ce que j'ai fait pour avoir chaque visage avec la même résolution (juste le canal de luminance) :

glGenTextures(3, m_cubemapTexture);
glPixelStorei(GL_UNPACK_ROW_LENGTH, cube_size);

glBindTexture(GL_TEXTURE_CUBE_MAP, m_cubemapTexture[0]);

for (int face = 0; face < 6 face++){    
    glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, 0, GL_LUMINANCE, cube_size, cube_size, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, m_uYdata[face]);
}

glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_BORDER);

glBindTexture(GL_TEXTURE_CUBE_MAP, 0);

Modifier

Je pense que l'utilisation de mipmap n'est pas la bonne méthode car je ne peux pas simplement sous-échantillonner la texture avec une résolution plus élevée. Si je change simplement la largeur et la hauteur dans glTexImage2D() pour la texture de plus haute résolution, le cube disparaît.

Pouvez-vous me suggérer comment modifier le code ?

2voto

Nicol Bolas Points 133791

6 textures avec des résolutions différentes les unes des autres

Ce n'est pas autorisé dans les cubemaps. Chaque face de cubemap doit avoir la même taille. Et doit être un carré (mais pas nécessairement une puissance de deux).

Sinon, la texture ne sera pas considérée comme complète et, par conséquent, les utilisations de celle-ci ne permettront pas d'accéder aux données. D'où la disparition.

Il est nécessaire que toutes ces faces utilisent cette texture en taille réelle, sans réduction d'échelle.

Puis haut de gamme les autres visages.

J'ai créé un cube dans openGl.

Si tout ce que vous faites est de dessiner un cube, vous n'avez pas besoin d'utiliser un cubemap. Malgré leur nom, les textures cubemap ne servent pas à afficher des cubes.

Pour vos besoins, il suffit d'utiliser le mappage de texture 2D ordinaire, chaque visage étant affecté à une région d'une texture 2D ordinaire. Chacune des 6 "faces" que vous recevez doit être copiée dans les régions correspondantes de la texture 2D. Ainsi, chaque face du cube affichera sa région particulière de la texture 2D.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X