Outils du site

fr:nel_texture

NEL : Les Textures

Toutes les textures du moteur NEL sont manipulées par des objets dérivant de la classe ITexture. Voici la hiérarchie des classes Textures :

ITexture
  CTextureBlank
    CTextureBloom
  CTextureBlend
  CTextureBump
  CTextureCube
  CTextureDLM
  CTextureEmboss
  CTextureFar
  CTextureFile
  CTextureFont
  CTextureGrouped
  CTextureMem
  CTextureMultiFile
  CTextureNear
  

La classe ITexture

Eléments clef de la classe texture

code/nel/include/nel/3d/texture.h
code/nel/src/3d/texure.cpp
  class ITexture : public CBitmap, public NLMISC::CRefCount, 
    public NLMISC::IStreamable {
	  ...
	  // Membres de la classe
	  ...
	  TUploadFormat	_UploadFormat;
	  TWrapMode		_WrapS;
	  TWrapMode		_WrapT;
	  TMinFilter		_MinFilter;
	  TMagFilter		_MagFilter;
	  NLMISC::CSmartPtr<CTextureCategory>		_TextureCategory;
   }

fonctions pour la *partage* des textures nommées :

  // Does this texture support sharing system.
  virtual bool supportSharing() const {return false;}
  // Return the Unique ident/name of the texture, used for Driver sharing caps.
  // Deriver should add a prefix for their texture type. eg "file::pipoland", 
  // "noise::4-4-2" etc....
  virtual std::string getShareName() const {return std::string();}

Données sérialisées par la classe :

  1. _UploadFormat : Énumération pouvant prendre une des 14 valeurs suivantes : “Auto”, “RGBA8888”, “RGBA4444”, “RGBA5551”, “RGB888”, “RGB565”, “DXTC1”, “DXTC1Alpha”, “DXTC3”, “DXTC5”, “Luminance”, “Alpha”, “AlphaLuminance”, “DsDt”.
  2. _WrapS : Énumération ayant la même sémantique que celle d'OpenGL : “Repeat” ou “Clamp”.
  3. _WrapT : idem ci-dessus
  4. _MinFilter : Énumération pouvant prendre les valeurs suivantes (voir la sémantique OpenGL) : “NearestMipMapOff”, “NearestMipMapNearest”, “NearestMipMapLinear”, “LinearMipMapOff”, “LinearMipMapNearest”, “LinearMipMapLinear”. Note :si le bitmap nécessite un mipmap et que ce mipmap n'est pas présente, il est construit à ce moment.
  5. _MagFilter : Énumération pouvant prendre les valeurs suivantes (voir la sémantique OpenGL) : “Nearest”, “Linear”
  6. _LoadGrayscaleAsAlpha : booléen vrai ou faux (sémantique à définir)

La classe CTextureFile

La classe *CTextureFile* est une implémentation de la classe ITexture qui initialise la texture à partir d'une image bitmap située sur le disque

Données sérialisées par la classe :

  1. _FileName : le nom du fichier image
  2. _AllowDegradation : Authorise le driver à créer des mipmaps de la texture permettant l'utilisation d'une version réduite de la texture si celle ci est loin. Plus on est loin de la texture plus une version réduite,donc dégradé en qualité et moins gourmande en calculs, sera utilisé. Plus on est loin moins on verra les détails de celle ci.

La classe CTextureMultiFile

This kind of texture is like a texture file except that it can encode several texture at once. Only ONE texture is active at a given time. The texture being used is chosen by a call to selectTexture. NB : This is not derived from CTextureMulti because we don't store a pointer on each texture, just the name. Moreover the needed method are exposed by CTexture

  class CTextureMultiFile : public ITexture
 
     // Membres
     uint32 _CurrSelectedTexture;
     std::vector<std::string> _FileNames;
 
  }

Quelques fonctions importantes :

  // Set the number of textures that are encoded in that texture
  void setNumTextures(uint numTexs);
  // Set the name of the file containing the i-th texture
  void setFileName(uint index, const char *);
  // Get the number of textures
  uint getNumFileName() const { return (uint)_FileNames.size(); }
  // get the name of the file containing the texture for the given index
  const std::string &getFileName(uint index) const { return _FileNames[index]; }

Je me demande si cette classe n'est pas utilisée pour sérialiser les textures dépendantes des races/pays. Exemple : la texture peau référence les 5 peaux d'un animal en fonction de son origine (primes,jungle,…). Autre remarque :

// Generate the current selected texture, looking in CPath if necessary.
virtual void doGenerate(bool async = false);

Ce commentaire dans le code laisse à penser que seule l'image de la texture sélectionnée pour un objet est chargée en mémoire.

(osquallo: la fonction doGenerate() génére bien la texture (le “bitmap” en gros le tableau contenant tous les octets de la texture) en mémoire a partir d'un fichier, ce qui permet de l'envoyer à la carte graphique ensuite.)

Données sérialisées par la classe :

  1. _CurrSelectedTexture : numéro de la texture sélectionnée
  2. _FileNames : un tableau contenant les nom des fichiers images.
fr/nel_texture.txt · Dernière modification: 2016/09/14 07:04 (modification externe)