Accueil > Forum > > > > Problème avec TGA Loader
Problème avec TGA Loader
dimanche 8 janvier 2006 à 17:22:20 |
Problème avec TGA Loader

psykocrash
|
Bonjour,
J'ai commencé depuis peut la programmation avec OpenGL/GLut et j'ai
trouvé la classe TGA Loader de Funto66 mais je n'arrive pas à afficher
les textures.
Voila le code source de mon application, j'espère que vous trouverez d'où vient l'erreur...
/*
* Apprendre l'OpenGL / Glut
* par Psykocrash
*
* Lexique :
* - Vertex : ? (Liste de sommets ou Point)
*/
// -== Inclusion des fichiers en-tête ==-
#ifdef WIN32
#include <windows.h>
#endif
#include <stdio.h>
#include <gl/gl.h>
#include <gl/glut.h>
// Classe codée par Funto (funto66@gmail.com)
#include <TGALoader/TGALoader.cpp>
// -== Constantes ==-
#define TEXTURE_HERO 1
// -== Déclaration des prototypes ==-
void Display(void);
void Reshape(int, int);
void ChargerTexture(char *Chemin, int id);
void DessinerTexture(int Id, int X, int Y, int Largeur, int Hauteur,
int X_src, int Y_src, int Largeur_src, int Hauteur_src, float
Transparence);
// -== Fonctions ==-
int main(int argc, char *argv[])
{
// Initialisation
glutInit(&argc, argv); // Initialisation de GLUT
glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE); // Couleurs vraies, un seul tampon
// Paramètres de la fenêtre
glutInitWindowSize(640, 480); // Taille 640*480
//-> Pour un affichage en plein écran, remplacer glutInitWindowSize() par glutFullScreen()
glutInitWindowPosition(50, 50); // Position
glutCreateWindow("Fenetre OpenGL"); // Création de la fenêtre
// Chargement des textures
ChargerTexture("C:\\hero.tga", TEXTURE_HERO);
// Callbacks
glutDisplayFunc(Display); // Affichage
//glutReshapeFunc(Reshape); // Création et redimension de la fenêtre
// Lancement du gestionnaire GLUT
glutMainLoop();
// Fin du programme
return 0;
}
void ChargerTexture(char *Chemin, int id)
{
TGALoader tga_loader;
tga_loader.LoadOpenGLTextureWithID(Chemin, id, TGA_LINEAR);
}
void DessinerTexture(int Id, int X, int Y, int Largeur, int Hauteur,
int X_src, int Y_src, int Largeur_src, int Hauteur_src, float
Transparence)
{
glEnable(GL_BLEND);
glDisable(GL_DEPTH_TEST);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glColor4f(1.0f, 1.0f, 1.0f, Transparence);
glBindTexture(GL_TEXTURE_2D, Id);
glBegin(GL_QUADS);
glTexCoord2d(X_src, Y_src);
glVertex2i(X, Y);
glTexCoord2d(X_src + Largeur_src, Y_src);
glVertex2i(X+Largeur, Y);
glTexCoord2d(X_src + Largeur_src, Y_src + Hauteur_src);
glVertex2i(X+Largeur, Y+Hauteur);
glTexCoord2d(X_src, Y_src + Hauteur_src);
glVertex2i(X, Y+Hauteur);
glEnd();
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glDisable(GL_BLEND);
glEnable(GL_DEPTH_TEST);
}
void Display()
{ // Chargée de l'affichage
glClearColor(0, 0, 0, 0); // Définit une couleur (Rouge,Vert,Bleu,Alpha)
glClear(GL_COLOR_BUFFER_BIT); // Remplis le buffer
d'une valeur définie (par défaut, la valeur 0 => couleur noir)
//----------------------
// Elements de la scène
//----------------------
DessinerTexture(TEXTURE_HERO, 0, 0, 100, 100, 0, 0, 1, 1, 1);
//----------------------
//Sleep(5); // Pause pour ne pas trop utiliser le CPU
glFlush(); // Envoit le flux de données vers le buffer d'affichage
}
void Reshape(int width, int height)
{
// Définit la zone rectangulaire de la fenêtre de résultat qui servira à afficher la scène
glViewport(0,0,width,height); // x,y => coin inférieur gauche
// width,height => dimensions de la fenetre
// Définit la matrice de projection comme matrice courante
glMatrixMode(GL_PROJECTION);
// Réinitialisation de la matrice
glLoadIdentity();
// Calculs pour rendre le repère orthonormal
float L; // Longueur entre les 2 plans de coupe verticaux
float H; // Hauteur entre les 2 plans de coupe horizontaux
if (width <= height)
{
H=(GLfloat) (10*height/width);
L=10.0;
}
else
{
H=10.0;
L=(GLfloat) (10*width/height);
}
// Définit la matrice de projection (place la caméra)
gluOrtho2D(-L/2,L/2,-H/2,H/2); // left,right => coordonnées des plans de coupe verticaux droite et gauche
// bottom,top => coordonnées des plans de coupe horizontaux
}
|
|
dimanche 8 janvier 2006 à 18:30:22 |
Re : Problème avec TGA Loader

niketou
|
textureTGA.h #ifndef TEXTURETGA_H #define TEXTURETGA_H
#define WIN32_LEAN_AND_MEAN #include <windows.h> #include <iostream> #include <fstream> #include "GL/gl.h" #include "GL/glu.h"
typedef unsigned char byte;
typedef struct{ byte idLength; byte colorMapType; byte imageType; byte colorMapInfo[5]; byte x[2]; byte y[2]; byte width[2]; byte height[2]; byte bpp; }headerTga;
class textureTGA{ private: int m_width; int m_height; int m_bpp; int m_format; public: textureTGA(const char *filename, const int textureId); textureTGA(std::string filename, const int textureId){textureTGA(filename.c_str(),textureId);} int getWidth(){return m_width;} int getHeight(){return m_width;} int getBpp(){return m_bpp;} };
#endif //TEXTURETGA_H
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////:: textureTGA.cpp
#include "textureTGA.h"
textureTGA::textureTGA(const char *filename, const int textureId){ byte *imageData; int numPixels; int bytesInPixel; int imageDataSize; headerTga fileHeader; byte temp; // Open file std::ifstream textureFile(filename, std::ios::in | std::ios::binary | std::ios::ate); if(!textureFile.is_open()){ std::cout<<"[TGA] ERROR: Could not open '"<<filename<<"'"<<std::endl; return; } if(int(textureFile.tellg()) == 0){ std::cout<<"[TGA] ERROR: Texture '"<<filename<<"' is empty"<<std::endl; textureFile.close(); return; } // Read TGA header textureFile.seekg(0, std::ios::beg); textureFile.read((char*)&fileHeader, sizeof(fileHeader)); m_width = fileHeader.width[0] + (fileHeader.width[1] << 8); m_height = fileHeader.height[0] + (fileHeader.height[1] << 8); m_bpp = fileHeader.bpp;
// We only support uncompressed 24 or 32 bits per pixel TGAs if(fileHeader.colorMapType == 1 || int(fileHeader.imageType) != 2){ std::cout<<"[TGA] ERROR: '"<<filename<<"' is an texture invalid format\n[TGA] ERROR: It should be an uncompressed 24/32bpp TGA"<<std::endl; textureFile.close(); return; } if(m_bpp != 32 && m_bpp != 24){ std::cout<<"[TGA] ERROR: Invalid texture color depth, '"<<filename<<"' must be uncompressed 24/32bpp TGA"<<std::endl; textureFile.close(); return; } // OpenGL textures must be power-of-two /*if((m_width&(m_width-1)) || (m_height&(m_height-1))){ std::cout<<"[TGA] ERROR: Texture '"<<filename<<"' must have power-of-two width & height"<<std::endl; textureFile.close(); return; }*/ // Determine format switch(m_bpp){ case 24:m_format = GL_RGB; bytesInPixel = 3; break; case 32:m_format = GL_RGBA; bytesInPixel = 4; break; default: std::cout<<"[TGA] ERROR: Invalid texture color depth, '"<<filename<<"' must be uncompressed 24/32bpp TGA"<<std::endl; textureFile.close(); return; break; } // Allocate memory for image numPixels = m_width * m_height; imageDataSize = numPixels * bytesInPixel; imageData = new byte[imageDataSize]; if(!imageData){ std::cout<<"[TGA] ERROR: Out of memory"<<std::endl; textureFile.close(); return; } // Read image data textureFile.seekg(18, std::ios::beg); textureFile.read((char*)imageData, imageDataSize); textureFile.close(); // TGAs are BGRA, convert to RGBA for(int pixel=0; pixel < numPixels*bytesInPixel; pixel+=bytesInPixel){ temp = imageData[pixel+2]; imageData[pixel+2] = imageData[pixel]; imageData[pixel] = temp; } // Bind texture ID to load glBindTexture(GL_TEXTURE_2D, textureId); // Set texture parameters glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 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); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); // Upload texture to card with bound texture ID //glTexImage2D(GL_TEXTURE_2D, 0, m_format, m_width, m_height, 0, m_format, GL_UNSIGNED_BYTE, imageData); gluBuild2DMipmaps(GL_TEXTURE_2D, m_format, m_width, m_height, m_format, GL_UNSIGNED_BYTE, imageData); // Texture's uploaded, don't need data any more delete imageData; std::cout<<"[TGA] Texture '"<<filename<<"' loaded"<<std::endl; }
|
|
dimanche 8 janvier 2006 à 18:33:24 |
Re : Problème avec TGA Loader

psykocrash
|
Je voudrais réussir à utiliser TGA Loader, sinon j'aurais déjà utilisé d'autres classes trouvées sur le net...
|
|
dimanche 8 janvier 2006 à 18:36:30 |
Re : Problème avec TGA Loader

niketou
|
La taille de ton image est bien un multiple de 2?
|
|
dimanche 8 janvier 2006 à 18:38:34 |
Re : Problème avec TGA Loader

psykocrash
|
Oui. Pour les tests j'ai récupéré un tga de funto66 (qu'il a utilisé dans son jeu) pour justement éviter ce genre de problèmes..
|
|
lundi 9 janvier 2006 à 08:56:37 |
Re : Problème avec TGA Loader

neodelphi
|
J'ai pas vu de glEnable(GL_TEXTURE_2D), vérifi que tu l'as pas oublié...
|
|
dimanche 15 janvier 2006 à 20:32:15 |
Re : Problème avec TGA Loader

Alucards
|
j'ai codé un loader dynamique tga/bmp/pcx/jpg je l'ameliore au fur et a
mesure mais pour le tga je me suis inspirer du loader de funtoo donc si
ca t'intersee regarde a ce lien
Tous les chemins mènent au RHUM !!!!!!!!!!!!!!!!!!!..............................
|
|
dimanche 15 janvier 2006 à 20:32:58 |
Re : Problème avec TGA Loader

Alucards
|
http://www.cppfrance.com/code.aspx?ID=27341 dsl le ctrl + c avez pas marcher ^^
Tous les chemins mènent au RHUM !!!!!!!!!!!!!!!!!!!..............................
|
|
dimanche 15 janvier 2006 à 21:58:21 |
Re : Problème avec TGA Loader

psykocrash
|
Ok je vais l'essayer, puisqu'apparement, il n'y a pas de solution au problème du loader de funto66
|
|
Cette discussion est classée dans : int, hauteur, void, gl, src
Répondre à ce message
Sujets en rapport avec ce message
Pb de FRONT et BACK buffer avec texture [ par gastoudou ]
Bonjour à tous,Je suis en train de faire un projet en OpenGL pour l'école sur un puzzle 2D. Il y a 16 cases mélangées et on doit les remettre à leur p
labyrinthe en 3D sytle ecran veille windows [ par gastoudou ]
Bonjour à tous,Et oui encore moi pour une question, que dis-je, une mission pour une âme charitable.Je suis en train de faire un labyrinthe en 3D styl
Errreur [ par RM50Man ]
Mon code ne marche pas: Le compilateur devcpp me met build error 1 #include /* contient déjà et */ #include #include #include void reset
Gestoin de souris en C++ [ par Wickedwolf ]
Bonjour,je débute en C++ en suivant un cours d'infographie proposée dans mon cursus universitaire. Le projet de cette année consite en la création d'u
Problème avec les polygones [ par nisaloncaje ]
Bonjour, j'ai le code source suivant : #include #include double a=0,inca=0.1; /* Prototype des fonctions */void affichage();void clavier(unsigned
PB POUR LA GESTION MULTIFENETRES [ par algeros ]
Voici un code :////////////////////////////////////////////////////////////////// // Name:
probleme de selection dans opengl [ par oswa ]
bonjour, svp j'ai besoin d'un aide urgent. en effet, j'ai realiser un programme en c++ qui utilise opengl. ce programme permet de dessiner plusieurs
pikcing opengl [ par znb ]
J 'ai fait un code et ça marche très bien; il détecte les couleurs des objets. Mais je veux que, pour une valeur particulière de la couleur, dessiner
aide [ par achrafgassolina ]
salut tout le monde la j ai une érreure et je c pas comment la resoudre dans la ligne 296:36 dans la condition if et aprés je veux faire la saisie des
matrice et vecteur [ par memoireph ]
salut tous le monde je sollicite votre aide sur un problème voilà,j'ai deux classe vecteur et Matrice que je doit faire avec des opération élémentai
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|