author | Radek Brich <radek.brich@devl.cz> |
Thu, 15 May 2008 00:07:25 +0200 | |
branch | pyrit |
changeset 96 | 9eb71e76c7fd |
parent 94 | 4c8abb8977dc |
child 98 | 64638385798a |
permissions | -rw-r--r-- |
94 | 1 |
/** |
2 |
* @file material.h |
|
3 |
* @brief Material and Texture classes |
|
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
4 |
* |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
5 |
* This file is part of Pyrit Ray Tracer. |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
6 |
* |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
7 |
* Copyright 2006, 2007, 2008 Radek Brich |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
8 |
* |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
9 |
* Permission is hereby granted, free of charge, to any person obtaining a copy |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
10 |
* of this software and associated documentation files (the "Software"), to deal |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
11 |
* in the Software without restriction, including without limitation the rights |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
12 |
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
13 |
* copies of the Software, and to permit persons to whom the Software is |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
14 |
* furnished to do so, subject to the following conditions: |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
15 |
* |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
16 |
* The above copyright notice and this permission notice shall be included in |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
17 |
* all copies or substantial portions of the Software. |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
18 |
* |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
19 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
20 |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
21 |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
22 |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
23 |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
24 |
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
25 |
* THE SOFTWARE. |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
26 |
*/ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
27 |
|
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
28 |
#ifndef MATERIAL_H |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
29 |
#define MATERIAL_H |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
30 |
|
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
31 |
#include "common.h" |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
32 |
#include "vector.h" |
88
f7edb3b90816
merge pixmap handling from sampler, material.h and ccdemos's image module to new Pixmap class
Radek Brich <radek.brich@devl.cz>
parents:
82
diff
changeset
|
33 |
#include "pixmap.h" |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
34 |
|
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
35 |
/** |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
36 |
* perlin noise |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
37 |
*/ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
38 |
Float perlin(Float x, Float y, Float z); |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
39 |
|
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
40 |
/** |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
41 |
* general texture |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
42 |
*/ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
43 |
class Texture |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
44 |
{ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
45 |
public: |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
46 |
virtual ~Texture() {}; |
91 | 47 |
virtual Colour evaluate(const Vector &point) = 0; |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
48 |
}; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
49 |
|
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
50 |
/** |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
51 |
* general colour map |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
52 |
*/ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
53 |
class ColourMap |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
54 |
{ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
55 |
public: |
82
930a2d3ecaed
prepare structures for packet tracing
Radek Brich <radek.brich@devl.cz>
parents:
81
diff
changeset
|
56 |
virtual ~ColourMap() {}; |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
57 |
virtual Colour map(const Float &val) = 0; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
58 |
}; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
59 |
|
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
60 |
/** |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
61 |
* linear colour map |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
62 |
* maps value lineary between two colours |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
63 |
*/ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
64 |
class LinearColourMap: public ColourMap |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
65 |
{ |
93 | 66 |
Colour col, cdiff; |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
67 |
public: |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
68 |
LinearColourMap(const Colour &clow, const Colour &chigh): |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
69 |
col(clow), cdiff(chigh-clow) {}; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
70 |
Colour map(const Float &val) { return col + cdiff*val; }; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
71 |
}; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
72 |
|
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
73 |
/** |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
74 |
* bound colour map |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
75 |
* initialize with two arrays, bounds and colours, of same size |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
76 |
* bounds must contain numbers between 0 and 1 in rising order, |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
77 |
* last number should be larger than max 'val' |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
78 |
* colours are mapped to slices between bounds (with zero being |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
79 |
* implicit bottom bound) |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
80 |
*/ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
81 |
class BoundColourMap: public ColourMap |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
82 |
{ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
83 |
Float *bounds; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
84 |
Colour *colours; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
85 |
public: |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
86 |
BoundColourMap(Float *abounds, Colour *acolours): |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
87 |
bounds(abounds), colours(acolours) {}; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
88 |
Colour map(const Float &val) |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
89 |
{ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
90 |
Float *b = bounds; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
91 |
Colour *c = colours; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
92 |
while (val > *b) |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
93 |
{ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
94 |
b++; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
95 |
c++; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
96 |
} |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
97 |
return *c; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
98 |
}; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
99 |
}; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
100 |
|
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
101 |
/** |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
102 |
* general texture mapping |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
103 |
*/ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
104 |
class TextureMap |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
105 |
{ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
106 |
protected: |
91 | 107 |
Vector center; |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
108 |
Float invsize; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
109 |
public: |
91 | 110 |
TextureMap(const Vector &acenter, const Float &size): |
92
9af5c039b678
add MSVC compiler support, make it default for Windows
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
111 |
center(acenter), invsize(1.0f/size) {}; |
82
930a2d3ecaed
prepare structures for packet tracing
Radek Brich <radek.brich@devl.cz>
parents:
81
diff
changeset
|
112 |
virtual ~TextureMap() {}; |
96
9eb71e76c7fd
added Python binding for material.h classes
Radek Brich <radek.brich@devl.cz>
parents:
94
diff
changeset
|
113 |
virtual void map(const Vector &point, Float &u, Float &v) const = 0; |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
114 |
}; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
115 |
|
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
116 |
/** |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
117 |
* planar mapping |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
118 |
*/ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
119 |
class PlanarMap: public TextureMap |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
120 |
{ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
121 |
public: |
91 | 122 |
PlanarMap(const Vector &acenter, const Float &size): |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
123 |
TextureMap(acenter, size) {}; |
96
9eb71e76c7fd
added Python binding for material.h classes
Radek Brich <radek.brich@devl.cz>
parents:
94
diff
changeset
|
124 |
void map(const Vector &point, Float &u, Float &v) const |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
125 |
{ |
91 | 126 |
const Vector p = point - center; |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
127 |
u = p.x*invsize; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
128 |
v = p.y*invsize; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
129 |
}; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
130 |
}; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
131 |
|
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
132 |
/** |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
133 |
* cubic mapping |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
134 |
*/ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
135 |
class CubicMap: public TextureMap |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
136 |
{ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
137 |
public: |
91 | 138 |
CubicMap(const Vector &acenter, const Float &size): |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
139 |
TextureMap(acenter, size) {}; |
96
9eb71e76c7fd
added Python binding for material.h classes
Radek Brich <radek.brich@devl.cz>
parents:
94
diff
changeset
|
140 |
void map(const Vector &point, Float &u, Float &v) const |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
141 |
{ |
91 | 142 |
const Vector p = point - center; |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
143 |
if (fabs(p.x) > fabs(p.y)) |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
144 |
{ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
145 |
if (fabs(p.x) > fabs(p.z)) |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
146 |
{ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
147 |
if (p.x < 0) |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
148 |
u = -p.y; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
149 |
else |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
150 |
u = p.y; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
151 |
v = p.z; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
152 |
} |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
153 |
else |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
154 |
{ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
155 |
if (p.z < 0) |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
156 |
u = -p.x; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
157 |
else |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
158 |
u = p.x; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
159 |
v = p.y; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
160 |
} |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
161 |
} |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
162 |
else |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
163 |
{ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
164 |
if (fabs(p.y) > fabs(p.z)) |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
165 |
{ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
166 |
if (p.y < 0) |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
167 |
u = -p.x; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
168 |
else |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
169 |
u = p.x; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
170 |
v = p.z; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
171 |
} |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
172 |
else |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
173 |
{ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
174 |
if (p.z < 0) |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
175 |
u = -p.x; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
176 |
else |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
177 |
u = p.x; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
178 |
v = p.y; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
179 |
} |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
180 |
} |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
181 |
u = u*invsize; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
182 |
v = v*invsize; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
183 |
}; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
184 |
}; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
185 |
|
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
186 |
/** |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
187 |
* cylindrical mapping |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
188 |
*/ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
189 |
class CylinderMap: public TextureMap |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
190 |
{ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
191 |
public: |
91 | 192 |
CylinderMap(const Vector &acenter, const Float &size): |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
193 |
TextureMap(acenter, size) {}; |
96
9eb71e76c7fd
added Python binding for material.h classes
Radek Brich <radek.brich@devl.cz>
parents:
94
diff
changeset
|
194 |
void map(const Vector &point, Float &u, Float &v) const |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
195 |
{ |
91 | 196 |
const Vector p = point - center; |
93 | 197 |
u = ( PI + atan2(p.z, p.x) ) * invsize; |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
198 |
v = p.y * invsize; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
199 |
}; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
200 |
}; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
201 |
|
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
202 |
/** |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
203 |
* spherical mapping |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
204 |
*/ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
205 |
class SphereMap: public TextureMap |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
206 |
{ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
207 |
public: |
91 | 208 |
SphereMap(const Vector &acenter, const Float &size): |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
209 |
TextureMap(acenter, size) {}; |
96
9eb71e76c7fd
added Python binding for material.h classes
Radek Brich <radek.brich@devl.cz>
parents:
94
diff
changeset
|
210 |
void map(const Vector &point, Float &u, Float &v) const |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
211 |
{ |
91 | 212 |
const Vector p = point - center; |
93 | 213 |
u = ( PI + atan2(p.z, p.x) ) * invsize; |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
214 |
v = acos(p.y / p.mag()) * invsize; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
215 |
}; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
216 |
}; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
217 |
|
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
218 |
/** |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
219 |
* general 2D texture |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
220 |
*/ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
221 |
class Texture2D: public Texture |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
222 |
{ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
223 |
protected: |
96
9eb71e76c7fd
added Python binding for material.h classes
Radek Brich <radek.brich@devl.cz>
parents:
94
diff
changeset
|
224 |
const TextureMap *map; |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
225 |
public: |
96
9eb71e76c7fd
added Python binding for material.h classes
Radek Brich <radek.brich@devl.cz>
parents:
94
diff
changeset
|
226 |
Texture2D(const TextureMap *amap): map(amap) {}; |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
227 |
}; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
228 |
|
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
229 |
/** |
81
9dbb9c8c115b
add 2D pixmap texture class
Radek Brich <radek.brich@devl.cz>
parents:
80
diff
changeset
|
230 |
* 2D image texture |
9dbb9c8c115b
add 2D pixmap texture class
Radek Brich <radek.brich@devl.cz>
parents:
80
diff
changeset
|
231 |
*/ |
9dbb9c8c115b
add 2D pixmap texture class
Radek Brich <radek.brich@devl.cz>
parents:
80
diff
changeset
|
232 |
class ImageTexture: public Texture2D |
9dbb9c8c115b
add 2D pixmap texture class
Radek Brich <radek.brich@devl.cz>
parents:
80
diff
changeset
|
233 |
{ |
96
9eb71e76c7fd
added Python binding for material.h classes
Radek Brich <radek.brich@devl.cz>
parents:
94
diff
changeset
|
234 |
const Pixmap *pixmap; |
81
9dbb9c8c115b
add 2D pixmap texture class
Radek Brich <radek.brich@devl.cz>
parents:
80
diff
changeset
|
235 |
public: |
96
9eb71e76c7fd
added Python binding for material.h classes
Radek Brich <radek.brich@devl.cz>
parents:
94
diff
changeset
|
236 |
ImageTexture(const TextureMap *tmap, const Pixmap *image): |
81
9dbb9c8c115b
add 2D pixmap texture class
Radek Brich <radek.brich@devl.cz>
parents:
80
diff
changeset
|
237 |
Texture2D(tmap), pixmap(image) {}; |
91 | 238 |
Colour evaluate(const Vector &point) |
81
9dbb9c8c115b
add 2D pixmap texture class
Radek Brich <radek.brich@devl.cz>
parents:
80
diff
changeset
|
239 |
{ |
9dbb9c8c115b
add 2D pixmap texture class
Radek Brich <radek.brich@devl.cz>
parents:
80
diff
changeset
|
240 |
Float u,v; |
9dbb9c8c115b
add 2D pixmap texture class
Radek Brich <radek.brich@devl.cz>
parents:
80
diff
changeset
|
241 |
map->map(point, u,v); |
92
9af5c039b678
add MSVC compiler support, make it default for Windows
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
242 |
u = u - 0.5f; |
81
9dbb9c8c115b
add 2D pixmap texture class
Radek Brich <radek.brich@devl.cz>
parents:
80
diff
changeset
|
243 |
u -= floor(u); |
92
9af5c039b678
add MSVC compiler support, make it default for Windows
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
244 |
v = -(v - 0.5f); |
81
9dbb9c8c115b
add 2D pixmap texture class
Radek Brich <radek.brich@devl.cz>
parents:
80
diff
changeset
|
245 |
v -= floor(v); |
82
930a2d3ecaed
prepare structures for packet tracing
Radek Brich <radek.brich@devl.cz>
parents:
81
diff
changeset
|
246 |
return pixmap->get((int)(u*pixmap->getWidth()), (int)(v*pixmap->getHeight())); |
81
9dbb9c8c115b
add 2D pixmap texture class
Radek Brich <radek.brich@devl.cz>
parents:
80
diff
changeset
|
247 |
}; |
9dbb9c8c115b
add 2D pixmap texture class
Radek Brich <radek.brich@devl.cz>
parents:
80
diff
changeset
|
248 |
}; |
9dbb9c8c115b
add 2D pixmap texture class
Radek Brich <radek.brich@devl.cz>
parents:
80
diff
changeset
|
249 |
|
9dbb9c8c115b
add 2D pixmap texture class
Radek Brich <radek.brich@devl.cz>
parents:
80
diff
changeset
|
250 |
/** |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
251 |
* 2D checkers texture |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
252 |
*/ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
253 |
class CheckersTexture: public Texture2D |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
254 |
{ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
255 |
ColourMap *colourmap; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
256 |
public: |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
257 |
CheckersTexture(TextureMap *tmap, ColourMap *cmap): |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
258 |
Texture2D(tmap), colourmap(cmap) {}; |
91 | 259 |
Colour evaluate(const Vector &point) |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
260 |
{ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
261 |
Float u,v, val; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
262 |
map->map(point, u,v); |
92
9af5c039b678
add MSVC compiler support, make it default for Windows
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
263 |
val = 0.5f*(floor(0.5f + u - floor(u)) + floor(0.5f + v - floor(v))); |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
264 |
return colourmap->map(val); |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
265 |
}; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
266 |
}; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
267 |
|
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
268 |
/** |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
269 |
* 3D perlin cloud texture |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
270 |
*/ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
271 |
class CloudTexture: public Texture |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
272 |
{ |
93 | 273 |
ColourMap *colourmap; |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
274 |
Float detail; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
275 |
public: |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
276 |
CloudTexture(const Float &adetail, ColourMap *cmap): |
93 | 277 |
colourmap(cmap), detail(adetail) {}; |
91 | 278 |
Colour evaluate(const Vector &point) |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
279 |
{ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
280 |
Float sum = 0.0; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
281 |
for (int i = 1; i < detail; i++) |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
282 |
sum += fabs(perlin(point.x*i, point.y*i, point.z*i))/i; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
283 |
//Float value = sinf(point.x + sum)/2 + 0.5; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
284 |
return colourmap->map(sum); |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
285 |
}; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
286 |
}; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
287 |
|
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
288 |
/** |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
289 |
* material |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
290 |
*/ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
291 |
class Material |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
292 |
{ |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
293 |
public: |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
294 |
Colour colour; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
295 |
Texture *texture; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
296 |
Float ambient, diffuse, specular, shininess; // Phong constants |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
297 |
Float reflectivity; // how much reflective is the surface |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
298 |
Float transmissivity, refract_index; // part of light which can be refracted; index of refraction |
93 | 299 |
int smooth; // triangle smoothing |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
300 |
|
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
301 |
Material(const Colour &acolour): colour(acolour), texture(NULL), smooth(false) |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
302 |
{ |
92
9af5c039b678
add MSVC compiler support, make it default for Windows
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
303 |
ambient = 0.2f; |
9af5c039b678
add MSVC compiler support, make it default for Windows
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
304 |
diffuse = 0.8f; |
9af5c039b678
add MSVC compiler support, make it default for Windows
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
305 |
specular = 0.2f; |
9af5c039b678
add MSVC compiler support, make it default for Windows
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
306 |
shininess = 0.5f; |
9af5c039b678
add MSVC compiler support, make it default for Windows
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
307 |
reflectivity = 0.2f; |
9af5c039b678
add MSVC compiler support, make it default for Windows
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
308 |
transmissivity = 0.0f; |
9af5c039b678
add MSVC compiler support, make it default for Windows
Radek Brich <radek.brich@devl.cz>
parents:
91
diff
changeset
|
309 |
refract_index = 1.3f; |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
310 |
} |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
311 |
|
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
312 |
void setPhong(const Float amb, const Float dif, const Float spec, const Float shin) |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
313 |
{ ambient = amb; diffuse = dif; specular = spec; shininess = shin; }; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
314 |
void setReflectivity(const Float refl) { reflectivity = refl; }; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
315 |
void setTransmissivity(const Float trans, const Float rindex) |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
316 |
{ transmissivity = trans; refract_index = rindex; }; |
93 | 317 |
void setSmooth(int sm) { smooth = sm; }; |
80
907929fa9b59
remove forgotten noise.h includes
Radek Brich <radek.brich@devl.cz>
parents:
79
diff
changeset
|
318 |
void setTexture(Texture *tex) { texture = tex; }; |
79
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
319 |
}; |
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
320 |
|
062b1c4143f7
material and texture classes moved to material.(cc,h)
Radek Brich <radek.brich@devl.cz>
parents:
diff
changeset
|
321 |
#endif |