gKit3
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
33
34
46{
47 std::vector<std::string> names;
48 std::vector<Material> materials;
49 std::vector<std::string> texture_filenames;
51
53
54 void clear( )
55 {
56 names.clear();
57 materials.clear();
58 texture_filenames.clear();
60 }
61
63 int insert( const Material& material, const char *name )
64 {
65 int id= find(name);
66 if(id == -1)
67 {
68 id= int(materials.size());
69 names.push_back(name);
70 materials.push_back(material);
71 }
72 assert(materials.size() == names.size());
73 return id;
74 }
75
77 int insert_texture( const char *filename )
78 {
79 int id= find_texture(filename);
80 if(id == -1)
81 {
82 id= int(texture_filenames.size());
83 texture_filenames.push_back(filename);
84 }
85 return id;
86 }
87
89 int find( const char *name )
90 {
91 if(name == nullptr || name[0] == 0)
92 return -1;
93
94 for(int i= 0; i < int(names.size()); i++)
95 {
96 if(names[i] == name)
97 return i;
98 }
99 return -1;
100 }
101
103 int count( ) const { return int(materials.size()); }
104
106 const char *name( const int id ) const { assert(id != -1); assert(id < int(materials.size())); return names[id].c_str(); }
108 const char *name( const int id ) { assert(id != -1); assert(id < int(materials.size())); return names[id].c_str(); }
109
111 const Material& material( const int id ) const { assert(id != -1); assert(id < int(materials.size())); return materials[id]; }
113 Material& material( const int id ) { assert(id != -1); assert(id < int(materials.size())); return materials[id]; }
114
116 const Material& operator() ( const int id ) const { return material(id); }
118 Material& operator() ( const int id ) { return material(id); }
119
121 const Material& material( const char *name )
122 {
123 int id= find(name);
124 if(id != -1)
125 // renvoie la matiere
126 return materials[id];
127 else
128 // ou renvoie la matiere par defaut...
129 return default_material();
130 }
131
134 {
136 }
137
140 {
141 if(default_material_id == -1)
142 default_material_id= insert(Material(Color(0.8)), "default");
143
144 return default_material_id;
145 }
146
148 int filename_count( ) const { return int(texture_filenames.size()); }
150 const char *filename( const int id ) const { if(id < 0) return nullptr; assert(id < int(texture_filenames.size())); return texture_filenames[id].c_str(); }
151
153 int find_texture( const char *filename )
154 {
155 if(filename == nullptr || filename[0] == 0)
156 return -1;
157
158 for(int i= 0; i < int(texture_filenames.size()); i++)
159 {
161 return i;
162 }
163 return -1;
164 }
165};
166
167#endif
representation d'une couleur (rgba) transparente ou opaque.
Definition color.h:14
Material()
constructeur par defaut. noir.
Definition materials.h:29
int diffuse_texture
indice de la texture de la couleur de base, ou -1.
Definition materials.h:24
float ns
concentration des reflets, exposant pour les reflets blinn-phong.
Definition materials.h:20
int ns_texture
indice de la texture, ou -1.
Definition materials.h:26
Color transmission
transmission, "couleur" des objets transparents.
Definition materials.h:22
Color emission
pour une source de lumiere.
Definition materials.h:19
float ni
indice de refraction, cf coefficients de Fresnel.
Definition materials.h:21
Color diffuse
couleur diffuse / de base.
Definition materials.h:17
Material(const Color &color)
matiere diffuse.
Definition materials.h:31
Color specular
couleur du reflet.
Definition materials.h:18
int specular_texture
indice de la texture, ou -1.
Definition materials.h:25
const Material & material(const char *name)
renvoie la matiere 'name', si elle existe. ou la matiere par defaut.
Definition materials.h:121
std::vector< std::string > names
noms des matieres.
Definition materials.h:47
Material & material(const int id)
renvoie la ieme matiere.
Definition materials.h:113
int insert(const Material &material, const char *name)
ajoute une matiere.
Definition materials.h:63
int filename_count() const
renvoie le nombre de noms de fichiers de textures.
Definition materials.h:148
int find_texture(const char *filename)
renvoie l'indice d'une texture, si elle existe.
Definition materials.h:153
const Material & operator()(const int id) const
renvoie la ieme matiere.
Definition materials.h:116
int find(const char *name)
recherche une matiere avec son nom. renvoie son indice dans materials, ou -1.
Definition materials.h:89
int insert_texture(const char *filename)
ajoute une texture / nom du fichier.
Definition materials.h:77
std::vector< std::string > texture_filenames
noms des textures a charger.
Definition materials.h:49
const char * filename(const int id) const
renvoie le nom de fichier d'une texture.
Definition materials.h:150
int count() const
nombre de matieres.
Definition materials.h:103
const Material & default_material()
renvoie une matiere par defaut.
Definition materials.h:133
int default_material_id
indice de la matiere par defaut dans materials.
Definition materials.h:50
std::vector< Material > materials
description des matieres.
Definition materials.h:48
const char * name(const int id)
renvoie le nom de la ieme matiere.
Definition materials.h:108
const Material & material(const int id) const
renvoie la ieme matiere.
Definition materials.h:111
const char * name(const int id) const
renvoie le nom de la ieme matiere.
Definition materials.h:106
int default_material_index()
indice de la matiere par defaut dans le tableau materials.
Definition materials.h:139