gKit2 light
Loading...
Searching...
No Matches
materials.h
1
2#ifndef _MATERIALS_H
3#define _MATERIALS_H
4
5#include <string>
6#include <vector>
7#include <cassert>
8
9#include "color.h"
10
11
31
32
44struct Materials
45{
46 std::vector<std::string> names;
47 std::vector<Material> materials;
48 std::vector<std::string> texture_filenames;
50
51 Materials( ) : names(), materials(), texture_filenames(), default_material_id(-1) {}
52
53 void clear( )
54 {
55 names.clear();
56 materials.clear();
57 texture_filenames.clear();
59 }
60
62 int insert( const Material& material, const char *name )
63 {
64 int id= find(name);
65 if(id == -1)
66 {
67 id= int(materials.size());
68 names.push_back(name);
69 materials.push_back(material);
70 }
71 assert(materials.size() == names.size());
72 return id;
73 }
74
76 int insert_texture( const char *filename )
77 {
78 int id= find_texture(filename);
79 if(id == -1)
80 {
81 id= int(texture_filenames.size());
82 texture_filenames.push_back(filename);
83 }
84 return id;
85 }
86
88 int find( const char *name )
89 {
90 if(name == nullptr || name[0] == 0)
91 return -1;
92
93 for(int i= 0; i < int(names.size()); i++)
94 {
95 if(names[i] == name)
96 return i;
97 }
98 return -1;
99 }
100
102 int count( ) const { return int(materials.size()); }
103
105 const char *name( const int id ) const { assert(id != -1); assert(id < int(materials.size())); return names[id].c_str(); }
107 const char *name( const int id ) { assert(id != -1); assert(id < int(materials.size())); return names[id].c_str(); }
108
110 const Material& material( const int id ) const { assert(id != -1); assert(id < int(materials.size())); return materials[id]; }
112 Material& material( const int id ) { assert(id != -1); assert(id < int(materials.size())); return materials[id]; }
113
115 const Material& operator() ( const int id ) const { return material(id); }
117 Material& operator() ( const int id ) { return material(id); }
118
120 const Material& material( const char *name )
121 {
122 int id= find(name);
123 if(id != -1)
124 // renvoie la matiere
125 return materials[id];
126 else
127 // ou renvoie la matiere par defaut...
128 return default_material();
129 }
130
133 {
135 }
136
139 {
140 if(default_material_id == -1)
141 default_material_id= insert(Material(Color(0.8)), "default");
142
143 return default_material_id;
144 }
145
147 int filename_count( ) const { return int(texture_filenames.size()); }
149 const char *filename( const int id ) const { if(id < 0) return nullptr; assert(id < int(texture_filenames.size())); return texture_filenames[id].c_str(); }
150
152 int find_texture( const char *filename )
153 {
154 if(filename == nullptr || filename[0] == 0)
155 return -1;
156
157 for(int i= 0; i < int(texture_filenames.size()); i++)
158 {
160 return i;
161 }
162 return -1;
163 }
164};
165
166#endif
void clear(Text &text)
efface le contenu de la console.
Definition text.cpp:72
representation d'une couleur (rgba) transparente ou opaque.
Definition color.h:14
Material()
constructeur par defaut. noir.
Definition materials.h:27
int diffuse_texture
indice de la texture de la couleur de base, ou -1.
Definition materials.h:21
float ns
concentration des reflets, exposant pour les reflets blinn-phong.
Definition materials.h:20
int ns_texture
indice de la texture de reflet, ou -1.
Definition materials.h:24
Color emission
pour une source de lumiere.
Definition materials.h:19
Color diffuse
couleur diffuse / de base.
Definition materials.h:17
Material(const Color &color)
matiere diffuse.
Definition materials.h:29
int emission_texture
indice de la texture, ou -1.
Definition materials.h:23
Color specular
couleur du reflet.
Definition materials.h:18
int specular_texture
indice de la texture, ou -1.
Definition materials.h:22
const Material & material(const char *name)
renvoie la matiere 'name', si elle existe. ou la matiere par defaut.
Definition materials.h:120
std::vector< std::string > names
noms des matieres.
Definition materials.h:46
Material & material(const int id)
renvoie la ieme matiere.
Definition materials.h:112
int insert(const Material &material, const char *name)
ajoute une matiere.
Definition materials.h:62
int filename_count() const
renvoie le nombre de noms de fichiers de textures.
Definition materials.h:147
int find_texture(const char *filename)
renvoie l'indice d'une texture, si elle existe.
Definition materials.h:152
const Material & operator()(const int id) const
renvoie la ieme matiere.
Definition materials.h:115
int find(const char *name)
recherche une matiere avec son nom. renvoie son indice dans materials, ou -1.
Definition materials.h:88
int insert_texture(const char *filename)
ajoute une texture / nom du fichier.
Definition materials.h:76
std::vector< std::string > texture_filenames
noms des textures a charger.
Definition materials.h:48
const char * filename(const int id) const
renvoie le nom de fichier d'une texture.
Definition materials.h:149
int count() const
nombre de matieres.
Definition materials.h:102
const Material & default_material()
renvoie une matiere par defaut.
Definition materials.h:132
int default_material_id
indice de la matiere par defaut dans materials.
Definition materials.h:49
std::vector< Material > materials
description des matieres.
Definition materials.h:47
const char * name(const int id)
renvoie le nom de la ieme matiere.
Definition materials.h:107
const Material & material(const int id) const
renvoie la ieme matiere.
Definition materials.h:110
const char * name(const int id) const
renvoie le nom de la ieme matiere.
Definition materials.h:105
int default_material_index()
indice de la matiere par defaut dans le tableau materials.
Definition materials.h:138