Point Cloud Library (PCL)
1.10.0
pcl
surface
3rdparty
opennurbs
opennurbs_texture.h
1
/* $NoKeywords: $ */
2
/*
3
//
4
// Copyright (c) 1993-2012 Robert McNeel & Associates. All rights reserved.
5
// OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert
6
// McNeel & Associates.
7
//
8
// THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
9
// ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF
10
// MERCHANTABILITY ARE HEREBY DISCLAIMED.
11
//
12
// For complete openNURBS copyright information see <http://www.opennurbs.org>.
13
//
14
////////////////////////////////////////////////////////////////
15
*/
16
17
////////////////////////////////////////////////////////////////
18
//
19
// defines ON_Color and ON_Material
20
//
21
////////////////////////////////////////////////////////////////
22
23
#if !defined(OPENNURBS_TEXTURE_INC_)
24
#define OPENNURBS_TEXTURE_INC_
25
26
///////////////////////////////////////////////////////////////////////////////
27
//
28
// Class ON_Texture
29
//
30
31
class
ON_CLASS
ON_Texture
:
public
ON_Object
32
{
33
public
:
34
ON_OBJECT_DECLARE(
ON_Texture
);
35
36
ON_Texture
();
37
~
ON_Texture
();
38
39
// default copy constructor and operator= work fine
40
41
42
// overrides virtual ON_Object::IsValid
43
ON_BOOL32
IsValid
(
ON_TextLog
* text_log = NULL )
const
;
44
45
// overrides virtual ON_Object::Dump
46
void
Dump
(
ON_TextLog
& )
const
;
47
48
// overrides virtual ON_Object::SizeOf
49
unsigned
int
SizeOf
()
const
;
50
51
// overrides virtual ON_Object::Write
52
ON_BOOL32
Write
(
53
ON_BinaryArchive
& binary_archive
54
)
const
;
55
56
// overrides virtual ON_Object::Read
57
ON_BOOL32
Read
(
58
ON_BinaryArchive
& binary_archive
59
);
60
61
void
Default();
62
63
int
Compare(
const
ON_Texture
& other )
const
;
64
65
/*
66
Description:
67
Reverses the texture in the specified direction.
68
Parameters:
69
dir - [in] 0 = reverse "u", 1 = reverse "v", 2 = reverse "w".
70
Remarks:
71
Modifes m_uvw so that the spedified direction transforms
72
the texture coordinate t to 1-t.
73
Returns:
74
True if input is valid.
75
*/
76
bool
ReverseTextureCoordinate(
int
dir );
77
78
/*
79
Description:
80
Swaps the specified texture coordinates.
81
Parameters:
82
i - [in]
83
j - [in] (0 <= i, j <= 3 and i != j)
84
Remarks:
85
Modifes m_uvw so that the specified texture coordinates are swapped.
86
Returns:
87
True if input is valid.
88
*/
89
bool
SwapTextureCoordinate(
int
i,
int
j );
90
91
/*
92
Description:
93
Tiles the specified texture coordinates.
94
Parameters:
95
dir - [in] 0 = reverse "u", 1 = reverse "v", 2 = reverse "w".
96
count - [in] number of tiles (can be negative)
97
offset - [in] offset of the tile (can be any number)
98
Remarks:
99
Modifes m_uvw so that the specified texture coordinate is
100
tiled.
101
Returns:
102
True if input is valid.
103
*/
104
bool
TileTextureCoordinate(
int
dir,
double
count,
double
offset );
105
106
/*
107
Description:
108
Examines the m_uvw matrix and harvests tiling constants.
109
Parameters:
110
dir - [in] 0 = reverse "u", 1 = reverse "v", 2 = reverse "w".
111
count - [out] number of tiles
112
offset - [out] offset of the tile
113
Returns:
114
True if if the m_uvw matrix had entries that were compatible
115
with tiling.
116
*/
117
bool
IsTiled(
int
dir,
double
* count,
double
* offset )
const
;
118
119
120
ON_UUID
m_texture_id
;
121
122
// list of pre-defined channel ids
123
enum
MAPPING_CHANNEL
124
{
125
tc_channel = 0,
// Use the texture coordinate values
126
// currently on the geometric object.
127
default_channel = 1,
// Use either default mapping, or the "Custom"
128
// mapping applied to the object
129
srfp_channel = 0xFFFFFFFE,
// Use surface parameterization.
130
emap_channel = 0xFFFFFFFF
// Environment map the geometric object.
131
};
132
133
// If the m_mapping_channel_id value is one of the built-in
134
// mappings listed in the MAPPING_CHANNEL enum, then that
135
// mapping is used. Otherwise, if an object has rendering
136
// attributes with an ON_MappingChannel entry that has a
137
// matching m_mapping_channel_id value, then the mapping
138
// identified by ON_MappingChannel::m_mapping_id is used.
139
// A value of zero means no mapping is supplied
140
// and the texture coordinates on the mesh are
141
// used.
142
int
m_mapping_channel_id
;
143
144
// Bitmap filename
145
// During runtime, m_filename is the absolute path to the
146
// file in use. If m_filename_bRelativePath is true, then
147
// the value saved in the 3dm archive will be a relative path.
148
// When m_filename_bRelativePath is true, user interface
149
// should display a relative path.
150
ON_wString
m_filename
;
151
bool
m_filename_bRelativePath
;
152
153
// If false, texture is off and should be ignored.
154
// The intended use is to allow people to turn textures
155
// on and off without have to create/destroy or change
156
// other texture settings.
157
bool
m_bOn
;
158
159
// do not change TYPE enum values - they are saved in 3dm files.
160
// The "TYPE" setting controls how the pixels in the bitmap
161
// are interpreted.
162
enum
TYPE
163
{
164
no_texture_type = 0,
165
166
bitmap_texture = 1,
// "standard" image texture.
167
bump_texture = 2,
// bump map - see m_bump_scale comment
168
transparency_texture = 3,
// value = alpha (see m_tranparancy_id)
169
170
// OBSOLETE - set m_mapping_channel_id = ON_MappingChannel::emap_mapping
171
emap_texture = 86,
// spherical environment mapping.
172
173
force_32bit_texture_type = 0xFFFFFFFF
174
};
175
176
TYPE
m_type
;
177
178
// m_mode determines how the texture is
179
// do not change MODE enum values - they are saved in 3dm files.
180
enum
MODE
181
{
182
no_texture_mode = 0,
183
modulate_texture = 1,
// modulate with material diffuse color
184
decal_texture = 2,
// decal
185
blend_texture = 3,
// blend texture with others in the material
186
// To "add" a texture, set m_blend_amount = +1
187
// To "subtract" a texture, set m_blend_amount = -1
188
189
force_32bit_texture_mode = 0xFFFFFFFF
190
};
191
192
MODE
m_mode
;
193
194
enum
FILTER
195
{
196
nearest_filter = 0,
// nearest texture pixel is used
197
linear_filter = 1,
// weighted average of corresponding texture pixels
198
199
force_32bit_texture_filter = 0xFFFFFFFF
200
};
201
202
// The value of m_minfilter determines how the color
203
// of the image pixel is calculated when the image pixel
204
// corresponds to multiple texture bitmap pixels.
205
FILTER
m_minfilter
;
206
207
// The magfilter setting controls how the color
208
// of the image pixel is calculated when the image pixel
209
// corresponds to a fraction of a texture bitmap pixel.
210
FILTER
m_magfilter
;
211
212
enum
WRAP
213
{
214
repeat_wrap = 0,
215
clamp_wrap = 1,
216
217
force_32bit_texture_wrap = 0xFFFFFFFF
218
};
219
220
WRAP
m_wrapu
;
221
WRAP
m_wrapv
;
222
WRAP
m_wrapw
;
223
224
// Texture coordinate transformation.
225
bool
m_bApply_uvw
;
// true if m_uvw is active.
226
ON_Xform
m_uvw
;
227
228
// If ON_UNSET_COLOR != m_border_color, then this color
229
// is used when the texture coordinates are <=0 or >=1
230
// and the m_wrap* value is clamp_wrap.
231
ON_Color
m_border_color
;
232
233
// This field is used for textures with type
234
// bitmap_texture that reference bitmap files that do
235
// not have an alpha channel and is used to set
236
// runtime alpha values. It needs to be parsed when the
237
// texture is loaded and can be ignored at runtime.
238
//
239
// If ON_UNSET_COLOR != m_transparent_color, then
240
// a pixel in the bitmap file with a matching RGB
241
// value is assigned the alpha value (ON_Color::Alpha)
242
// in m_transparent_color. The intended use is
243
// for non-rectangular decals defined by RGB bitmaps in
244
// files that don't save an alpha channel.
245
//
246
// For example if the decal is a red number 7 with a
247
// white background, then you would set m_transparent_color's
248
// RGB to white and its A to zero.
249
ON_Color
m_transparent_color
;
250
251
// This field is used for textures with type
252
// bitmap_texture that reference bitmap files that do
253
// not have an alpha channel and is used to set
254
// runtime alpha values. It needs to be parsed when the
255
// texture is loaded and can be ignored at runtime.
256
//
257
// If m_transparency_id is not nil, it is the id of another
258
// texture in the ON_Material.m_textures[] array that has
259
// type m_transparency_texture. The runtime bitmap_texture's
260
// alpha is set to (255-max(R,G,B)) (the "value" in the hue,
261
// saturation,value sense) of the correspondeing
262
// transparency_texture pixel.
263
//
264
// For example, if you had a bitmap texuture that was green
265
// with purple dots saved in a RGB .bmp file and you wanted
266
// the purple dots to be semi-transparent, you could create
267
// another bitmap that was black, where the original was green,
268
// and gray, where the original was purple, have an
269
// transparency_texture reference the white/gray bitmap,
270
// and have the bitmap_texture's m_transparency_id
271
// reference the transparency map.
272
ON_UUID
m_transparency_texture_id
;
273
274
// If the m_type is bump_texture, the height of the
275
// bump is m_bump_scale.ParameterAt(value), where
276
// value is in the HSV sense and normalized
277
// (black=0, white=1). The interval can be
278
// decreasing.
279
ON_Interval
m_bump_scale
;
280
281
// If the m_mode is blend_texture, then m_blend_A[]
282
// and m_blend_RGB[] determine the blending function.
283
// new alpha = m_blend_constant_A
284
// + m_blend_A[0]*(current alpha)
285
// + m_blend_A[1]*(texture alpha)
286
// + m_blend_A[2]*min(current alpha,texture alpha)
287
// + m_blend_A[3]*max(current alpha,texture alpha)
288
// new rgb = m_blend_constant_RGB
289
// + m_blend_RGB[0]*(current RGB)
290
// + m_blend_RGB[1]*(texture RGB)
291
// + m_blend_RGB[2]*min(current RGB,texture RGB)
292
// + m_blend_RGB[3]*max(current RGB,texture RGB)
293
// Results are clamped to handle underflow or overflow.
294
double
m_blend_constant_A
;
295
double
m_blend_A[4];
296
ON_Color
m_blend_constant_RGB
;
297
double
m_blend_RGB[4];
298
299
// If an ON_Material m_textures[] array has more than
300
// one texture, the textures are blended, and the textures
301
// have different m_blend_order values, the the texture
302
// with the smaller m_blend_order is first.
303
int
m_blend_order
;
304
305
// Applications use the m_runtime_ptr_id and m_runtime_ptr fields
306
// to cached runtime bitmaps. If either the id or the pointer
307
// are non-zero, then you cannot use them. If you hang something
308
// on the pointer, then set the id to something unique to
309
// prevent others from messing with it.
310
ON_UUID
m_runtime_ptr_id
;
311
const
void
*
m_runtime_ptr
;
312
313
static
TYPE
TypeFromInt(
int
i );
314
static
MODE
ModeFromInt(
int
i );
315
static
FILTER
FilterFromInt(
int
i );
316
static
WRAP
WrapFromInt(
int
i );
317
};
318
319
#if defined(ON_DLL_TEMPLATE)
320
// This stuff is here because of a limitation in the way Microsoft
321
// handles templates and DLLs. See Microsoft's knowledge base
322
// article ID Q168958 for details.
323
#pragma warning( push )
324
#pragma warning( disable : 4231 )
325
ON_DLL_TEMPLATE
template
class
ON_CLASS
ON_ClassArray<ON_Texture>
;
326
ON_DLL_TEMPLATE
template
class
ON_CLASS
ON_ObjectArray<ON_Texture>
;
327
#pragma warning( pop )
328
#endif
329
330
#endif
331
ON_Texture::m_runtime_ptr_id
ON_UUID m_runtime_ptr_id
Definition:
opennurbs_texture.h:310
ON_Interval
Definition:
opennurbs_point.h:48
ON_Texture::m_minfilter
FILTER m_minfilter
Definition:
opennurbs_texture.h:205
ON_Texture::m_wrapw
WRAP m_wrapw
Definition:
opennurbs_texture.h:222
ON_ClassArray< ON_Texture >
ON_Texture::m_mapping_channel_id
int m_mapping_channel_id
Definition:
opennurbs_texture.h:142
ON_Texture::TYPE
TYPE
Definition:
opennurbs_texture.h:162
ON_Object
Definition:
opennurbs_object.h:376
ON_Texture::m_wrapu
WRAP m_wrapu
Definition:
opennurbs_texture.h:220
ON_Texture::MODE
MODE
Definition:
opennurbs_texture.h:180
ON_Texture::FILTER
FILTER
Definition:
opennurbs_texture.h:194
ON_Texture::MAPPING_CHANNEL
MAPPING_CHANNEL
Definition:
opennurbs_texture.h:123
ON_Xform
Definition:
opennurbs_xform.h:28
ON_Texture::m_blend_constant_A
double m_blend_constant_A
Definition:
opennurbs_texture.h:294
ON_Texture::m_border_color
ON_Color m_border_color
Definition:
opennurbs_texture.h:231
ON_Object::SizeOf
virtual unsigned int SizeOf() const
ON_Texture::m_blend_constant_RGB
ON_Color m_blend_constant_RGB
Definition:
opennurbs_texture.h:296
ON_wString
Definition:
opennurbs_string.h:700
ON_Texture::m_bApply_uvw
bool m_bApply_uvw
Definition:
opennurbs_texture.h:225
ON_Object::Read
virtual ON_BOOL32 Read(ON_BinaryArchive &binary_archive)
ON_Color
Definition:
opennurbs_color.h:24
ON_Object::Write
virtual ON_BOOL32 Write(ON_BinaryArchive &binary_archive) const
ON_Texture::m_texture_id
ON_UUID m_texture_id
Definition:
opennurbs_texture.h:120
ON_Texture::WRAP
WRAP
Definition:
opennurbs_texture.h:212
ON_Texture::m_magfilter
FILTER m_magfilter
Definition:
opennurbs_texture.h:210
ON_Texture::m_blend_order
int m_blend_order
Definition:
opennurbs_texture.h:303
ON_Texture::m_bOn
bool m_bOn
Definition:
opennurbs_texture.h:157
ON_Texture
Definition:
opennurbs_texture.h:31
ON_ObjectArray< ON_Texture >
ON_Texture::m_transparency_texture_id
ON_UUID m_transparency_texture_id
Definition:
opennurbs_texture.h:272
ON_BinaryArchive
Definition:
opennurbs_archive.h:731
ON_TextLog
Definition:
opennurbs_textlog.h:22
ON_Texture::m_runtime_ptr
const void * m_runtime_ptr
Definition:
opennurbs_texture.h:311
ON_Texture::m_uvw
ON_Xform m_uvw
Definition:
opennurbs_texture.h:226
ON_Texture::m_transparent_color
ON_Color m_transparent_color
Definition:
opennurbs_texture.h:249
ON_Texture::m_type
TYPE m_type
Definition:
opennurbs_texture.h:176
ON_Texture::m_filename_bRelativePath
bool m_filename_bRelativePath
Definition:
opennurbs_texture.h:151
ON_Texture::m_wrapv
WRAP m_wrapv
Definition:
opennurbs_texture.h:221
ON_Texture::m_filename
ON_wString m_filename
Definition:
opennurbs_texture.h:150
ON_UUID
Definition:
opennurbs_uuid.h:31
ON_Texture::m_mode
MODE m_mode
Definition:
opennurbs_texture.h:192
ON_Object::Dump
virtual void Dump(ON_TextLog &) const
ON_Object::IsValid
virtual ON_BOOL32 IsValid(ON_TextLog *text_log=NULL) const =0
ON_Texture::m_bump_scale
ON_Interval m_bump_scale
Definition:
opennurbs_texture.h:279