comparison src/graphics.h.in @ 7832:e06fdf7ea647

Fix default value of patch::facelighting. Add scaler/graphics_xform utilities
author Michael Goffioul <michael.goffioul@gmail.com>
date Wed, 20 Feb 2008 16:22:42 +0100
parents 61aee739a4da
children 8ff92634982d
comparison
equal deleted inserted replaced
7831:c7925666f0bf 7832:e06fdf7ea647
213 return d; 213 return d;
214 } 214 }
215 215
216 virtual base_scaler* clone () const 216 virtual base_scaler* clone () const
217 { return new base_scaler (); } 217 { return new base_scaler (); }
218
219 virtual bool is_linear (void) const
220 { return false; }
218 }; 221 };
219 222
220 class lin_scaler : public base_scaler 223 class lin_scaler : public base_scaler
221 { 224 {
222 public: 225 public:
229 double scale (double d) const { return d; } 232 double scale (double d) const { return d; }
230 233
231 double unscale (double d) const { return d; } 234 double unscale (double d) const { return d; }
232 235
233 base_scaler* clone (void) const { return new lin_scaler (); } 236 base_scaler* clone (void) const { return new lin_scaler (); }
237
238 bool is_linear (void) const { return true; }
234 }; 239 };
235 240
236 class log_scaler : public base_scaler 241 class log_scaler : public base_scaler
237 { 242 {
238 public: 243 public:
289 double scale (double d) const 294 double scale (double d) const
290 { return rep->scale (d); } 295 { return rep->scale (d); }
291 296
292 double unscale (double d) const 297 double unscale (double d) const
293 { return rep->unscale (d); } 298 { return rep->unscale (d); }
299
300 bool is_linear (void) const
301 { return rep->is_linear (); }
294 302
295 scaler& operator = (const scaler& s) 303 scaler& operator = (const scaler& s)
296 { 304 {
297 if (rep) 305 if (rep)
298 { 306 {
2373 bool scale = true) const; 2381 bool scale = true) const;
2374 2382
2375 Matrix xscale (const Matrix& m) const { return sx.scale (m); } 2383 Matrix xscale (const Matrix& m) const { return sx.scale (m); }
2376 Matrix yscale (const Matrix& m) const { return sy.scale (m); } 2384 Matrix yscale (const Matrix& m) const { return sy.scale (m); }
2377 Matrix zscale (const Matrix& m) const { return sz.scale (m); } 2385 Matrix zscale (const Matrix& m) const { return sz.scale (m); }
2386
2387 Matrix scale (const Matrix& m) const
2388 {
2389 bool has_z = (m.columns () > 2);
2390
2391 if (sx.is_linear () && sy.is_linear ()
2392 && (! has_z || sz.is_linear ()))
2393 return m;
2394
2395 Matrix retval (m.dims ());
2396
2397 int r = m.rows ();
2398
2399 for (int i = 0; i < r; i++)
2400 {
2401 retval(i,0) = sx.scale (m(i,0));
2402 retval(i,1) = sy.scale (m(i,1));
2403 if (has_z)
2404 retval(i,2) = sz.scale (m(i,2));
2405 }
2406
2407 return retval;
2408 }
2378 2409
2379 private: 2410 private:
2380 Matrix xform; 2411 Matrix xform;
2381 Matrix xform_inv; 2412 Matrix xform_inv;
2382 scaler sx, sy, sz; 2413 scaler sx, sy, sz;
2865 array_property vertices , Matrix () 2896 array_property vertices , Matrix ()
2866 array_property vertexnormals , Matrix () 2897 array_property vertexnormals , Matrix ()
2867 radio_property normalmode , "{auto}|manual" 2898 radio_property normalmode , "{auto}|manual"
2868 color_property facecolor , "{flat}|none|interp" 2899 color_property facecolor , "{flat}|none|interp"
2869 double_property facealpha , 1.0 2900 double_property facealpha , 1.0
2870 radio_property facelighting , "{flat}|none|gouraud|phong" 2901 radio_property facelighting , "flat|{none}|gouraud|phong"
2871 color_property edgecolor , color_property (color_values (0, 0, 0), radio_values ("flat|none|interp")) 2902 color_property edgecolor , color_property (color_values (0, 0, 0), radio_values ("flat|none|interp"))
2872 double_property edgealpha , 1.0 2903 double_property edgealpha , 1.0
2873 radio_property edgelighting , "{none}|flat|gouraud|phong" 2904 radio_property edgelighting , "{none}|flat|gouraud|phong"
2874 radio_property backfacelighting , "{reverselit}|unlit|lit" 2905 radio_property backfacelighting , "{reverselit}|unlit|lit"
2875 double_property ambientstrength , 0.3 2906 double_property ambientstrength , 0.3