b311480e |
1 | // Copyright (c) 1991-1999 Matra Datavision |
973c2be1 |
2 | // Copyright (c) 1999-2014 OPEN CASCADE SAS |
b311480e |
3 | // |
973c2be1 |
4 | // This file is part of Open CASCADE Technology software library. |
b311480e |
5 | // |
d5f74e42 |
6 | // This library is free software; you can redistribute it and/or modify it under |
7 | // the terms of the GNU Lesser General Public License version 2.1 as published |
973c2be1 |
8 | // by the Free Software Foundation, with special exception defined in the file |
9 | // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT |
10 | // distribution for complete text of the license and disclaimer of any warranty. |
b311480e |
11 | // |
973c2be1 |
12 | // Alternatively, this file may be used under the terms of Open CASCADE |
13 | // commercial license or contractual agreement. |
7fd59977 |
14 | |
42cf5bc1 |
15 | #include <Graphic3d_MaterialAspect.hxx> |
4e1bc39a |
16 | |
42cf5bc1 |
17 | #include <Graphic3d_MaterialDefinitionError.hxx> |
b5eb7166 |
18 | #include <Standard_Assert.hxx> |
42cf5bc1 |
19 | #include <Standard_OutOfRange.hxx> |
7fd59977 |
20 | |
4e1bc39a |
21 | namespace |
44c7c33e |
22 | { |
4e1bc39a |
23 | //! Raw material for defining list of standard materials |
24 | struct RawMaterial |
25 | { |
26 | const char* StringName; |
27 | Graphic3d_BSDF BSDF; |
28 | Quantity_Color Colors [Graphic3d_TypeOfReflection_NB]; |
29 | Standard_ShortReal ColorCoef[Graphic3d_TypeOfReflection_NB]; |
30 | Standard_ShortReal TransparencyCoef; |
31 | Standard_ShortReal RefractionIndex; |
32 | Standard_ShortReal Shininess; |
4e1bc39a |
33 | Graphic3d_TypeOfMaterial MaterialType; |
34 | Graphic3d_NameOfMaterial MaterialName; |
35 | Standard_Boolean ReflActivity[Graphic3d_TypeOfReflection_NB]; |
7fd59977 |
36 | |
4e1bc39a |
37 | RawMaterial (Graphic3d_NameOfMaterial theName, const char* theStringName); |
38 | |
39 | }; |
40 | |
41 | //! Name list of standard materials (defined within enumeration). |
42 | static const RawMaterial THE_MATERIALS[] = |
43 | { |
44 | RawMaterial (Graphic3d_NOM_BRASS, "Brass"), |
45 | RawMaterial (Graphic3d_NOM_BRONZE, "Bronze"), |
46 | RawMaterial (Graphic3d_NOM_COPPER, "Copper"), |
47 | RawMaterial (Graphic3d_NOM_GOLD, "Gold"), |
48 | RawMaterial (Graphic3d_NOM_PEWTER, "Pewter"), |
49 | RawMaterial (Graphic3d_NOM_PLASTER, "Plastered"), |
50 | RawMaterial (Graphic3d_NOM_PLASTIC, "Plastified"), |
51 | RawMaterial (Graphic3d_NOM_SILVER, "Silver"), |
52 | RawMaterial (Graphic3d_NOM_STEEL, "Steel"), |
53 | RawMaterial (Graphic3d_NOM_STONE, "Stone"), |
54 | RawMaterial (Graphic3d_NOM_SHINY_PLASTIC, "Shiny_plastified"), |
55 | RawMaterial (Graphic3d_NOM_SATIN, "Satined"), |
56 | RawMaterial (Graphic3d_NOM_METALIZED, "Metalized"), |
57 | RawMaterial (Graphic3d_NOM_NEON_GNC, "Ionized"), |
58 | RawMaterial (Graphic3d_NOM_CHROME, "Chrome"), |
59 | RawMaterial (Graphic3d_NOM_ALUMINIUM, "Aluminium"), |
60 | RawMaterial (Graphic3d_NOM_OBSIDIAN, "Obsidian"), |
61 | RawMaterial (Graphic3d_NOM_NEON_PHC, "Neon"), |
62 | RawMaterial (Graphic3d_NOM_JADE, "Jade"), |
63 | RawMaterial (Graphic3d_NOM_CHARCOAL, "Charcoal"), |
64 | RawMaterial (Graphic3d_NOM_WATER, "Water"), |
65 | RawMaterial (Graphic3d_NOM_GLASS, "Glass"), |
66 | RawMaterial (Graphic3d_NOM_DIAMOND, "Diamond"), |
67 | RawMaterial (Graphic3d_NOM_TRANSPARENT, "Transparent"), |
68 | RawMaterial (Graphic3d_NOM_DEFAULT, "Default"), |
69 | RawMaterial (Graphic3d_NOM_UserDefined, "UserDefined") |
70 | }; |
7fd59977 |
71 | } |
72 | |
44c7c33e |
73 | // ======================================================================= |
4e1bc39a |
74 | // function : RawMaterial |
44c7c33e |
75 | // purpose : |
76 | // ======================================================================= |
4e1bc39a |
77 | RawMaterial::RawMaterial (Graphic3d_NameOfMaterial theName, const char* theStringName) |
78 | : StringName (theStringName), |
79 | BSDF (Graphic3d_BSDF::CreateDiffuse (Graphic3d_Vec3 (0.0f))), |
80 | TransparencyCoef(0.0f), |
81 | RefractionIndex (1.0f), |
82 | Shininess (0.039f), |
4e1bc39a |
83 | MaterialType (Graphic3d_MATERIAL_ASPECT), |
84 | MaterialName (theName) |
44c7c33e |
85 | { |
4e1bc39a |
86 | ReflActivity[Graphic3d_TOR_AMBIENT] = Standard_True; |
87 | ReflActivity[Graphic3d_TOR_DIFFUSE] = Standard_True; |
88 | ReflActivity[Graphic3d_TOR_SPECULAR] = Standard_True; |
89 | ReflActivity[Graphic3d_TOR_EMISSION] = Standard_False; |
44c7c33e |
90 | |
4e1bc39a |
91 | ColorCoef[Graphic3d_TOR_AMBIENT] = 0.3f; |
92 | ColorCoef[Graphic3d_TOR_DIFFUSE] = 0.65f; |
93 | ColorCoef[Graphic3d_TOR_SPECULAR] = 0.0f; |
94 | ColorCoef[Graphic3d_TOR_EMISSION] = 0.0f; |
7fd59977 |
95 | |
4e1bc39a |
96 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.2f, 0.2f, 0.2f)); |
97 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.2f, 0.2f, 0.2f)); |
98 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (1.0f, 1.0f, 1.0f)); |
44c7c33e |
99 | switch (theName) |
100 | { |
189f85a3 |
101 | case Graphic3d_NOM_PLASTIC: |
4e1bc39a |
102 | Shininess = 0.0078125f; |
103 | ColorCoef[Graphic3d_TOR_AMBIENT] = 0.50f; |
104 | ColorCoef[Graphic3d_TOR_DIFFUSE] = 0.24f; |
105 | ColorCoef[Graphic3d_TOR_SPECULAR] = 0.06f; |
106 | |
05aa616d |
107 | BSDF.Kd = static_cast<Graphic3d_Vec3> (Colors[Graphic3d_TOR_DIFFUSE]); |
108 | BSDF.Ks = Graphic3d_Vec4 (0.00784314f, 0.00784314f, 0.00784314f, 0.25f); |
4e1bc39a |
109 | BSDF.Normalize(); |
44c7c33e |
110 | break; |
189f85a3 |
111 | case Graphic3d_NOM_SHINY_PLASTIC: |
4e1bc39a |
112 | Shininess = 1.00f; |
113 | ColorCoef[Graphic3d_TOR_AMBIENT] = 0.44f; |
114 | ColorCoef[Graphic3d_TOR_DIFFUSE] = 0.50f; |
115 | ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f; |
116 | |
05aa616d |
117 | BSDF.Kd = static_cast<Graphic3d_Vec3> (Colors[Graphic3d_TOR_DIFFUSE]); |
118 | BSDF.Ks = Graphic3d_Vec4 (0.145f, 0.145f, 0.145f, 0.17f); |
4e1bc39a |
119 | BSDF.Normalize(); |
44c7c33e |
120 | break; |
4e1bc39a |
121 | case Graphic3d_NOM_SATIN: |
122 | Shininess = 0.09375f; |
123 | ColorCoef[Graphic3d_TOR_AMBIENT] = 0.33f; |
124 | ColorCoef[Graphic3d_TOR_DIFFUSE] = 0.40f; |
125 | ColorCoef[Graphic3d_TOR_SPECULAR] = 0.44f; |
189f85a3 |
126 | |
4e1bc39a |
127 | BSDF.Kd = Graphic3d_Vec3 (0.2f); |
05aa616d |
128 | BSDF.Ks = Graphic3d_Vec4 (0.6f); |
6e728f3b |
129 | |
44c7c33e |
130 | break; |
131 | case Graphic3d_NOM_NEON_GNC: |
4e1bc39a |
132 | Shininess = 0.05f; |
133 | ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f; |
134 | ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f; |
135 | ColorCoef[Graphic3d_TOR_SPECULAR] = 0.62f; |
136 | ColorCoef[Graphic3d_TOR_EMISSION] = 1.00f; |
137 | ReflActivity[Graphic3d_TOR_AMBIENT] = Standard_False; |
138 | ReflActivity[Graphic3d_TOR_EMISSION] = Standard_True; |
139 | |
140 | BSDF.Kd = Graphic3d_Vec3 (0.0f); |
05aa616d |
141 | BSDF.Ks = Graphic3d_Vec4 (0.5f, 0.5f, 0.5f, 0.f); |
142 | BSDF.Le = static_cast<Graphic3d_Vec3> (Colors[Graphic3d_TOR_DIFFUSE]); |
143 | BSDF.FresnelBase = Graphic3d_Fresnel::CreateDielectric (1.5f); |
44c7c33e |
144 | break; |
145 | case Graphic3d_NOM_METALIZED: |
4e1bc39a |
146 | Shininess = 0.13f; |
147 | ColorCoef[Graphic3d_TOR_AMBIENT] = 0.90f; |
148 | ColorCoef[Graphic3d_TOR_DIFFUSE] = 0.47f; |
149 | ColorCoef[Graphic3d_TOR_SPECULAR] = 0.45f; |
150 | ReflActivity[Graphic3d_TOR_AMBIENT] = Standard_False; |
189f85a3 |
151 | { |
4e1bc39a |
152 | const Graphic3d_Vec3 aColor = (Graphic3d_Vec3 )Colors[Graphic3d_TOR_DIFFUSE]; |
153 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
154 | Graphic3d_Fresnel::CreateSchlick (aColor), 0.045f); |
189f85a3 |
155 | } |
44c7c33e |
156 | break; |
157 | // Ascending Compatibility physical materials. The same definition is taken as in the next constructor. |
158 | case Graphic3d_NOM_BRASS: |
4e1bc39a |
159 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
160 | |
4e1bc39a |
161 | Shininess = 0.65f; |
162 | ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f; |
163 | ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f; |
164 | ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f; |
44c7c33e |
165 | |
4e1bc39a |
166 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
167 | Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.58f, 0.42f, 0.20f)), 0.045f); |
189f85a3 |
168 | |
4e1bc39a |
169 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.329f, 0.224f, 0.027f)); |
170 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.780f, 0.569f, 0.114f)); |
171 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.992f, 0.941f, 0.808f)); |
44c7c33e |
172 | break; |
173 | case Graphic3d_NOM_BRONZE: |
4e1bc39a |
174 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
175 | |
4e1bc39a |
176 | Shininess = 0.65f; |
177 | ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f; |
178 | ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f; |
179 | ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f; |
44c7c33e |
180 | |
4e1bc39a |
181 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
182 | Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.65f, 0.35f, 0.15f)), 0.045f); |
189f85a3 |
183 | |
4e1bc39a |
184 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.213f, 0.128f, 0.054f)); |
185 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.714f, 0.428f, 0.181f)); |
186 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.590f, 0.408f, 0.250f)); |
44c7c33e |
187 | break; |
188 | case Graphic3d_NOM_COPPER: |
4e1bc39a |
189 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
190 | |
4e1bc39a |
191 | Shininess = 0.65f; |
192 | ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f; |
193 | ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f; |
194 | ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f; |
44c7c33e |
195 | |
4e1bc39a |
196 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
197 | Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.955008f, 0.637427f, 0.538163f)), 0.045f); |
189f85a3 |
198 | |
4e1bc39a |
199 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.191f, 0.074f, 0.023f)); |
200 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.604f, 0.270f, 0.083f)); |
201 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.950f, 0.640f, 0.540f)); |
44c7c33e |
202 | break; |
203 | case Graphic3d_NOM_GOLD: |
4e1bc39a |
204 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
205 | |
4e1bc39a |
206 | Shininess = 0.80f; |
207 | ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f; |
208 | ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f; |
209 | ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f; |
44c7c33e |
210 | |
4e1bc39a |
211 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
212 | Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (1.000000f, 0.765557f, 0.336057f)), 0.045f); |
189f85a3 |
213 | |
4e1bc39a |
214 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.300f, 0.230f, 0.095f)); |
215 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.752f, 0.580f, 0.100f)); |
216 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (1.000f, 0.710f, 0.290f)); |
44c7c33e |
217 | break; |
218 | case Graphic3d_NOM_PEWTER: |
4e1bc39a |
219 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
220 | |
4e1bc39a |
221 | Shininess = 0.50f; |
222 | ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f; |
223 | ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f; |
224 | ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f; |
44c7c33e |
225 | |
4e1bc39a |
226 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
227 | Graphic3d_Fresnel::CreateConductor (1.8800f, 3.4900f), 0.045f); |
189f85a3 |
228 | |
4e1bc39a |
229 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.106f, 0.059f, 0.114f)); |
230 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.427f, 0.471f, 0.541f)); |
231 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.333f, 0.333f, 0.522f)); |
44c7c33e |
232 | break; |
233 | case Graphic3d_NOM_PLASTER: |
4e1bc39a |
234 | Shininess = 0.01f; |
235 | ColorCoef[Graphic3d_TOR_AMBIENT] = 0.26f; |
236 | ColorCoef[Graphic3d_TOR_DIFFUSE] = 0.75f; |
237 | ColorCoef[Graphic3d_TOR_SPECULAR] = 0.05f; |
44c7c33e |
238 | |
4e1bc39a |
239 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.192f, 0.192f, 0.192f)); |
240 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.508f, 0.508f, 0.508f)); |
241 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.508f, 0.508f, 0.508f)); |
189f85a3 |
242 | |
4e1bc39a |
243 | BSDF.Kd = Graphic3d_Vec3 (0.482353f, 0.482353f, 0.482353f); |
189f85a3 |
244 | |
44c7c33e |
245 | break; |
246 | case Graphic3d_NOM_SILVER: |
4e1bc39a |
247 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
248 | |
4e1bc39a |
249 | Shininess = 0.75f; |
250 | ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f; |
251 | ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f; |
252 | ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f; |
44c7c33e |
253 | |
4e1bc39a |
254 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
255 | Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.971519f, 0.959915f, 0.915324f)), 0.045f); |
189f85a3 |
256 | |
4e1bc39a |
257 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.275f, 0.275f, 0.250f)); |
258 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.630f, 0.630f, 0.630f)); |
259 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.950f, 0.930f, 0.880f)); |
44c7c33e |
260 | break; |
261 | case Graphic3d_NOM_STEEL: |
4e1bc39a |
262 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
263 | |
4e1bc39a |
264 | Shininess = 0.90f; |
265 | ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f; |
266 | ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f; |
267 | ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f; |
44c7c33e |
268 | |
4e1bc39a |
269 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
270 | Graphic3d_Fresnel::CreateConductor (Graphic3d_Vec3 (2.90f, 2.80f, 2.53f), Graphic3d_Vec3 (3.08f, 2.90f, 2.74f)), 0.045f); |
189f85a3 |
271 | |
4e1bc39a |
272 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.150f, 0.150f, 0.180f)); |
273 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.500f, 0.510f, 0.520f)); |
274 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.560f, 0.570f, 0.580f)); |
44c7c33e |
275 | break; |
276 | case Graphic3d_NOM_STONE: |
4e1bc39a |
277 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
278 | |
4e1bc39a |
279 | Shininess = 0.17f; |
280 | ColorCoef[Graphic3d_TOR_AMBIENT] = 0.19f; |
281 | ColorCoef[Graphic3d_TOR_DIFFUSE] = 0.75f; |
282 | ColorCoef[Graphic3d_TOR_SPECULAR] = 0.08f; |
44c7c33e |
283 | |
4e1bc39a |
284 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (1.00f, 0.8f, 0.62f)); |
285 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (1.00f, 0.8f, 0.62f)); |
286 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.98f, 1.0f, 0.60f)); |
189f85a3 |
287 | |
4e1bc39a |
288 | BSDF.Kd = Graphic3d_Vec3 (0.243137f, 0.243137f, 0.243137f); |
05aa616d |
289 | BSDF.Ks = Graphic3d_Vec4 (0.00392157f, 0.00392157f, 0.00392157f, 0.5f); |
189f85a3 |
290 | |
44c7c33e |
291 | break; |
292 | // Ascending Compatibility of physical materials. Takes the same definition as in the next constructor. New materials |
293 | case Graphic3d_NOM_CHROME: |
4e1bc39a |
294 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
295 | |
4e1bc39a |
296 | Shininess = 0.90f; |
297 | ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f; |
298 | ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f; |
299 | ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f; |
44c7c33e |
300 | |
4e1bc39a |
301 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
302 | Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.549585f, 0.556114f, 0.554256f)), 0.045f); |
189f85a3 |
303 | |
4e1bc39a |
304 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.200f, 0.200f, 0.225f)); |
305 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.550f, 0.550f, 0.550f)); |
306 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.975f, 0.975f, 0.975f)); |
44c7c33e |
307 | break; |
308 | case Graphic3d_NOM_ALUMINIUM: |
4e1bc39a |
309 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
310 | |
4e1bc39a |
311 | Shininess = 0.75f; |
312 | ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f; |
313 | ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f; |
314 | ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f; |
44c7c33e |
315 | |
4e1bc39a |
316 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
317 | Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.913183f, 0.921494f, 0.924524f)), 0.045f); |
189f85a3 |
318 | |
4e1bc39a |
319 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.300f, 0.300f, 0.300f)); |
320 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.600f, 0.600f, 0.600f)); |
321 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.910f, 0.920f, 0.920f)); |
44c7c33e |
322 | break; |
323 | case Graphic3d_NOM_NEON_PHC: |
4e1bc39a |
324 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
325 | |
326 | Shininess = 0.05f; |
327 | ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f; |
328 | ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f; |
329 | ColorCoef[Graphic3d_TOR_SPECULAR] = 0.62f; |
330 | ColorCoef[Graphic3d_TOR_EMISSION] = 0.90f; |
331 | ReflActivity[Graphic3d_TOR_AMBIENT] = Standard_False; |
332 | ReflActivity[Graphic3d_TOR_DIFFUSE] = Standard_False; |
333 | ReflActivity[Graphic3d_TOR_EMISSION] = Standard_True; |
334 | |
335 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (1.0f, 1.0f, 1.0f)); |
336 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (1.0f, 1.0f, 1.0f)); |
337 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (1.0f, 1.0f, 1.0f)); |
338 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f, 1.0f, 0.46f)); |
339 | |
340 | BSDF.Kd = Graphic3d_Vec3 (0.0f); |
05aa616d |
341 | BSDF.Ks = Graphic3d_Vec4 (0.5f, 0.5f, 0.5f, 0.f); |
4e1bc39a |
342 | BSDF.Le = Graphic3d_Vec3 (0.0f, 1.0f, 0.46f); |
05aa616d |
343 | BSDF.FresnelBase = Graphic3d_Fresnel::CreateDielectric (1.5f); |
44c7c33e |
344 | break; |
345 | case Graphic3d_NOM_OBSIDIAN: |
4e1bc39a |
346 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
347 | |
348 | Shininess = 0.3f; |
349 | ColorCoef[Graphic3d_TOR_AMBIENT] = 1.0f; |
350 | ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.0f; |
351 | ColorCoef[Graphic3d_TOR_SPECULAR] = 1.0f; |
352 | |
353 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.054f, 0.050f, 0.066f)); |
354 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.183f, 0.170f, 0.225f)); |
355 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.333f, 0.329f, 0.346f)); |
356 | |
357 | BSDF.Kd = Graphic3d_Vec3 (0.023f, 0.f, 0.023f); |
05aa616d |
358 | BSDF.Ks = Graphic3d_Vec4 (0.0156863f, 0.0156863f, 0.0156863f, 0.1f); |
44c7c33e |
359 | break; |
360 | case Graphic3d_NOM_JADE: |
4e1bc39a |
361 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
362 | |
363 | Shininess = 0.10f; |
364 | ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f; |
365 | ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f; |
366 | ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f; |
367 | |
368 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.135f, 0.223f, 0.158f)); |
369 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.540f, 0.890f, 0.630f)); |
370 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.316f, 0.316f, 0.316f)); |
371 | |
05aa616d |
372 | BSDF.FresnelBase = Graphic3d_Fresnel::CreateDielectric (1.5f); |
4e1bc39a |
373 | BSDF.Kd = Graphic3d_Vec3 (0.208658f, 0.415686f, 0.218401f); |
05aa616d |
374 | BSDF.Ks = Graphic3d_Vec4 (0.611765f, 0.611765f, 0.611765f, 0.06f); |
44c7c33e |
375 | break; |
376 | case Graphic3d_NOM_CHARCOAL: |
4e1bc39a |
377 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
378 | |
379 | Shininess = 0.01f; |
380 | ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f; |
381 | ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f; |
382 | ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f; |
383 | |
384 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.050f, 0.050f, 0.050f)); |
385 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.150f, 0.150f, 0.150f)); |
386 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.000f, 0.000f, 0.000f)); |
387 | |
388 | BSDF.Kd = Graphic3d_Vec3 (0.02f, 0.02f, 0.02f); |
05aa616d |
389 | BSDF.Ks = Graphic3d_Vec4 (0.1f, 0.1f, 0.1f, 0.3f); |
44c7c33e |
390 | break; |
391 | case Graphic3d_NOM_WATER: |
4e1bc39a |
392 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
393 | |
394 | Shininess = 0.90f; |
395 | ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f; |
396 | ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f; |
397 | ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f; |
398 | RefractionIndex = 1.33f; |
399 | BSDF = Graphic3d_BSDF::CreateGlass (Graphic3d_Vec3 (1.f), |
400 | Graphic3d_Vec3 (0.7f, 0.75f, 0.85f), |
401 | 0.05f, |
402 | RefractionIndex); |
403 | TransparencyCoef = 0.80f; |
404 | |
405 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.450f, 0.450f, 0.475f)); |
406 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.050f, 0.050f, 0.075f)); |
407 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.380f, 0.380f, 0.380f)); |
44c7c33e |
408 | break; |
409 | case Graphic3d_NOM_GLASS: |
4e1bc39a |
410 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
411 | |
412 | Shininess = 0.50f; |
413 | ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f; |
414 | ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f; |
415 | ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f; |
416 | RefractionIndex = 1.62f; |
417 | BSDF = Graphic3d_BSDF::CreateGlass (Graphic3d_Vec3 (1.f), |
418 | Graphic3d_Vec3 (0.75f, 0.95f, 0.9f), |
419 | 0.05f, |
420 | RefractionIndex); |
421 | TransparencyCoef = 0.80f; |
422 | |
423 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.550f, 0.575f, 0.575f)); |
424 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.050f, 0.075f, 0.075f)); |
425 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.920f, 0.920f, 0.920f)); |
44c7c33e |
426 | break; |
427 | case Graphic3d_NOM_DIAMOND: |
4e1bc39a |
428 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
429 | |
430 | Shininess = 0.90f; |
431 | ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f; |
432 | ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f; |
433 | ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f; |
434 | RefractionIndex = 2.42f; |
435 | BSDF = Graphic3d_BSDF::CreateGlass (Graphic3d_Vec3 (1.f), |
436 | Graphic3d_Vec3 (0.95f, 0.95f, 0.95f), |
437 | 0.05f, |
438 | RefractionIndex); |
439 | TransparencyCoef = 0.80f; |
440 | |
441 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.550f, 0.550f, 0.550f)); |
442 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.100f, 0.100f, 0.100f)); |
443 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.970f, 0.970f, 0.970f)); |
44c7c33e |
444 | break; |
6e728f3b |
445 | |
446 | case Graphic3d_NOM_TRANSPARENT: |
4e1bc39a |
447 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
448 | |
449 | Shininess = 0.90f; |
450 | ColorCoef[Graphic3d_TOR_AMBIENT] = 1.00f; |
451 | ColorCoef[Graphic3d_TOR_DIFFUSE] = 1.00f; |
452 | ColorCoef[Graphic3d_TOR_SPECULAR] = 1.00f; |
453 | RefractionIndex = 1.0f; |
6e728f3b |
454 | |
4e1bc39a |
455 | BSDF.Kd = Graphic3d_Vec3 (0.1f); |
456 | BSDF.Kt = Graphic3d_Vec3 (0.9f); |
05aa616d |
457 | BSDF.FresnelBase = Graphic3d_Fresnel::CreateConstant (0.0f); |
4e1bc39a |
458 | TransparencyCoef = 0.80f; |
459 | |
460 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.550f, 0.550f, 0.550f)); |
461 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.100f, 0.100f, 0.100f)); |
462 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.970f, 0.970f, 0.970f)); |
463 | break; |
44c7c33e |
464 | case Graphic3d_NOM_UserDefined: |
44c7c33e |
465 | break; |
466 | case Graphic3d_NOM_DEFAULT: |
44c7c33e |
467 | break; |
468 | } |
469 | } |
7fd59977 |
470 | |
4e1bc39a |
471 | // ======================================================================= |
472 | // function : Graphic3d_MaterialAspect |
473 | // purpose : |
474 | // ======================================================================= |
475 | Graphic3d_MaterialAspect::Graphic3d_MaterialAspect() |
476 | : myRequestedMaterialName (Graphic3d_NOM_DEFAULT) |
477 | { |
478 | init (Graphic3d_NOM_DEFAULT); |
479 | } |
480 | |
481 | // ======================================================================= |
482 | // function : Graphic3d_MaterialAspect |
483 | // purpose : |
484 | // ======================================================================= |
485 | Graphic3d_MaterialAspect::Graphic3d_MaterialAspect (const Graphic3d_NameOfMaterial theName) |
486 | : myRequestedMaterialName (theName) |
487 | { |
488 | init (theName); |
489 | } |
490 | |
491 | // ======================================================================= |
492 | // function : init |
493 | // purpose : |
494 | // ======================================================================= |
495 | void Graphic3d_MaterialAspect::init (const Graphic3d_NameOfMaterial theName) |
496 | { |
497 | const RawMaterial& aMat = THE_MATERIALS[theName]; |
498 | myBSDF = aMat.BSDF; |
499 | myStringName = aMat.StringName; |
500 | myColors[Graphic3d_TOR_AMBIENT] = aMat.Colors[Graphic3d_TOR_AMBIENT]; |
501 | myColors[Graphic3d_TOR_DIFFUSE] = aMat.Colors[Graphic3d_TOR_DIFFUSE]; |
502 | myColors[Graphic3d_TOR_SPECULAR] = aMat.Colors[Graphic3d_TOR_SPECULAR]; |
503 | myColors[Graphic3d_TOR_EMISSION] = aMat.Colors[Graphic3d_TOR_EMISSION]; |
504 | myColorCoef[Graphic3d_TOR_AMBIENT] = aMat.ColorCoef[Graphic3d_TOR_AMBIENT]; |
505 | myColorCoef[Graphic3d_TOR_DIFFUSE] = aMat.ColorCoef[Graphic3d_TOR_DIFFUSE]; |
506 | myColorCoef[Graphic3d_TOR_SPECULAR] = aMat.ColorCoef[Graphic3d_TOR_SPECULAR]; |
507 | myColorCoef[Graphic3d_TOR_EMISSION] = aMat.ColorCoef[Graphic3d_TOR_EMISSION]; |
508 | myTransparencyCoef = aMat.TransparencyCoef; |
509 | myRefractionIndex = aMat.RefractionIndex; |
510 | myShininess = aMat.Shininess; |
4e1bc39a |
511 | myMaterialType = aMat.MaterialType; |
512 | myMaterialName = theName; |
513 | myRequestedMaterialName = theName; |
514 | myReflActivity[Graphic3d_TOR_AMBIENT] = aMat.ReflActivity[Graphic3d_TOR_AMBIENT]; |
515 | myReflActivity[Graphic3d_TOR_DIFFUSE] = aMat.ReflActivity[Graphic3d_TOR_DIFFUSE]; |
516 | myReflActivity[Graphic3d_TOR_SPECULAR] = aMat.ReflActivity[Graphic3d_TOR_SPECULAR]; |
517 | myReflActivity[Graphic3d_TOR_EMISSION] = aMat.ReflActivity[Graphic3d_TOR_EMISSION]; |
518 | } |
519 | |
44c7c33e |
520 | // ======================================================================= |
521 | // function : IncreaseShine |
522 | // purpose : |
523 | // ======================================================================= |
4e1bc39a |
524 | void Graphic3d_MaterialAspect::IncreaseShine (const Standard_ShortReal theDelta) |
44c7c33e |
525 | { |
4e1bc39a |
526 | const Standard_ShortReal anOldShine = myShininess; |
527 | myShininess = myShininess + myShininess * theDelta / 100.0f; |
528 | if (myShininess > 1.0f || myShininess < 0.0f) |
44c7c33e |
529 | { |
530 | myShininess = anOldShine; |
531 | } |
532 | } |
7fd59977 |
533 | |
44c7c33e |
534 | // ======================================================================= |
535 | // function : SetMaterialType |
536 | // purpose : |
537 | // ======================================================================= |
538 | void Graphic3d_MaterialAspect::SetMaterialType (const Graphic3d_TypeOfMaterial theType) |
539 | { |
540 | myMaterialType = theType; |
541 | if (theType != myMaterialType) |
542 | { |
4e1bc39a |
543 | setUserMaterial(); |
44c7c33e |
544 | } |
7fd59977 |
545 | } |
546 | |
44c7c33e |
547 | // ======================================================================= |
548 | // function : SetAmbient |
549 | // purpose : |
550 | // ======================================================================= |
4e1bc39a |
551 | void Graphic3d_MaterialAspect::SetAmbient (const Standard_ShortReal theValue) |
44c7c33e |
552 | { |
4e1bc39a |
553 | if (theValue < 0.0f |
554 | || theValue > 1.0f) |
44c7c33e |
555 | { |
9775fa61 |
556 | throw Graphic3d_MaterialDefinitionError("Bad value for SetAmbient < 0. or > 1.0"); |
44c7c33e |
557 | } |
7fd59977 |
558 | |
4e1bc39a |
559 | myColorCoef[Graphic3d_TOR_AMBIENT] = theValue; |
560 | if (myReflActivity[Graphic3d_TOR_AMBIENT] |
44c7c33e |
561 | && myMaterialType == Graphic3d_MATERIAL_PHYSIC) |
562 | { |
4e1bc39a |
563 | setUserMaterial(); |
44c7c33e |
564 | } |
565 | } |
7fd59977 |
566 | |
44c7c33e |
567 | // ======================================================================= |
568 | // function : SetColor |
569 | // purpose : |
570 | // ======================================================================= |
571 | void Graphic3d_MaterialAspect::SetColor (const Quantity_Color& theColor) |
572 | { |
573 | const Standard_ShortReal anAmbientCoeff = 0.25f; |
4e1bc39a |
574 | myColors[Graphic3d_TOR_AMBIENT].SetValues (theColor.Red() * anAmbientCoeff, |
575 | theColor.Green() * anAmbientCoeff, |
576 | theColor.Blue() * anAmbientCoeff, Quantity_TOC_RGB); |
577 | myColors[Graphic3d_TOR_DIFFUSE] = theColor; |
578 | if (myReflActivity[Graphic3d_TOR_AMBIENT] |
579 | && myMaterialType == Graphic3d_MATERIAL_PHYSIC) |
44c7c33e |
580 | { |
4e1bc39a |
581 | setUserMaterial(); |
44c7c33e |
582 | } |
583 | } |
7fd59977 |
584 | |
44c7c33e |
585 | // ======================================================================= |
586 | // function : SetAmbientColor |
587 | // purpose : |
588 | // ======================================================================= |
589 | void Graphic3d_MaterialAspect::SetAmbientColor (const Quantity_Color& theColor) |
590 | { |
4e1bc39a |
591 | myColors[Graphic3d_TOR_AMBIENT] = theColor; |
592 | if (myReflActivity[Graphic3d_TOR_AMBIENT] |
44c7c33e |
593 | && myMaterialType == Graphic3d_MATERIAL_PHYSIC) |
594 | { |
4e1bc39a |
595 | setUserMaterial(); |
44c7c33e |
596 | } |
7fd59977 |
597 | } |
598 | |
44c7c33e |
599 | // ======================================================================= |
600 | // function : SetDiffuseColor |
601 | // purpose : |
602 | // ======================================================================= |
603 | void Graphic3d_MaterialAspect::SetDiffuseColor (const Quantity_Color& theColor) |
604 | { |
4e1bc39a |
605 | myColors[Graphic3d_TOR_DIFFUSE] = theColor; |
606 | if (myReflActivity[Graphic3d_TOR_DIFFUSE] |
44c7c33e |
607 | && myMaterialType == Graphic3d_MATERIAL_PHYSIC) |
608 | { |
4e1bc39a |
609 | setUserMaterial(); |
44c7c33e |
610 | } |
611 | } |
7fd59977 |
612 | |
44c7c33e |
613 | // ======================================================================= |
614 | // function : SetSpecularColor |
615 | // purpose : |
616 | // ======================================================================= |
617 | void Graphic3d_MaterialAspect::SetSpecularColor (const Quantity_Color& theColor) |
618 | { |
4e1bc39a |
619 | myColors[Graphic3d_TOR_SPECULAR] = theColor; |
620 | if (myReflActivity[Graphic3d_TOR_SPECULAR] |
44c7c33e |
621 | && myMaterialType == Graphic3d_MATERIAL_PHYSIC) |
622 | { |
4e1bc39a |
623 | setUserMaterial(); |
44c7c33e |
624 | } |
625 | } |
7fd59977 |
626 | |
44c7c33e |
627 | // ======================================================================= |
628 | // function : SetEmissiveColor |
629 | // purpose : |
630 | // ======================================================================= |
631 | void Graphic3d_MaterialAspect::SetEmissiveColor (const Quantity_Color& theColor) |
632 | { |
4e1bc39a |
633 | myColors[Graphic3d_TOR_EMISSION] = theColor; |
634 | if (myReflActivity[Graphic3d_TOR_EMISSION] |
44c7c33e |
635 | && myMaterialType == Graphic3d_MATERIAL_PHYSIC) |
636 | { |
4e1bc39a |
637 | setUserMaterial(); |
44c7c33e |
638 | } |
639 | } |
7fd59977 |
640 | |
44c7c33e |
641 | // ======================================================================= |
642 | // function : SetDiffuse |
643 | // purpose : |
644 | // ======================================================================= |
4e1bc39a |
645 | void Graphic3d_MaterialAspect::SetDiffuse (const Standard_ShortReal theValue) |
44c7c33e |
646 | { |
4e1bc39a |
647 | if (theValue < 0.0f |
648 | || theValue > 1.0f) |
44c7c33e |
649 | { |
9775fa61 |
650 | throw Graphic3d_MaterialDefinitionError("Bad value for SetDiffuse < 0. or > 1.0"); |
44c7c33e |
651 | } |
7fd59977 |
652 | |
4e1bc39a |
653 | myColorCoef[Graphic3d_TOR_DIFFUSE] = theValue; |
654 | if (myReflActivity[Graphic3d_TOR_DIFFUSE] |
44c7c33e |
655 | && myMaterialType == Graphic3d_MATERIAL_PHYSIC) |
656 | { |
4e1bc39a |
657 | setUserMaterial(); |
44c7c33e |
658 | } |
7fd59977 |
659 | } |
660 | |
44c7c33e |
661 | // ======================================================================= |
662 | // function : SetEmissive |
663 | // purpose : |
664 | // ======================================================================= |
4e1bc39a |
665 | void Graphic3d_MaterialAspect::SetEmissive (const Standard_ShortReal theValue) |
44c7c33e |
666 | { |
4e1bc39a |
667 | if (theValue < 0.0f |
668 | || theValue > 1.0f) |
44c7c33e |
669 | { |
9775fa61 |
670 | throw Graphic3d_MaterialDefinitionError("Bad value for SetEmissive < 0. or > 1.0"); |
44c7c33e |
671 | } |
7fd59977 |
672 | |
4e1bc39a |
673 | myColorCoef[Graphic3d_TOR_EMISSION] = theValue; |
674 | if (myReflActivity[Graphic3d_TOR_DIFFUSE] |
44c7c33e |
675 | && myMaterialType == Graphic3d_MATERIAL_PHYSIC) |
676 | { |
4e1bc39a |
677 | setUserMaterial(); |
44c7c33e |
678 | } |
679 | } |
7fd59977 |
680 | |
44c7c33e |
681 | // ======================================================================= |
4e1bc39a |
682 | // function : SetReflectionMode |
44c7c33e |
683 | // purpose : |
684 | // ======================================================================= |
4e1bc39a |
685 | void Graphic3d_MaterialAspect::SetReflectionMode (const Graphic3d_TypeOfReflection theType, |
686 | const Standard_Boolean theValue) |
44c7c33e |
687 | { |
4e1bc39a |
688 | myReflActivity[theType] = theValue; |
44c7c33e |
689 | if (myMaterialType == Graphic3d_MATERIAL_PHYSIC) |
690 | { |
4e1bc39a |
691 | setUserMaterial(); |
44c7c33e |
692 | } |
7fd59977 |
693 | } |
694 | |
44c7c33e |
695 | // ======================================================================= |
696 | // function : SetSpecular |
697 | // purpose : |
698 | // ======================================================================= |
4e1bc39a |
699 | void Graphic3d_MaterialAspect::SetSpecular (const Standard_ShortReal theValue) |
44c7c33e |
700 | { |
4e1bc39a |
701 | if (theValue < 0.0f |
702 | || theValue > 1.0f) |
44c7c33e |
703 | { |
9775fa61 |
704 | throw Graphic3d_MaterialDefinitionError("Bad value for SetSpecular < 0. or > 1.0"); |
44c7c33e |
705 | } |
7fd59977 |
706 | |
4e1bc39a |
707 | myColorCoef[Graphic3d_TOR_SPECULAR] = theValue; |
708 | if (myReflActivity[Graphic3d_TOR_SPECULAR] |
44c7c33e |
709 | && myMaterialType == Graphic3d_MATERIAL_PHYSIC) |
710 | { |
4e1bc39a |
711 | setUserMaterial(); |
44c7c33e |
712 | } |
713 | } |
7fd59977 |
714 | |
44c7c33e |
715 | // ======================================================================= |
716 | // function : SetTransparency |
717 | // purpose : |
718 | // ======================================================================= |
4e1bc39a |
719 | void Graphic3d_MaterialAspect::SetTransparency (const Standard_ShortReal theValue) |
44c7c33e |
720 | { |
4e1bc39a |
721 | if (theValue < 0.0f |
722 | || theValue > 1.0f) |
44c7c33e |
723 | { |
9775fa61 |
724 | throw Graphic3d_MaterialDefinitionError("Bad value for SetTransparency < 0. or > 1.0"); |
44c7c33e |
725 | } |
7fd59977 |
726 | |
4e1bc39a |
727 | myTransparencyCoef = theValue; |
7fd59977 |
728 | } |
729 | |
44c7c33e |
730 | // ======================================================================= |
731 | // function : SetRefractionIndex |
732 | // purpose : |
733 | // ======================================================================= |
4e1bc39a |
734 | void Graphic3d_MaterialAspect::SetRefractionIndex (const Standard_ShortReal theValue) |
44c7c33e |
735 | { |
4e1bc39a |
736 | if (theValue < 1.0f) |
44c7c33e |
737 | { |
9775fa61 |
738 | throw Graphic3d_MaterialDefinitionError("Bad value for refraction index < 1.0"); |
44c7c33e |
739 | } |
7fd59977 |
740 | |
4e1bc39a |
741 | myRefractionIndex = theValue; |
44c7c33e |
742 | } |
7fd59977 |
743 | |
44c7c33e |
744 | // ======================================================================= |
745 | // function : SetShininess |
746 | // purpose : |
747 | // ======================================================================= |
4e1bc39a |
748 | void Graphic3d_MaterialAspect::SetShininess (const Standard_ShortReal theValue) |
44c7c33e |
749 | { |
4e1bc39a |
750 | if (theValue < 0.0f |
751 | || theValue > 1.0f) |
44c7c33e |
752 | { |
9775fa61 |
753 | throw Graphic3d_MaterialDefinitionError("Bad value for Shininess < 0. or > 1.0"); |
44c7c33e |
754 | } |
7fd59977 |
755 | |
4e1bc39a |
756 | myShininess = theValue; |
757 | setUserMaterial(); |
7fd59977 |
758 | } |
759 | |
44c7c33e |
760 | // ======================================================================= |
761 | // function : MaterialName |
762 | // purpose : |
763 | // ======================================================================= |
764 | Standard_CString Graphic3d_MaterialAspect::MaterialName (const Standard_Integer theRank) |
765 | { |
766 | if (theRank < 1 || theRank > NumberOfMaterials()) |
767 | { |
9775fa61 |
768 | throw Standard_OutOfRange("BAD index of material"); |
44c7c33e |
769 | } |
4e1bc39a |
770 | const RawMaterial& aMat = THE_MATERIALS[theRank - 1]; |
771 | return aMat.StringName; |
7fd59977 |
772 | } |
773 | |
44c7c33e |
774 | // ======================================================================= |
775 | // function : MaterialFromName |
776 | // purpose : |
777 | // ======================================================================= |
ad3217cd |
778 | Graphic3d_NameOfMaterial Graphic3d_MaterialAspect::MaterialFromName (const Standard_CString theName) |
779 | { |
780 | TCollection_AsciiString aName (theName); |
781 | aName.LowerCase(); |
782 | aName.Capitalize(); |
783 | const Standard_Integer aNbMaterials = Graphic3d_MaterialAspect::NumberOfMaterials(); |
4e1bc39a |
784 | for (Standard_Integer aMatIter = 0; aMatIter < aNbMaterials; ++aMatIter) |
ad3217cd |
785 | { |
4e1bc39a |
786 | const RawMaterial& aMat = THE_MATERIALS[aMatIter]; |
787 | if (aName == aMat.StringName) |
ad3217cd |
788 | { |
4e1bc39a |
789 | return Graphic3d_NameOfMaterial(aMatIter); |
ad3217cd |
790 | } |
791 | } |
792 | |
793 | // parse aliases |
794 | if (aName == "Plastic") // Plastified |
795 | { |
796 | return Graphic3d_NOM_PLASTIC; |
797 | } |
798 | else if (aName == "Shiny_plastic") // Shiny_plastified |
799 | { |
800 | return Graphic3d_NOM_SHINY_PLASTIC; |
801 | } |
802 | else if (aName == "Plaster") // Plastered |
803 | { |
804 | return Graphic3d_NOM_PLASTER; |
805 | } |
806 | else if (aName == "Satin") // Satined |
807 | { |
808 | return Graphic3d_NOM_SATIN; |
809 | } |
810 | else if (aName == "Neon_gnc") // Ionized |
811 | { |
812 | return Graphic3d_NOM_NEON_GNC; |
813 | } |
814 | else if (aName == "Neon_phc") // Neon |
815 | { |
816 | return Graphic3d_NOM_NEON_PHC; |
817 | } |
818 | return Graphic3d_NOM_DEFAULT; |
819 | } |
820 | |
44c7c33e |
821 | // ======================================================================= |
822 | // function : MaterialType |
823 | // purpose : |
824 | // ======================================================================= |
825 | Graphic3d_TypeOfMaterial Graphic3d_MaterialAspect::MaterialType (const Standard_Integer theRank) |
826 | { |
827 | if (theRank < 1 || theRank > NumberOfMaterials()) |
828 | { |
9775fa61 |
829 | throw Standard_OutOfRange("BAD index of material"); |
44c7c33e |
830 | } |
4e1bc39a |
831 | const RawMaterial& aMat = THE_MATERIALS[theRank - 1]; |
832 | return aMat.MaterialType; |
7fd59977 |
833 | } |