Historique des modifications - Message

Message #8656

Sujet: [PC]Ray-tracer en temps réel


Type Date Auteur Contenu
Correction acceptée 01-09-2010 19:05:15 Zorian
Texte original:
bon alors pour les textures c'est pas très compliquer opengl fait casiment tout
sa se fait en deux étapes:
allocation mémoire en vram et création d'une id pour la texture
utilisation de la texture a pellant l'id ...

bon je supose que tu sais déjà comme est les principe d'une texture ? enfin ... c'est pas compliquer tu crée un tableau "1D", ou tu y stocke les donner, de dimention width*height+1
pour se localiser, la position = x+height*y plus ou moin, faut prendre uassi en compte que tu utilise 3 ou 4 "channel" on va dire le format ( 8, 16, 24, 32 restpectivement, noir/blanc, noir/blanc/alpha, rgb oou yuv, argb ou rgba) donc ton tableau est égales a width*height*(format/8)+1, c'est toujours pareil pour se localiser (x+hieght*y)*(format/8), et pour retrouver les couleurs tu fait juste position+x ou x < format/8, pas trop compliquer jusque la ? wink
c'est juste la partie software ( chargement ) après pour passer a opengl:

Code c++ :


            glEnable(GL_TEXTURE_2D);
            glGenTextures (1, & gl); // gl est de type GLuint soit l'id de la texture
            glBindTexture (GL_TEXTURE_2D, gl);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); // option a la screunieugnieuh sa marche bien dans mais example donc ...
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
            glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
            glDisable(GL_TEXTURE_2D);
            //spécification suivant le format
            switch(format)
            {
                case TXFMT_LUMINANCE:
                    glTexImage2D(GL_TEXTURE_2D, 0, fmt, original.width, original.height, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, buffer);
                break;
                case TXFMT_LUMINANCE_ALPHA:
                    glTexImage2D(GL_TEXTURE_2D, 0, fmt, original.width, original.height, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, buffer);
                break;
                case TXFMT_RGB:
                    glTexImage2D(GL_TEXTURE_2D, 0, fmt, original.width, original.height, 0, GL_RGB, GL_UNSIGNED_BYTE, buffer);
                break;
                case TXFMT_RGBA:
                    glTexImage2D(GL_TEXTURE_2D, 0, fmt, original.width, original.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
                break;
            }

supression de la texture:

Code c++ :


            !glIsTexture(gl)) ? glDeleteTextures(1,&gl) : void(); // plus rapid qu'un if, il parais que sa utilise des instruction asm ...
            gl = 0;

et l'utilisation:

Code c++ :


                    glEnable(GL_TEXTURE_2D);
                    glBindTexture(GL_TEXTURE_2D, tex->glTexture());
                    //rendue de l'object
                    glDisable(GL_TEXTURE_2D);

le probleme c'est qu'il faut spésifier qu'elle endroi de la texture sera "plaquer" sur telle polygone, pour ça on utilise << glTexCoord3i(0,1,0); >> ou 0 c'est le bord supérieur haut ou gauche et 1 le bord inférieur ou droit

c'est bon j'y suis pas aller trop fort jusque la ? smile

sinon avec un peut de chance je ne suis pas dans le même internat que celui de l'ans dernier ou je ne captais pas la wifi, mais la rumeur cour que le pions qui avais la wifi les désactiver ... mais tkt c'est le premier truc que je teste yikes

ps: désoler pour le "-1" je voulais faire une énumération mais je suis partie dans un discour wink
oh et sa ne fait que 3semain que je bosse sous opengl donc je ne connais pas tout non plus ... (depuis le sleekthink)

edit: je poste le code demain ... et je feurais un effort, les sources en "français" + doc/commentaire ...
Correction proposée:
bon alors pour les textures c'est pas très compliqué opengl fait quasiment tout
ça se fait en deux étapes:
allocation mémoire en vram et création d'une id pour la texture
utilisation de la texture appelant l'id ...

bon je suppose que tu sais déjà comme est les principe d'une texture ? enfin ... c'est pas compliquer tu crées un tableau "1D", où tu stockes les données, de dimension width*height+1
pour se localiser, la position = x+height*y plus ou moins, faut prendre aussi en compte que tu utilises 3 ou 4 "channel" on va dire le format ( 8, 16, 24, 32 respectivement, noir/blanc, noir/blanc/alpha, rgb oou yuv, argb ou rgba) donc ton tableau est égal à width*height*(format/8)+1, c'est toujours pareil pour se localiser (x+hieght*y)*(format/8), et pour retrouver les couleurs tu fais juste position+x ou x < format/8, pas trop compliqué jusque là ? wink
c'est juste la partie software ( chargement ) après pour passer à opengl:

Code c++ :


            glEnable(GL_TEXTURE_2D);
            glGenTextures (1, & gl); // gl est de type GLuint soit l'id de la texture
            glBindTexture (GL_TEXTURE_2D, gl);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); // option a la screunieugnieuh ça marche bien dans mes exemples donc ...
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
            glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
            glDisable(GL_TEXTURE_2D);
            //spécification suivant le format
            switch(format)
            {
                case TXFMT_LUMINANCE:
                    glTexImage2D(GL_TEXTURE_2D, 0, fmt, original.width, original.height, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, buffer);
                break;
                case TXFMT_LUMINANCE_ALPHA:
                    glTexImage2D(GL_TEXTURE_2D, 0, fmt, original.width, original.height, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, buffer);
                break;
                case TXFMT_RGB:
                    glTexImage2D(GL_TEXTURE_2D, 0, fmt, original.width, original.height, 0, GL_RGB, GL_UNSIGNED_BYTE, buffer);
                break;
                case TXFMT_RGBA:
                    glTexImage2D(GL_TEXTURE_2D, 0, fmt, original.width, original.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
                break;
            }

suppression de la texture:

Code c++ :


            !glIsTexture(gl)) ? glDeleteTextures(1,&gl) : void(); // plus rapide qu'un if, il paraît que ça utilise des instructions asm ...
            gl = 0;

et l'utilisation:

Code c++ :


                    glEnable(GL_TEXTURE_2D);
                    glBindTexture(GL_TEXTURE_2D, tex->glTexture());
                    //rendue de l'object
                    glDisable(GL_TEXTURE_2D);

le problème c'est qu'il faut spécifier quel endroit de la texture sera "plaqué" sur tel polygone, pour ça on utilise << glTexCoord3i(0,1,0); >> ou 0 c'est le bord supérieur haut ou gauche et 1 le bord inférieur ou droit

c'est bon j'y suis pas aller trop fort jusque là ? smile

sinon avec un peu de chance je ne suis pas dans le même internat que celui de l'an dernier où je ne captais pas la wifi, mais la rumeur court que le pions qui avaient la wifi la désactivaient ... mais t'inquiète c'est le premier truc que je teste yikes

ps: désolé pour le "-1" je voulais faire une énumération mais je suis partie dans un discours wink
oh et ça ne fait que 3 semaines que je bosse sous opengl donc je ne connais pas tout non plus ... (depuis le sleekthink)

edit: je poste le code demain ... et je ferai un effort, les sources en "français" + doc/commentaire ...
Dernière modification 31-08-2010 22:00:58 Magun
bon alors pour les textures c'est pas très compliqué opengl fait quasiment tout
ça se fait en deux étapes:
allocation mémoire en vram et création d'une id pour la texture
utilisation de la texture appelant l'id ...

bon je suppose que tu sais déjà comme est les principe d'une texture ? enfin ... c'est pas compliquer tu crées un tableau "1D", où tu stockes les données, de dimension width*height+1
pour se localiser, la position = x+height*y plus ou moins, faut prendre aussi en compte que tu utilises 3 ou 4 "channel" on va dire le format ( 8, 16, 24, 32 respectivement, noir/blanc, noir/blanc/alpha, rgb oou yuv, argb ou rgba) donc ton tableau est égal à width*height*(format/8)+1, c'est toujours pareil pour se localiser (x+hieght*y)*(format/8), et pour retrouver les couleurs tu fais juste position+x ou x < format/8, pas trop compliqué jusque là ? wink
c'est juste la partie software ( chargement ) après pour passer à opengl:

Code c++ :


            glEnable(GL_TEXTURE_2D);
            glGenTextures (1, & gl); // gl est de type GLuint soit l'id de la texture
            glBindTexture (GL_TEXTURE_2D, gl);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); // option a la screunieugnieuh ça marche bien dans mes exemples donc ...
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
            glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
            glDisable(GL_TEXTURE_2D);
            //spécification suivant le format
            switch(format)
            {
                case TXFMT_LUMINANCE:
                    glTexImage2D(GL_TEXTURE_2D, 0, fmt, original.width, original.height, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, buffer);
                break;
                case TXFMT_LUMINANCE_ALPHA:
                    glTexImage2D(GL_TEXTURE_2D, 0, fmt, original.width, original.height, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, buffer);
                break;
                case TXFMT_RGB:
                    glTexImage2D(GL_TEXTURE_2D, 0, fmt, original.width, original.height, 0, GL_RGB, GL_UNSIGNED_BYTE, buffer);
                break;
                case TXFMT_RGBA:
                    glTexImage2D(GL_TEXTURE_2D, 0, fmt, original.width, original.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
                break;
            }

suppression de la texture:

Code c++ :


            !glIsTexture(gl)) ? glDeleteTextures(1,&gl) : void(); // plus rapide qu'un if, il paraît que ça utilise des instructions asm ...
            gl = 0;

et l'utilisation:

Code c++ :


                    glEnable(GL_TEXTURE_2D);
                    glBindTexture(GL_TEXTURE_2D, tex->glTexture());
                    //rendue de l'object
                    glDisable(GL_TEXTURE_2D);

le problème c'est qu'il faut spécifier quel endroit de la texture sera "plaqué" sur tel polygone, pour ça on utilise << glTexCoord3i(0,1,0); >> ou 0 c'est le bord supérieur haut ou gauche et 1 le bord inférieur ou droit

c'est bon j'y suis pas aller trop fort jusque là ? smile

sinon avec un peu de chance je ne suis pas dans le même internat que celui de l'an dernier où je ne captais pas la wifi, mais la rumeur court que le pions qui avaient la wifi la désactivaient ... mais t'inquiète c'est le premier truc que je teste yikes

ps: désolé pour le "-1" je voulais faire une énumération mais je suis partie dans un discours wink
oh et ça ne fait que 3 semaines que je bosse sous opengl donc je ne connais pas tout non plus ... (depuis le sleekthink)

edit: je poste le code demain ... et je ferai un effort, les sources en "français" + doc/commentaire ...
Création du message 31-08-2010 21:17:26 Magun
bon alors pour les textures c'est pas très compliqué opengl fait quasiment tout
ça se fait en deux étapes:
allocation mémoire en vram et création d'une id pour la texture
utilisation de la texture appelant l'id ...

bon je suppose que tu sais déjà comme est les principe d'une texture ? enfin ... c'est pas compliquer tu crées un tableau "1D", où tu stockes les données, de dimension width*height+1
pour se localiser, la position = x+height*y plus ou moins, faut prendre aussi en compte que tu utilises 3 ou 4 "channel" on va dire le format ( 8, 16, 24, 32 respectivement, noir/blanc, noir/blanc/alpha, rgb oou yuv, argb ou rgba) donc ton tableau est égal à width*height*(format/8)+1, c'est toujours pareil pour se localiser (x+hieght*y)*(format/8), et pour retrouver les couleurs tu fais juste position+x ou x < format/8, pas trop compliqué jusque là ? wink
c'est juste la partie software ( chargement ) après pour passer à opengl:

Code c++ :


            glEnable(GL_TEXTURE_2D);
            glGenTextures (1, & gl); // gl est de type GLuint soit l'id de la texture
            glBindTexture (GL_TEXTURE_2D, gl);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); // option a la screunieugnieuh ça marche bien dans mes exemples donc ...
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
            glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
            glDisable(GL_TEXTURE_2D);
            //spécification suivant le format
            switch(format)
            {
                case TXFMT_LUMINANCE:
                    glTexImage2D(GL_TEXTURE_2D, 0, fmt, original.width, original.height, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, buffer);
                break;
                case TXFMT_LUMINANCE_ALPHA:
                    glTexImage2D(GL_TEXTURE_2D, 0, fmt, original.width, original.height, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, buffer);
                break;
                case TXFMT_RGB:
                    glTexImage2D(GL_TEXTURE_2D, 0, fmt, original.width, original.height, 0, GL_RGB, GL_UNSIGNED_BYTE, buffer);
                break;
                case TXFMT_RGBA:
                    glTexImage2D(GL_TEXTURE_2D, 0, fmt, original.width, original.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
                break;
            }

suppression de la texture:

Code c++ :


            !glIsTexture(gl)) ? glDeleteTextures(1,&gl) : void(); // plus rapide qu'un if, il paraît que ça utilise des instructions asm ...
            gl = 0;

et l'utilisation:

Code c++ :


                    glEnable(GL_TEXTURE_2D);
                    glBindTexture(GL_TEXTURE_2D, tex->glTexture());
                    //rendue de l'object
                    glDisable(GL_TEXTURE_2D);

le problème c'est qu'il faut spécifier quel endroit de la texture sera "plaqué" sur tel polygone, pour ça on utilise << glTexCoord3i(0,1,0); >> ou 0 c'est le bord supérieur haut ou gauche et 1 le bord inférieur ou droit

c'est bon j'y suis pas aller trop fort jusque là ? smile

sinon avec un peu de chance je ne suis pas dans le même internat que celui de l'an dernier où je ne captais pas la wifi, mais la rumeur court que le pions qui avaient la wifi la désactivaient ... mais t'inquiète c'est le premier truc que je teste yikes

ps: désolé pour le "-1" je voulais faire une énumération mais je suis partie dans un discours wink
oh et ça ne fait que 3 semaines que je bosse sous opengl donc je ne connais pas tout non plus ... (depuis le sleekthink)

edit: je poste le code demain ... et je ferai un effort, les sources en "français" + doc/commentaire ...

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
215 invités en ligne
membre en ligne: -
RSS Feed