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> |
42cf5bc1 |
18 | #include <Standard_OutOfRange.hxx> |
7fd59977 |
19 | |
4e1bc39a |
20 | namespace |
44c7c33e |
21 | { |
4e1bc39a |
22 | //! Raw material for defining list of standard materials |
23 | struct RawMaterial |
24 | { |
25 | const char* StringName; |
26 | Graphic3d_BSDF BSDF; |
67312b79 |
27 | Graphic3d_PBRMaterial PBRMaterial; |
61168418 |
28 | Quantity_Color Colors[Graphic3d_TypeOfReflection_NB]; |
4e1bc39a |
29 | Standard_ShortReal TransparencyCoef; |
30 | Standard_ShortReal RefractionIndex; |
31 | Standard_ShortReal Shininess; |
61168418 |
32 | Standard_ShortReal AmbientCoef; //!< coefficient for Graphic3d_MaterialAspect::SetColor() |
33 | Standard_ShortReal DiffuseCoef; //!< coefficient for Graphic3d_MaterialAspect::SetColor() |
4e1bc39a |
34 | Graphic3d_TypeOfMaterial MaterialType; |
35 | Graphic3d_NameOfMaterial MaterialName; |
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 | { |
a966542b |
44 | RawMaterial (Graphic3d_NameOfMaterial_Brass, "Brass"), |
45 | RawMaterial (Graphic3d_NameOfMaterial_Bronze, "Bronze"), |
46 | RawMaterial (Graphic3d_NameOfMaterial_Copper, "Copper"), |
47 | RawMaterial (Graphic3d_NameOfMaterial_Gold, "Gold"), |
48 | RawMaterial (Graphic3d_NameOfMaterial_Pewter, "Pewter"), |
49 | RawMaterial (Graphic3d_NameOfMaterial_Plastered, "Plastered"), |
50 | RawMaterial (Graphic3d_NameOfMaterial_Plastified, "Plastified"), |
51 | RawMaterial (Graphic3d_NameOfMaterial_Silver, "Silver"), |
52 | RawMaterial (Graphic3d_NameOfMaterial_Steel, "Steel"), |
53 | RawMaterial (Graphic3d_NameOfMaterial_Stone, "Stone"), |
54 | RawMaterial (Graphic3d_NameOfMaterial_ShinyPlastified, "Shiny_plastified"), |
55 | RawMaterial (Graphic3d_NameOfMaterial_Satin, "Satined"), |
56 | RawMaterial (Graphic3d_NameOfMaterial_Metalized, "Metalized"), |
57 | RawMaterial (Graphic3d_NameOfMaterial_Ionized, "Ionized"), |
58 | RawMaterial (Graphic3d_NameOfMaterial_Chrome, "Chrome"), |
59 | RawMaterial (Graphic3d_NameOfMaterial_Aluminum, "Aluminium"), |
60 | RawMaterial (Graphic3d_NameOfMaterial_Obsidian, "Obsidian"), |
61 | RawMaterial (Graphic3d_NameOfMaterial_Neon, "Neon"), |
62 | RawMaterial (Graphic3d_NameOfMaterial_Jade, "Jade"), |
63 | RawMaterial (Graphic3d_NameOfMaterial_Charcoal, "Charcoal"), |
64 | RawMaterial (Graphic3d_NameOfMaterial_Water, "Water"), |
65 | RawMaterial (Graphic3d_NameOfMaterial_Glass, "Glass"), |
66 | RawMaterial (Graphic3d_NameOfMaterial_Diamond, "Diamond"), |
67 | RawMaterial (Graphic3d_NameOfMaterial_Transparent, "Transparent"), |
68 | RawMaterial (Graphic3d_NameOfMaterial_DEFAULT, "Default"), |
69 | RawMaterial (Graphic3d_NameOfMaterial_UserDefined, "UserDefined") |
4e1bc39a |
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), |
61168418 |
83 | AmbientCoef (0.25f), |
84 | DiffuseCoef (1.0f), |
4e1bc39a |
85 | MaterialType (Graphic3d_MATERIAL_ASPECT), |
86 | MaterialName (theName) |
44c7c33e |
87 | { |
44c7c33e |
88 | switch (theName) |
89 | { |
a966542b |
90 | case Graphic3d_NameOfMaterial_Plastified: |
61168418 |
91 | MaterialType = Graphic3d_MATERIAL_ASPECT; |
4e1bc39a |
92 | |
61168418 |
93 | Shininess = 0.0078125f; |
ba00aab7 |
94 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.25f)); |
61168418 |
95 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.24f)); |
ba00aab7 |
96 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.004896f)); |
61168418 |
97 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
98 | |
99 | BSDF.Kd = Graphic3d_Vec3 (0.2f); |
05aa616d |
100 | BSDF.Ks = Graphic3d_Vec4 (0.00784314f, 0.00784314f, 0.00784314f, 0.25f); |
4e1bc39a |
101 | BSDF.Normalize(); |
67312b79 |
102 | |
44c7c33e |
103 | break; |
a966542b |
104 | case Graphic3d_NameOfMaterial_ShinyPlastified: |
61168418 |
105 | MaterialType = Graphic3d_MATERIAL_ASPECT; |
4e1bc39a |
106 | |
61168418 |
107 | Shininess = 1.00f; |
ba00aab7 |
108 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.22f)); |
61168418 |
109 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.50f)); |
110 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (1.0f)); |
111 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
112 | |
113 | BSDF.Kd = Graphic3d_Vec3 (0.2f); |
05aa616d |
114 | BSDF.Ks = Graphic3d_Vec4 (0.145f, 0.145f, 0.145f, 0.17f); |
4e1bc39a |
115 | BSDF.Normalize(); |
44c7c33e |
116 | break; |
a966542b |
117 | case Graphic3d_NameOfMaterial_Satin: |
61168418 |
118 | MaterialType = Graphic3d_MATERIAL_ASPECT; |
119 | |
120 | Shininess = 0.09375f; |
ba00aab7 |
121 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.165f)); |
61168418 |
122 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.40f)); |
ba00aab7 |
123 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.162647f)); |
61168418 |
124 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
189f85a3 |
125 | |
4e1bc39a |
126 | BSDF.Kd = Graphic3d_Vec3 (0.2f); |
05aa616d |
127 | BSDF.Ks = Graphic3d_Vec4 (0.6f); |
67312b79 |
128 | |
44c7c33e |
129 | break; |
a966542b |
130 | case Graphic3d_NameOfMaterial_Ionized: |
61168418 |
131 | MaterialType = Graphic3d_MATERIAL_ASPECT; |
132 | |
133 | Shininess = 0.05f; |
134 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
135 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (1.0f)); |
ba00aab7 |
136 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.342392f)); |
61168418 |
137 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (1.0f)); |
4e1bc39a |
138 | |
139 | BSDF.Kd = Graphic3d_Vec3 (0.0f); |
05aa616d |
140 | BSDF.Ks = Graphic3d_Vec4 (0.5f, 0.5f, 0.5f, 0.f); |
141 | BSDF.Le = static_cast<Graphic3d_Vec3> (Colors[Graphic3d_TOR_DIFFUSE]); |
142 | BSDF.FresnelBase = Graphic3d_Fresnel::CreateDielectric (1.5f); |
44c7c33e |
143 | break; |
a966542b |
144 | case Graphic3d_NameOfMaterial_Metalized: |
61168418 |
145 | MaterialType = Graphic3d_MATERIAL_ASPECT; |
146 | |
147 | Shininess = 0.13f; |
148 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
149 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.47f)); |
ba00aab7 |
150 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.170645f)); |
61168418 |
151 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
152 | |
153 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
154 | Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.2f)), 0.045f); |
44c7c33e |
155 | break; |
a966542b |
156 | case Graphic3d_NameOfMaterial_Brass: |
4e1bc39a |
157 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
158 | |
4e1bc39a |
159 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
160 | Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.58f, 0.42f, 0.20f)), 0.045f); |
189f85a3 |
161 | |
61168418 |
162 | Shininess = 0.65f; |
ba00aab7 |
163 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.088428f, 0.041081f, 0.002090f)); |
164 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.570482f, 0.283555f, 0.012335f)); |
4e1bc39a |
165 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.992f, 0.941f, 0.808f)); |
61168418 |
166 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
167 | break; |
a966542b |
168 | case Graphic3d_NameOfMaterial_Bronze: |
4e1bc39a |
169 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
170 | |
4e1bc39a |
171 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
172 | Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.65f, 0.35f, 0.15f)), 0.045f); |
189f85a3 |
173 | |
61168418 |
174 | Shininess = 0.65f; |
ba00aab7 |
175 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.037301f, 0.014931f, 0.004305f)); |
176 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.468185f, 0.153344f, 0.027491f)); |
4e1bc39a |
177 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.590f, 0.408f, 0.250f)); |
61168418 |
178 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
179 | break; |
a966542b |
180 | case Graphic3d_NameOfMaterial_Copper: |
4e1bc39a |
181 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
182 | |
4e1bc39a |
183 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
184 | Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.955008f, 0.637427f, 0.538163f)), 0.045f); |
189f85a3 |
185 | |
61168418 |
186 | Shininess = 0.65f; |
ba00aab7 |
187 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.030370f, 0.006451f, 0.001780f)); |
188 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.323236f, 0.059254f, 0.007584f)); |
4e1bc39a |
189 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.950f, 0.640f, 0.540f)); |
61168418 |
190 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
191 | break; |
a966542b |
192 | case Graphic3d_NameOfMaterial_Gold: |
4e1bc39a |
193 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
194 | |
4e1bc39a |
195 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
196 | Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (1.000000f, 0.765557f, 0.336057f)), 0.045f); |
189f85a3 |
197 | |
61168418 |
198 | Shininess = 0.80f; |
ba00aab7 |
199 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.073239f, 0.043234f, 0.009264f)); |
200 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.525643f, 0.295700f, 0.010023f)); |
4e1bc39a |
201 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (1.000f, 0.710f, 0.290f)); |
61168418 |
202 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
203 | break; |
a966542b |
204 | case Graphic3d_NameOfMaterial_Pewter: |
4e1bc39a |
205 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
206 | |
4e1bc39a |
207 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
208 | Graphic3d_Fresnel::CreateConductor (1.8800f, 3.4900f), 0.045f); |
189f85a3 |
209 | |
61168418 |
210 | Shininess = 0.50f; |
ba00aab7 |
211 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.010979f, 0.004795f, 0.012335f)); |
212 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.152583f, 0.188174f, 0.253972f)); |
4e1bc39a |
213 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.333f, 0.333f, 0.522f)); |
61168418 |
214 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
215 | break; |
a966542b |
216 | case Graphic3d_NameOfMaterial_Plastered: |
61168418 |
217 | MaterialType = Graphic3d_MATERIAL_ASPECT; |
44c7c33e |
218 | |
61168418 |
219 | Shininess = 0.01f; |
ba00aab7 |
220 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.13f)); |
61168418 |
221 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.75f)); |
ba00aab7 |
222 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.003936f)); |
61168418 |
223 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
189f85a3 |
224 | |
4e1bc39a |
225 | BSDF.Kd = Graphic3d_Vec3 (0.482353f, 0.482353f, 0.482353f); |
67312b79 |
226 | |
44c7c33e |
227 | break; |
a966542b |
228 | case Graphic3d_NameOfMaterial_Silver: |
4e1bc39a |
229 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
230 | |
4e1bc39a |
231 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
232 | Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.971519f, 0.959915f, 0.915324f)), 0.045f); |
189f85a3 |
233 | |
61168418 |
234 | Shininess = 0.75f; |
ba00aab7 |
235 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.061465f, 0.061465f, 0.050876f)); |
236 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.354692f, 0.354692f, 0.354692f)); |
4e1bc39a |
237 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.950f, 0.930f, 0.880f)); |
61168418 |
238 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
239 | break; |
a966542b |
240 | case Graphic3d_NameOfMaterial_Steel: |
4e1bc39a |
241 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
242 | |
4e1bc39a |
243 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
244 | Graphic3d_Fresnel::CreateConductor (Graphic3d_Vec3 (2.90f, 2.80f, 2.53f), Graphic3d_Vec3 (3.08f, 2.90f, 2.74f)), 0.045f); |
189f85a3 |
245 | |
61168418 |
246 | Shininess = 0.90f; |
ba00aab7 |
247 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.019607f, 0.019607f, 0.027212f)); |
248 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.214041f, 0.223414f, 0.233022f)); |
4e1bc39a |
249 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.560f, 0.570f, 0.580f)); |
61168418 |
250 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
251 | break; |
a966542b |
252 | case Graphic3d_NameOfMaterial_Stone: |
4e1bc39a |
253 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
254 | |
61168418 |
255 | // special case for SetColor() |
256 | AmbientCoef = 0.19f * 0.25f; |
257 | DiffuseCoef = 0.75f; |
44c7c33e |
258 | |
61168418 |
259 | Shininess = 0.17f; |
ba00aab7 |
260 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.030074f, 0.020069f, 0.013011f)); |
261 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.522522f, 0.318547f, 0.183064f)); |
61168418 |
262 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.98f, 1.0f, 0.60f) * 0.08f); |
263 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
189f85a3 |
264 | |
4e1bc39a |
265 | BSDF.Kd = Graphic3d_Vec3 (0.243137f, 0.243137f, 0.243137f); |
05aa616d |
266 | BSDF.Ks = Graphic3d_Vec4 (0.00392157f, 0.00392157f, 0.00392157f, 0.5f); |
67312b79 |
267 | |
44c7c33e |
268 | break; |
a966542b |
269 | case Graphic3d_NameOfMaterial_Chrome: |
4e1bc39a |
270 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
271 | |
4e1bc39a |
272 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
273 | Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.549585f, 0.556114f, 0.554256f)), 0.045f); |
189f85a3 |
274 | |
61168418 |
275 | Shininess = 0.90f; |
ba00aab7 |
276 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.033105f, 0.033105f, 0.041436f)); |
277 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.263273f, 0.263273f, 0.263273f)); |
4e1bc39a |
278 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.975f, 0.975f, 0.975f)); |
61168418 |
279 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
280 | break; |
a966542b |
281 | case Graphic3d_NameOfMaterial_Aluminum: |
4e1bc39a |
282 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
44c7c33e |
283 | |
4e1bc39a |
284 | BSDF = Graphic3d_BSDF::CreateMetallic (Graphic3d_Vec3 (0.985f, 0.985f, 0.985f), |
6e728f3b |
285 | Graphic3d_Fresnel::CreateSchlick (Graphic3d_Vec3 (0.913183f, 0.921494f, 0.924524f)), 0.045f); |
189f85a3 |
286 | |
61168418 |
287 | Shininess = 0.75f; |
ba00aab7 |
288 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.073239f, 0.073239f, 0.073239f)); |
289 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.318547f, 0.318547f, 0.318547f)); |
4e1bc39a |
290 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.910f, 0.920f, 0.920f)); |
61168418 |
291 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
292 | break; |
a966542b |
293 | case Graphic3d_NameOfMaterial_Neon: |
4e1bc39a |
294 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
295 | |
61168418 |
296 | Shininess = 0.05f; |
297 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
298 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
299 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.62f)); |
ba00aab7 |
300 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f, 0.787412f, 0.142892f)); |
4e1bc39a |
301 | |
302 | BSDF.Kd = Graphic3d_Vec3 (0.0f); |
05aa616d |
303 | BSDF.Ks = Graphic3d_Vec4 (0.5f, 0.5f, 0.5f, 0.f); |
4e1bc39a |
304 | BSDF.Le = Graphic3d_Vec3 (0.0f, 1.0f, 0.46f); |
05aa616d |
305 | BSDF.FresnelBase = Graphic3d_Fresnel::CreateDielectric (1.5f); |
44c7c33e |
306 | break; |
a966542b |
307 | case Graphic3d_NameOfMaterial_Obsidian: |
4e1bc39a |
308 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
309 | |
61168418 |
310 | Shininess = 0.3f; |
ba00aab7 |
311 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.004305f, 0.003936f, 0.005532f)); |
312 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.028053f, 0.024515f, 0.041436f)); |
4e1bc39a |
313 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.333f, 0.329f, 0.346f)); |
61168418 |
314 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
4e1bc39a |
315 | |
316 | BSDF.Kd = Graphic3d_Vec3 (0.023f, 0.f, 0.023f); |
05aa616d |
317 | BSDF.Ks = Graphic3d_Vec4 (0.0156863f, 0.0156863f, 0.0156863f, 0.1f); |
44c7c33e |
318 | break; |
a966542b |
319 | case Graphic3d_NameOfMaterial_Jade: |
4e1bc39a |
320 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
321 | |
61168418 |
322 | Shininess = 0.10f; |
ba00aab7 |
323 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.016338f, 0.040729f, 0.021493f)); |
324 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.252950f, 0.767769f, 0.354692f)); |
4e1bc39a |
325 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.316f, 0.316f, 0.316f)); |
61168418 |
326 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
4e1bc39a |
327 | |
05aa616d |
328 | BSDF.FresnelBase = Graphic3d_Fresnel::CreateDielectric (1.5f); |
4e1bc39a |
329 | BSDF.Kd = Graphic3d_Vec3 (0.208658f, 0.415686f, 0.218401f); |
05aa616d |
330 | BSDF.Ks = Graphic3d_Vec4 (0.611765f, 0.611765f, 0.611765f, 0.06f); |
44c7c33e |
331 | break; |
a966542b |
332 | case Graphic3d_NameOfMaterial_Charcoal: |
4e1bc39a |
333 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
334 | |
61168418 |
335 | Shininess = 0.01f; |
ba00aab7 |
336 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.003936f)); |
337 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.019607f)); |
61168418 |
338 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
339 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
4e1bc39a |
340 | |
341 | BSDF.Kd = Graphic3d_Vec3 (0.02f, 0.02f, 0.02f); |
05aa616d |
342 | BSDF.Ks = Graphic3d_Vec4 (0.1f, 0.1f, 0.1f, 0.3f); |
44c7c33e |
343 | break; |
a966542b |
344 | case Graphic3d_NameOfMaterial_Water: |
4e1bc39a |
345 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
346 | |
4e1bc39a |
347 | RefractionIndex = 1.33f; |
348 | BSDF = Graphic3d_BSDF::CreateGlass (Graphic3d_Vec3 (1.f), |
349 | Graphic3d_Vec3 (0.7f, 0.75f, 0.85f), |
350 | 0.05f, |
351 | RefractionIndex); |
352 | TransparencyCoef = 0.80f; |
353 | |
61168418 |
354 | Shininess = 0.90f; |
ba00aab7 |
355 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.170645f, 0.170645f, 0.191627f)); |
356 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.003936f, 0.003936f, 0.006571f)); |
4e1bc39a |
357 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.380f, 0.380f, 0.380f)); |
61168418 |
358 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
359 | break; |
a966542b |
360 | case Graphic3d_NameOfMaterial_Glass: |
4e1bc39a |
361 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
362 | |
4e1bc39a |
363 | RefractionIndex = 1.62f; |
364 | BSDF = Graphic3d_BSDF::CreateGlass (Graphic3d_Vec3 (1.f), |
365 | Graphic3d_Vec3 (0.75f, 0.95f, 0.9f), |
366 | 0.05f, |
367 | RefractionIndex); |
368 | TransparencyCoef = 0.80f; |
369 | |
61168418 |
370 | Shininess = 0.50f; |
ba00aab7 |
371 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.263273f, 0.290143f, 0.290143f)); |
372 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.003936f, 0.006571f, 0.006571f)); |
4e1bc39a |
373 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.920f, 0.920f, 0.920f)); |
61168418 |
374 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
375 | break; |
a966542b |
376 | case Graphic3d_NameOfMaterial_Diamond: |
4e1bc39a |
377 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
378 | |
4e1bc39a |
379 | RefractionIndex = 2.42f; |
380 | BSDF = Graphic3d_BSDF::CreateGlass (Graphic3d_Vec3 (1.f), |
381 | Graphic3d_Vec3 (0.95f, 0.95f, 0.95f), |
382 | 0.05f, |
383 | RefractionIndex); |
384 | TransparencyCoef = 0.80f; |
385 | |
61168418 |
386 | Shininess = 0.90f; |
ba00aab7 |
387 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.263273f)); |
388 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.010023f)); |
61168418 |
389 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.970f)); |
390 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
391 | break; |
6e728f3b |
392 | |
a966542b |
393 | case Graphic3d_NameOfMaterial_Transparent: |
4e1bc39a |
394 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
395 | |
4e1bc39a |
396 | RefractionIndex = 1.0f; |
6e728f3b |
397 | |
4e1bc39a |
398 | BSDF.Kd = Graphic3d_Vec3 (0.1f); |
399 | BSDF.Kt = Graphic3d_Vec3 (0.9f); |
05aa616d |
400 | BSDF.FresnelBase = Graphic3d_Fresnel::CreateConstant (0.0f); |
4e1bc39a |
401 | TransparencyCoef = 0.80f; |
402 | |
61168418 |
403 | Shininess = 0.90f; |
ba00aab7 |
404 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.263273f)); |
405 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.010023f)); |
61168418 |
406 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.970f)); |
407 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
4e1bc39a |
408 | break; |
a966542b |
409 | case Graphic3d_NameOfMaterial_UserDefined: |
2108d9a2 |
410 | MaterialType = Graphic3d_MATERIAL_PHYSIC; |
61168418 |
411 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.1f)); |
ba00aab7 |
412 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.6f)); |
61168418 |
413 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.2f)); |
414 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
415 | break; |
a966542b |
416 | case Graphic3d_NameOfMaterial_DEFAULT: |
61168418 |
417 | MaterialType = Graphic3d_MATERIAL_ASPECT; |
418 | |
ba00aab7 |
419 | Colors[Graphic3d_TOR_AMBIENT] = Quantity_Color (Graphic3d_Vec3 (0.15f)); |
61168418 |
420 | Colors[Graphic3d_TOR_DIFFUSE] = Quantity_Color (Graphic3d_Vec3 (0.65f)); |
421 | Colors[Graphic3d_TOR_SPECULAR] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
422 | Colors[Graphic3d_TOR_EMISSION] = Quantity_Color (Graphic3d_Vec3 (0.0f)); |
44c7c33e |
423 | break; |
424 | } |
67312b79 |
425 | PBRMaterial.SetBSDF (BSDF); |
44c7c33e |
426 | } |
7fd59977 |
427 | |
4e1bc39a |
428 | // ======================================================================= |
429 | // function : Graphic3d_MaterialAspect |
430 | // purpose : |
431 | // ======================================================================= |
432 | Graphic3d_MaterialAspect::Graphic3d_MaterialAspect() |
a966542b |
433 | : myRequestedMaterialName (Graphic3d_NameOfMaterial_DEFAULT) |
4e1bc39a |
434 | { |
a966542b |
435 | init (Graphic3d_NameOfMaterial_DEFAULT); |
4e1bc39a |
436 | } |
437 | |
438 | // ======================================================================= |
439 | // function : Graphic3d_MaterialAspect |
440 | // purpose : |
441 | // ======================================================================= |
442 | Graphic3d_MaterialAspect::Graphic3d_MaterialAspect (const Graphic3d_NameOfMaterial theName) |
443 | : myRequestedMaterialName (theName) |
444 | { |
445 | init (theName); |
446 | } |
447 | |
448 | // ======================================================================= |
449 | // function : init |
450 | // purpose : |
451 | // ======================================================================= |
452 | void Graphic3d_MaterialAspect::init (const Graphic3d_NameOfMaterial theName) |
453 | { |
454 | const RawMaterial& aMat = THE_MATERIALS[theName]; |
67312b79 |
455 | myBSDF = aMat.BSDF; |
456 | myPBRMaterial = aMat.PBRMaterial; |
457 | myStringName = aMat.StringName; |
4e1bc39a |
458 | myColors[Graphic3d_TOR_AMBIENT] = aMat.Colors[Graphic3d_TOR_AMBIENT]; |
459 | myColors[Graphic3d_TOR_DIFFUSE] = aMat.Colors[Graphic3d_TOR_DIFFUSE]; |
460 | myColors[Graphic3d_TOR_SPECULAR] = aMat.Colors[Graphic3d_TOR_SPECULAR]; |
461 | myColors[Graphic3d_TOR_EMISSION] = aMat.Colors[Graphic3d_TOR_EMISSION]; |
4e1bc39a |
462 | myTransparencyCoef = aMat.TransparencyCoef; |
463 | myRefractionIndex = aMat.RefractionIndex; |
464 | myShininess = aMat.Shininess; |
4e1bc39a |
465 | myMaterialType = aMat.MaterialType; |
466 | myMaterialName = theName; |
467 | myRequestedMaterialName = theName; |
4e1bc39a |
468 | } |
469 | |
44c7c33e |
470 | // ======================================================================= |
471 | // function : IncreaseShine |
472 | // purpose : |
473 | // ======================================================================= |
4e1bc39a |
474 | void Graphic3d_MaterialAspect::IncreaseShine (const Standard_ShortReal theDelta) |
44c7c33e |
475 | { |
4e1bc39a |
476 | const Standard_ShortReal anOldShine = myShininess; |
477 | myShininess = myShininess + myShininess * theDelta / 100.0f; |
478 | if (myShininess > 1.0f || myShininess < 0.0f) |
44c7c33e |
479 | { |
480 | myShininess = anOldShine; |
481 | } |
482 | } |
7fd59977 |
483 | |
44c7c33e |
484 | // ======================================================================= |
485 | // function : SetMaterialType |
486 | // purpose : |
487 | // ======================================================================= |
488 | void Graphic3d_MaterialAspect::SetMaterialType (const Graphic3d_TypeOfMaterial theType) |
489 | { |
490 | myMaterialType = theType; |
491 | if (theType != myMaterialType) |
492 | { |
4e1bc39a |
493 | setUserMaterial(); |
44c7c33e |
494 | } |
7fd59977 |
495 | } |
496 | |
44c7c33e |
497 | // ======================================================================= |
61168418 |
498 | // function : SetColor |
44c7c33e |
499 | // purpose : |
500 | // ======================================================================= |
61168418 |
501 | void Graphic3d_MaterialAspect::SetColor (const Quantity_Color& theColor) |
44c7c33e |
502 | { |
61168418 |
503 | if (myMaterialType == Graphic3d_MATERIAL_ASPECT) |
44c7c33e |
504 | { |
61168418 |
505 | return; |
44c7c33e |
506 | } |
7fd59977 |
507 | |
67312b79 |
508 | myPBRMaterial.SetColor (theColor); |
509 | |
61168418 |
510 | const RawMaterial& aSrcMat = THE_MATERIALS[myRequestedMaterialName]; |
511 | const Quantity_Color anAmbient((Graphic3d_Vec3 )theColor * aSrcMat.AmbientCoef); |
512 | const Quantity_Color aDiffuse ((Graphic3d_Vec3 )theColor * aSrcMat.DiffuseCoef); |
a966542b |
513 | if (myMaterialName != Graphic3d_NameOfMaterial_UserDefined |
61168418 |
514 | && (!myColors[Graphic3d_TOR_AMBIENT].IsEqual (anAmbient) |
515 | || !myColors[Graphic3d_TOR_DIFFUSE].IsEqual (aDiffuse))) |
44c7c33e |
516 | { |
4e1bc39a |
517 | setUserMaterial(); |
44c7c33e |
518 | } |
61168418 |
519 | myColors[Graphic3d_TOR_AMBIENT] = anAmbient; |
520 | myColors[Graphic3d_TOR_DIFFUSE] = aDiffuse; |
44c7c33e |
521 | } |
7fd59977 |
522 | |
44c7c33e |
523 | // ======================================================================= |
524 | // function : SetAmbientColor |
525 | // purpose : |
526 | // ======================================================================= |
527 | void Graphic3d_MaterialAspect::SetAmbientColor (const Quantity_Color& theColor) |
528 | { |
61168418 |
529 | if (myMaterialType == Graphic3d_MATERIAL_PHYSIC |
a966542b |
530 | && myMaterialName != Graphic3d_NameOfMaterial_UserDefined |
61168418 |
531 | && !myColors[Graphic3d_TOR_AMBIENT].IsEqual (theColor)) |
44c7c33e |
532 | { |
4e1bc39a |
533 | setUserMaterial(); |
44c7c33e |
534 | } |
61168418 |
535 | myColors[Graphic3d_TOR_AMBIENT] = theColor; |
7fd59977 |
536 | } |
537 | |
44c7c33e |
538 | // ======================================================================= |
539 | // function : SetDiffuseColor |
540 | // purpose : |
541 | // ======================================================================= |
542 | void Graphic3d_MaterialAspect::SetDiffuseColor (const Quantity_Color& theColor) |
543 | { |
61168418 |
544 | if (myMaterialType == Graphic3d_MATERIAL_PHYSIC |
a966542b |
545 | && myMaterialName != Graphic3d_NameOfMaterial_UserDefined |
61168418 |
546 | && !myColors[Graphic3d_TOR_DIFFUSE].IsEqual (theColor)) |
44c7c33e |
547 | { |
4e1bc39a |
548 | setUserMaterial(); |
44c7c33e |
549 | } |
61168418 |
550 | myColors[Graphic3d_TOR_DIFFUSE] = theColor; |
44c7c33e |
551 | } |
7fd59977 |
552 | |
44c7c33e |
553 | // ======================================================================= |
554 | // function : SetSpecularColor |
555 | // purpose : |
556 | // ======================================================================= |
557 | void Graphic3d_MaterialAspect::SetSpecularColor (const Quantity_Color& theColor) |
558 | { |
61168418 |
559 | if (myMaterialType == Graphic3d_MATERIAL_PHYSIC |
a966542b |
560 | && myMaterialName != Graphic3d_NameOfMaterial_UserDefined |
61168418 |
561 | && !myColors[Graphic3d_TOR_SPECULAR].IsEqual (theColor)) |
44c7c33e |
562 | { |
4e1bc39a |
563 | setUserMaterial(); |
44c7c33e |
564 | } |
61168418 |
565 | myColors[Graphic3d_TOR_SPECULAR] = theColor; |
44c7c33e |
566 | } |
7fd59977 |
567 | |
44c7c33e |
568 | // ======================================================================= |
569 | // function : SetEmissiveColor |
570 | // purpose : |
571 | // ======================================================================= |
572 | void Graphic3d_MaterialAspect::SetEmissiveColor (const Quantity_Color& theColor) |
573 | { |
61168418 |
574 | if (myMaterialType == Graphic3d_MATERIAL_PHYSIC |
a966542b |
575 | && myMaterialName != Graphic3d_NameOfMaterial_UserDefined |
61168418 |
576 | && !myColors[Graphic3d_TOR_EMISSION].IsEqual (theColor)) |
44c7c33e |
577 | { |
4e1bc39a |
578 | setUserMaterial(); |
44c7c33e |
579 | } |
61168418 |
580 | myColors[Graphic3d_TOR_EMISSION] = theColor; |
44c7c33e |
581 | } |
7fd59977 |
582 | |
44c7c33e |
583 | // ======================================================================= |
584 | // function : SetTransparency |
585 | // purpose : |
586 | // ======================================================================= |
4e1bc39a |
587 | void Graphic3d_MaterialAspect::SetTransparency (const Standard_ShortReal theValue) |
44c7c33e |
588 | { |
4e1bc39a |
589 | if (theValue < 0.0f |
590 | || theValue > 1.0f) |
44c7c33e |
591 | { |
9775fa61 |
592 | throw Graphic3d_MaterialDefinitionError("Bad value for SetTransparency < 0. or > 1.0"); |
44c7c33e |
593 | } |
7fd59977 |
594 | |
4e1bc39a |
595 | myTransparencyCoef = theValue; |
67312b79 |
596 | myPBRMaterial.SetAlpha (1.0f - theValue); |
7fd59977 |
597 | } |
598 | |
44c7c33e |
599 | // ======================================================================= |
600 | // function : SetRefractionIndex |
601 | // purpose : |
602 | // ======================================================================= |
4e1bc39a |
603 | void Graphic3d_MaterialAspect::SetRefractionIndex (const Standard_ShortReal theValue) |
44c7c33e |
604 | { |
4e1bc39a |
605 | if (theValue < 1.0f) |
44c7c33e |
606 | { |
9775fa61 |
607 | throw Graphic3d_MaterialDefinitionError("Bad value for refraction index < 1.0"); |
44c7c33e |
608 | } |
7fd59977 |
609 | |
4e1bc39a |
610 | myRefractionIndex = theValue; |
44c7c33e |
611 | } |
7fd59977 |
612 | |
44c7c33e |
613 | // ======================================================================= |
614 | // function : SetShininess |
615 | // purpose : |
616 | // ======================================================================= |
4e1bc39a |
617 | void Graphic3d_MaterialAspect::SetShininess (const Standard_ShortReal theValue) |
44c7c33e |
618 | { |
4e1bc39a |
619 | if (theValue < 0.0f |
620 | || theValue > 1.0f) |
44c7c33e |
621 | { |
9775fa61 |
622 | throw Graphic3d_MaterialDefinitionError("Bad value for Shininess < 0. or > 1.0"); |
44c7c33e |
623 | } |
7fd59977 |
624 | |
61168418 |
625 | if (myShininess != theValue) |
626 | { |
627 | myShininess = theValue; |
628 | setUserMaterial(); |
629 | } |
7fd59977 |
630 | } |
631 | |
44c7c33e |
632 | // ======================================================================= |
633 | // function : MaterialName |
634 | // purpose : |
635 | // ======================================================================= |
636 | Standard_CString Graphic3d_MaterialAspect::MaterialName (const Standard_Integer theRank) |
637 | { |
638 | if (theRank < 1 || theRank > NumberOfMaterials()) |
639 | { |
9775fa61 |
640 | throw Standard_OutOfRange("BAD index of material"); |
44c7c33e |
641 | } |
4e1bc39a |
642 | const RawMaterial& aMat = THE_MATERIALS[theRank - 1]; |
643 | return aMat.StringName; |
7fd59977 |
644 | } |
645 | |
44c7c33e |
646 | // ======================================================================= |
647 | // function : MaterialFromName |
648 | // purpose : |
649 | // ======================================================================= |
61168418 |
650 | Standard_Boolean Graphic3d_MaterialAspect::MaterialFromName (const Standard_CString theName, |
651 | Graphic3d_NameOfMaterial& theMat) |
ad3217cd |
652 | { |
653 | TCollection_AsciiString aName (theName); |
654 | aName.LowerCase(); |
655 | aName.Capitalize(); |
656 | const Standard_Integer aNbMaterials = Graphic3d_MaterialAspect::NumberOfMaterials(); |
61168418 |
657 | for (Standard_Integer aMatIter = 0; aMatIter <= aNbMaterials; ++aMatIter) |
ad3217cd |
658 | { |
4e1bc39a |
659 | const RawMaterial& aMat = THE_MATERIALS[aMatIter]; |
660 | if (aName == aMat.StringName) |
ad3217cd |
661 | { |
61168418 |
662 | theMat = Graphic3d_NameOfMaterial(aMatIter); |
663 | return Standard_True; |
ad3217cd |
664 | } |
665 | } |
666 | |
667 | // parse aliases |
668 | if (aName == "Plastic") // Plastified |
669 | { |
a966542b |
670 | theMat = Graphic3d_NameOfMaterial_Plastified; |
61168418 |
671 | return Standard_True; |
ad3217cd |
672 | } |
673 | else if (aName == "Shiny_plastic") // Shiny_plastified |
674 | { |
a966542b |
675 | theMat = Graphic3d_NameOfMaterial_ShinyPlastified; |
61168418 |
676 | return Standard_True; |
ad3217cd |
677 | } |
678 | else if (aName == "Plaster") // Plastered |
679 | { |
a966542b |
680 | theMat = Graphic3d_NameOfMaterial_Plastered; |
61168418 |
681 | return Standard_True; |
ad3217cd |
682 | } |
683 | else if (aName == "Satin") // Satined |
684 | { |
a966542b |
685 | theMat = Graphic3d_NameOfMaterial_Satin; |
61168418 |
686 | return Standard_True; |
ad3217cd |
687 | } |
688 | else if (aName == "Neon_gnc") // Ionized |
689 | { |
a966542b |
690 | theMat = Graphic3d_NameOfMaterial_Ionized; |
61168418 |
691 | return Standard_True; |
ad3217cd |
692 | } |
693 | else if (aName == "Neon_phc") // Neon |
694 | { |
a966542b |
695 | theMat = Graphic3d_NameOfMaterial_Neon; |
61168418 |
696 | return Standard_True; |
ad3217cd |
697 | } |
61168418 |
698 | return Standard_False; |
ad3217cd |
699 | } |
700 | |
44c7c33e |
701 | // ======================================================================= |
702 | // function : MaterialType |
703 | // purpose : |
704 | // ======================================================================= |
705 | Graphic3d_TypeOfMaterial Graphic3d_MaterialAspect::MaterialType (const Standard_Integer theRank) |
706 | { |
707 | if (theRank < 1 || theRank > NumberOfMaterials()) |
708 | { |
9775fa61 |
709 | throw Standard_OutOfRange("BAD index of material"); |
44c7c33e |
710 | } |
4e1bc39a |
711 | const RawMaterial& aMat = THE_MATERIALS[theRank - 1]; |
712 | return aMat.MaterialType; |
7fd59977 |
713 | } |
bc73b006 |
714 | |
715 | //======================================================================= |
716 | //function : DumpJson |
717 | //purpose : |
718 | //======================================================================= |
719 | void Graphic3d_MaterialAspect::DumpJson (Standard_OStream& theOStream, Standard_Integer theDepth) const |
720 | { |
721 | OCCT_DUMP_CLASS_BEGIN (theOStream, Graphic3d_MaterialAspect) |
722 | |
723 | OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myBSDF) |
724 | OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myPBRMaterial) |
725 | OCCT_DUMP_FIELD_VALUE_STRING (theOStream, myStringName) |
726 | |
727 | OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myColors[Graphic3d_TOR_AMBIENT]) |
728 | OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myColors[Graphic3d_TOR_DIFFUSE]) |
729 | OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myColors[Graphic3d_TOR_SPECULAR]) |
730 | OCCT_DUMP_FIELD_VALUES_DUMPED (theOStream, theDepth, &myColors[Graphic3d_TOR_EMISSION]) |
731 | |
732 | OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myTransparencyCoef) |
733 | OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myRefractionIndex) |
734 | OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myShininess) |
735 | |
736 | OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myMaterialType) |
737 | OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myMaterialName) |
738 | OCCT_DUMP_FIELD_VALUE_NUMERICAL (theOStream, myRequestedMaterialName) |
739 | } |