Charger une image bitmap dans une texture

 

Tout d'abord, un rappel sur les textures pour Linux et pour Windows !

Pour nos textures, nous allons charger des fichiers bitmaps (BMP ou DIB).

Pour cela, nous allons nous créer une procédure sous Windows et une procédure sous Unix.

J'entends déjà, mais il n'y a pas besoin de faire cela, la librairie glaux le fait tout seul via auxDIBImageLoad...

Effectivement, et elle fait même bien plus, mais je n'en parlerai pas car cette librairie n'existe que pour Windows. Elle n'est donc pas portable.

 

Je me limiterai au fichier le plus simple soit 24 bits pour définir la couleur d'un point. La taille sera aussi limitée à 2048x2048.

 

La méthode de chargement d'une image pouvant être utilisée par tous les objets 3d, celle-ci sera définie dans la classe objet3d.

La méthode se nomme loadTextureBmp et attend le nom du fichier BMP ainsi que la valeur alpha à appliquer à l'image.

 

Dans le cas de Windows (dont les explications avaient été faites ici), nous utiliserons BITMAPFILEHEADER qui va nous permettre après chargement de l'entête du fichier de récupérer les dimensions de cette image, ainsi que le format d'encodage pour contrôler que ous sommes bien en 24bits.

Vient ensuite le chargement de l'image. Dans cette étape, il faut réencoder l'image dans le buffer de destination au format RGBA soit rouge vert bleu ALPHA. Or le format de stockage et BGR soit bleu vert rouge dans le fichier (l'explication de se format étrange).

 

Dans le cas de Linux (dont les explications avaient été faites ), nous chargerons le fichiers de façon encore plus artisanale. Nous récupérons octets par octets pour déterminer la taille du fichier, ...

Puis arrive là aussi le chargement de l'image avec le même problème de format RGBA alors que nous sommes en BGR dans le fichier...

Enfin, toujours dans la même classe, nous transférerons l'image vers les buffers de la carte graphique via la méthode initialiseTexture. Cette méthode utilisant le pointeur lpcTexture renseigné lors du chargement de l'image.