@@ -52,8 +52,30 @@ def __init__(self, name, is_default=False):
5252 self .ambient = [.2 , .2 , .2 , 1. ]
5353 self .specular = [0. , 0. , 0. , 1. ]
5454 self .emissive = [0. , 0. , 0. , 1. ]
55+ self .transparency = 1.0
5556 self .shininess = 0.
56- self .texture = None
57+ self .optical_density = 1.0
58+ # Multiple illumination models are available, per material. These are enumerated as follows:
59+ # 0. Color on and Ambient off
60+ # 1. Color on and Ambient on
61+ # 2. Highlight on
62+ # 3. Reflection on and Ray trace on
63+ # 4. Transparency: Glass on, Reflection: Ray trace on
64+ # 5. Reflection: Fresnel on and Ray trace on
65+ # 6. Transparency: Refraction on, Reflection: Fresnel off and Ray trace on
66+ # 7. Transparency: Refraction on, Reflection: Fresnel on and Ray trace on
67+ # 8. Reflection on and Ray trace off
68+ # 9. Transparency: Glass on, Reflection: Ray trace off
69+ # 10. Casts shadows onto invisible surfaces
70+ self .illumination_model = 0
71+
72+ self .texture = None # diffuse
73+ self .texture_ambient = None
74+ self .texture_specular_color = None
75+ self .texture_specular_highlight = None
76+ self .texture_alpha = None
77+ self .texture_bump = None
78+
5779 self .is_default = is_default
5880
5981 # Interleaved array of floats in GL_T2F_N3F_V3F format
@@ -62,11 +84,6 @@ def __init__(self, name, is_default=False):
6284
6385 self .gl_floats = None
6486
65- @property
66- def file (self ):
67- """File with full path"""
68- return os .path .join (self .path , self .name )
69-
7087 @property
7188 def has_normals (self ):
7289 return "N3F" in self .vertex_format
@@ -95,7 +112,7 @@ def pad_light(self, values):
95112
96113 def set_alpha (self , alpha ):
97114 """Set alpha/last value on all four lighting attributes."""
98- alpha = float ( alpha )
115+ self . transparency = alpha
99116 self .diffuse [3 ] = alpha
100117 self .ambient [3 ] = alpha
101118 self .specular [3 ] = alpha
@@ -116,6 +133,21 @@ def set_emissive(self, values=None):
116133 def set_texture (self , path ):
117134 self .texture = Texture (path )
118135
136+ def set_texture_ambient (self , path ):
137+ self .texture_ambient = Texture (path )
138+
139+ def set_texture_specular_color (self , path ):
140+ self .texture_specular_color = Texture (path )
141+
142+ def set_texture_specular_highlight (self , path ):
143+ self .texture_specular_highlight = Texture (path )
144+
145+ def set_texture_alpha (self , path ):
146+ self .texture_alpha = Texture (path )
147+
148+ def set_texture_bump (self , path ):
149+ self .texture_bump = Texture (path )
150+
119151 def unset_texture (self ):
120152 self .texture = None
121153
@@ -166,24 +198,57 @@ def parse_Ns(self):
166198
167199 @auto_consume
168200 def parse_d (self ):
169- self .this_material .set_alpha (self .values [1 ])
201+ """Transparency"""
202+ self .this_material .set_alpha (float (self .values [1 ]))
203+
204+ @auto_consume
205+ def parse_Tr (self ):
206+ """Transparency (alternative)"""
207+ self .this_material .set_alpha (1.0 - float (self .values [1 ]))
170208
171209 @auto_consume
172210 def parse_map_Kd (self ):
211+ """Diffuse map"""
173212 Kd = os .path .join (self .dir , " " .join (self .values [1 :]))
174213 self .this_material .set_texture (Kd )
175214
176215 @auto_consume
177- def parse_Ni (self ):
178- # unimplemented
179- pass
216+ def parse_map_Ka (self ):
217+ """Ambient map"""
218+ Kd = os .path .join (self .dir , " " .join (self .values [1 :]))
219+ self .this_material .set_texture_ambient (Kd )
180220
181221 @auto_consume
182- def parse_Tr (self ):
183- # unimplemented
184- pass
222+ def parse_map_Ks (self ):
223+ """Specular color map"""
224+ Kd = os .path .join (self .dir , " " .join (self .values [1 :]))
225+ self .this_material .set_texture_specular_color (Kd )
226+
227+ @auto_consume
228+ def parse_map_Ns (self ):
229+ """Specular color map"""
230+ Kd = os .path .join (self .dir , " " .join (self .values [1 :]))
231+ self .this_material .set_texture_specular_highlight (Kd )
232+
233+ @auto_consume
234+ def parse_map_d (self ):
235+ """Alpha map"""
236+ Kd = os .path .join (self .dir , " " .join (self .values [1 :]))
237+ self .this_material .set_texture_alpha (Kd )
238+
239+ @auto_consume
240+ def parse_map_bump (self ):
241+ """Bump map"""
242+ Kd = os .path .join (self .dir , " " .join (self .values [1 :]))
243+ self .this_material .set_texture_bump (Kd )
244+
245+ def parse_bump (self ):
246+ self .parse_map_bump ()
247+
248+ @auto_consume
249+ def parse_Ni (self ):
250+ self .this_material .optical_density = float (self .values [1 ])
185251
186252 @auto_consume
187253 def parse_illum (self ):
188- # unimplemented
189- pass
254+ self .this_material .illumination_model = float (self .values [1 ])
0 commit comments