rev |
line source |
nuclear@0
|
1 /*
|
nuclear@0
|
2 ---------------------------------------------------------------------------
|
nuclear@0
|
3 Open Asset Import Library (assimp)
|
nuclear@0
|
4 ---------------------------------------------------------------------------
|
nuclear@0
|
5
|
nuclear@0
|
6 Copyright (c) 2006-2018, assimp team
|
nuclear@0
|
7
|
nuclear@0
|
8
|
nuclear@0
|
9
|
nuclear@0
|
10 All rights reserved.
|
nuclear@0
|
11
|
nuclear@0
|
12 Redistribution and use of this software in source and binary forms,
|
nuclear@0
|
13 with or without modification, are permitted provided that the following
|
nuclear@0
|
14 conditions are met:
|
nuclear@0
|
15
|
nuclear@0
|
16 * Redistributions of source code must retain the above
|
nuclear@0
|
17 copyright notice, this list of conditions and the
|
nuclear@0
|
18 following disclaimer.
|
nuclear@0
|
19
|
nuclear@0
|
20 * Redistributions in binary form must reproduce the above
|
nuclear@0
|
21 copyright notice, this list of conditions and the
|
nuclear@0
|
22 following disclaimer in the documentation and/or other
|
nuclear@0
|
23 materials provided with the distribution.
|
nuclear@0
|
24
|
nuclear@0
|
25 * Neither the name of the assimp team, nor the names of its
|
nuclear@0
|
26 contributors may be used to endorse or promote products
|
nuclear@0
|
27 derived from this software without specific prior
|
nuclear@0
|
28 written permission of the assimp team.
|
nuclear@0
|
29
|
nuclear@0
|
30 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
nuclear@0
|
31 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
nuclear@0
|
32 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
nuclear@0
|
33 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
nuclear@0
|
34 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
nuclear@0
|
35 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
nuclear@0
|
36 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
nuclear@0
|
37 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
nuclear@0
|
38 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
nuclear@0
|
39 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
nuclear@0
|
40 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
nuclear@0
|
41 ---------------------------------------------------------------------------
|
nuclear@0
|
42 */
|
nuclear@0
|
43
|
nuclear@0
|
44 /** @file material.h
|
nuclear@0
|
45 * @brief Defines the material system of the library
|
nuclear@0
|
46 */
|
nuclear@0
|
47 #pragma once
|
nuclear@0
|
48 #ifndef AI_MATERIAL_H_INC
|
nuclear@0
|
49 #define AI_MATERIAL_H_INC
|
nuclear@0
|
50
|
nuclear@0
|
51 #include "types.h"
|
nuclear@0
|
52
|
nuclear@0
|
53 #ifdef __cplusplus
|
nuclear@0
|
54 extern "C" {
|
nuclear@0
|
55 #endif
|
nuclear@0
|
56
|
nuclear@0
|
57 // Name for default materials (2nd is used if meshes have UV coords)
|
nuclear@0
|
58 #define AI_DEFAULT_MATERIAL_NAME "DefaultMaterial"
|
nuclear@0
|
59
|
nuclear@0
|
60 // ---------------------------------------------------------------------------
|
nuclear@0
|
61 /** @brief Defines how the Nth texture of a specific type is combined with
|
nuclear@0
|
62 * the result of all previous layers.
|
nuclear@0
|
63 *
|
nuclear@0
|
64 * Example (left: key, right: value): <br>
|
nuclear@0
|
65 * @code
|
nuclear@0
|
66 * DiffColor0 - gray
|
nuclear@0
|
67 * DiffTextureOp0 - aiTextureOpMultiply
|
nuclear@0
|
68 * DiffTexture0 - tex1.png
|
nuclear@0
|
69 * DiffTextureOp0 - aiTextureOpAdd
|
nuclear@0
|
70 * DiffTexture1 - tex2.png
|
nuclear@0
|
71 * @endcode
|
nuclear@0
|
72 * Written as equation, the final diffuse term for a specific pixel would be:
|
nuclear@0
|
73 * @code
|
nuclear@0
|
74 * diffFinal = DiffColor0 * sampleTex(DiffTexture0,UV0) +
|
nuclear@0
|
75 * sampleTex(DiffTexture1,UV0) * diffContrib;
|
nuclear@0
|
76 * @endcode
|
nuclear@0
|
77 * where 'diffContrib' is the intensity of the incoming light for that pixel.
|
nuclear@0
|
78 */
|
nuclear@0
|
79 enum aiTextureOp
|
nuclear@0
|
80 {
|
nuclear@0
|
81 /** T = T1 * T2 */
|
nuclear@0
|
82 aiTextureOp_Multiply = 0x0,
|
nuclear@0
|
83
|
nuclear@0
|
84 /** T = T1 + T2 */
|
nuclear@0
|
85 aiTextureOp_Add = 0x1,
|
nuclear@0
|
86
|
nuclear@0
|
87 /** T = T1 - T2 */
|
nuclear@0
|
88 aiTextureOp_Subtract = 0x2,
|
nuclear@0
|
89
|
nuclear@0
|
90 /** T = T1 / T2 */
|
nuclear@0
|
91 aiTextureOp_Divide = 0x3,
|
nuclear@0
|
92
|
nuclear@0
|
93 /** T = (T1 + T2) - (T1 * T2) */
|
nuclear@0
|
94 aiTextureOp_SmoothAdd = 0x4,
|
nuclear@0
|
95
|
nuclear@0
|
96 /** T = T1 + (T2-0.5) */
|
nuclear@0
|
97 aiTextureOp_SignedAdd = 0x5,
|
nuclear@0
|
98
|
nuclear@0
|
99
|
nuclear@0
|
100 #ifndef SWIG
|
nuclear@0
|
101 _aiTextureOp_Force32Bit = INT_MAX
|
nuclear@0
|
102 #endif
|
nuclear@0
|
103 };
|
nuclear@0
|
104
|
nuclear@0
|
105 // ---------------------------------------------------------------------------
|
nuclear@0
|
106 /** @brief Defines how UV coordinates outside the [0...1] range are handled.
|
nuclear@0
|
107 *
|
nuclear@0
|
108 * Commonly referred to as 'wrapping mode'.
|
nuclear@0
|
109 */
|
nuclear@0
|
110 enum aiTextureMapMode
|
nuclear@0
|
111 {
|
nuclear@0
|
112 /** A texture coordinate u|v is translated to u%1|v%1
|
nuclear@0
|
113 */
|
nuclear@0
|
114 aiTextureMapMode_Wrap = 0x0,
|
nuclear@0
|
115
|
nuclear@0
|
116 /** Texture coordinates outside [0...1]
|
nuclear@0
|
117 * are clamped to the nearest valid value.
|
nuclear@0
|
118 */
|
nuclear@0
|
119 aiTextureMapMode_Clamp = 0x1,
|
nuclear@0
|
120
|
nuclear@0
|
121 /** If the texture coordinates for a pixel are outside [0...1]
|
nuclear@0
|
122 * the texture is not applied to that pixel
|
nuclear@0
|
123 */
|
nuclear@0
|
124 aiTextureMapMode_Decal = 0x3,
|
nuclear@0
|
125
|
nuclear@0
|
126 /** A texture coordinate u|v becomes u%1|v%1 if (u-(u%1))%2 is zero and
|
nuclear@0
|
127 * 1-(u%1)|1-(v%1) otherwise
|
nuclear@0
|
128 */
|
nuclear@0
|
129 aiTextureMapMode_Mirror = 0x2,
|
nuclear@0
|
130
|
nuclear@0
|
131 #ifndef SWIG
|
nuclear@0
|
132 _aiTextureMapMode_Force32Bit = INT_MAX
|
nuclear@0
|
133 #endif
|
nuclear@0
|
134 };
|
nuclear@0
|
135
|
nuclear@0
|
136 // ---------------------------------------------------------------------------
|
nuclear@0
|
137 /** @brief Defines how the mapping coords for a texture are generated.
|
nuclear@0
|
138 *
|
nuclear@0
|
139 * Real-time applications typically require full UV coordinates, so the use of
|
nuclear@0
|
140 * the aiProcess_GenUVCoords step is highly recommended. It generates proper
|
nuclear@0
|
141 * UV channels for non-UV mapped objects, as long as an accurate description
|
nuclear@0
|
142 * how the mapping should look like (e.g spherical) is given.
|
nuclear@0
|
143 * See the #AI_MATKEY_MAPPING property for more details.
|
nuclear@0
|
144 */
|
nuclear@0
|
145 enum aiTextureMapping
|
nuclear@0
|
146 {
|
nuclear@0
|
147 /** The mapping coordinates are taken from an UV channel.
|
nuclear@0
|
148 *
|
nuclear@0
|
149 * The #AI_MATKEY_UVWSRC key specifies from which UV channel
|
nuclear@0
|
150 * the texture coordinates are to be taken from (remember,
|
nuclear@0
|
151 * meshes can have more than one UV channel).
|
nuclear@0
|
152 */
|
nuclear@0
|
153 aiTextureMapping_UV = 0x0,
|
nuclear@0
|
154
|
nuclear@0
|
155 /** Spherical mapping */
|
nuclear@0
|
156 aiTextureMapping_SPHERE = 0x1,
|
nuclear@0
|
157
|
nuclear@0
|
158 /** Cylindrical mapping */
|
nuclear@0
|
159 aiTextureMapping_CYLINDER = 0x2,
|
nuclear@0
|
160
|
nuclear@0
|
161 /** Cubic mapping */
|
nuclear@0
|
162 aiTextureMapping_BOX = 0x3,
|
nuclear@0
|
163
|
nuclear@0
|
164 /** Planar mapping */
|
nuclear@0
|
165 aiTextureMapping_PLANE = 0x4,
|
nuclear@0
|
166
|
nuclear@0
|
167 /** Undefined mapping. Have fun. */
|
nuclear@0
|
168 aiTextureMapping_OTHER = 0x5,
|
nuclear@0
|
169
|
nuclear@0
|
170
|
nuclear@0
|
171 #ifndef SWIG
|
nuclear@0
|
172 _aiTextureMapping_Force32Bit = INT_MAX
|
nuclear@0
|
173 #endif
|
nuclear@0
|
174 };
|
nuclear@0
|
175
|
nuclear@0
|
176 // ---------------------------------------------------------------------------
|
nuclear@0
|
177 /** @brief Defines the purpose of a texture
|
nuclear@0
|
178 *
|
nuclear@0
|
179 * This is a very difficult topic. Different 3D packages support different
|
nuclear@0
|
180 * kinds of textures. For very common texture types, such as bumpmaps, the
|
nuclear@0
|
181 * rendering results depend on implementation details in the rendering
|
nuclear@0
|
182 * pipelines of these applications. Assimp loads all texture references from
|
nuclear@0
|
183 * the model file and tries to determine which of the predefined texture
|
nuclear@0
|
184 * types below is the best choice to match the original use of the texture
|
nuclear@0
|
185 * as closely as possible.<br>
|
nuclear@0
|
186 *
|
nuclear@0
|
187 * In content pipelines you'll usually define how textures have to be handled,
|
nuclear@0
|
188 * and the artists working on models have to conform to this specification,
|
nuclear@0
|
189 * regardless which 3D tool they're using.
|
nuclear@0
|
190 */
|
nuclear@0
|
191 enum aiTextureType
|
nuclear@0
|
192 {
|
nuclear@0
|
193 /** Dummy value.
|
nuclear@0
|
194 *
|
nuclear@0
|
195 * No texture, but the value to be used as 'texture semantic'
|
nuclear@0
|
196 * (#aiMaterialProperty::mSemantic) for all material properties
|
nuclear@0
|
197 * *not* related to textures.
|
nuclear@0
|
198 */
|
nuclear@0
|
199 aiTextureType_NONE = 0x0,
|
nuclear@0
|
200
|
nuclear@0
|
201
|
nuclear@0
|
202
|
nuclear@0
|
203 /** The texture is combined with the result of the diffuse
|
nuclear@0
|
204 * lighting equation.
|
nuclear@0
|
205 */
|
nuclear@0
|
206 aiTextureType_DIFFUSE = 0x1,
|
nuclear@0
|
207
|
nuclear@0
|
208 /** The texture is combined with the result of the specular
|
nuclear@0
|
209 * lighting equation.
|
nuclear@0
|
210 */
|
nuclear@0
|
211 aiTextureType_SPECULAR = 0x2,
|
nuclear@0
|
212
|
nuclear@0
|
213 /** The texture is combined with the result of the ambient
|
nuclear@0
|
214 * lighting equation.
|
nuclear@0
|
215 */
|
nuclear@0
|
216 aiTextureType_AMBIENT = 0x3,
|
nuclear@0
|
217
|
nuclear@0
|
218 /** The texture is added to the result of the lighting
|
nuclear@0
|
219 * calculation. It isn't influenced by incoming light.
|
nuclear@0
|
220 */
|
nuclear@0
|
221 aiTextureType_EMISSIVE = 0x4,
|
nuclear@0
|
222
|
nuclear@0
|
223 /** The texture is a height map.
|
nuclear@0
|
224 *
|
nuclear@0
|
225 * By convention, higher gray-scale values stand for
|
nuclear@0
|
226 * higher elevations from the base height.
|
nuclear@0
|
227 */
|
nuclear@0
|
228 aiTextureType_HEIGHT = 0x5,
|
nuclear@0
|
229
|
nuclear@0
|
230 /** The texture is a (tangent space) normal-map.
|
nuclear@0
|
231 *
|
nuclear@0
|
232 * Again, there are several conventions for tangent-space
|
nuclear@0
|
233 * normal maps. Assimp does (intentionally) not
|
nuclear@0
|
234 * distinguish here.
|
nuclear@0
|
235 */
|
nuclear@0
|
236 aiTextureType_NORMALS = 0x6,
|
nuclear@0
|
237
|
nuclear@0
|
238 /** The texture defines the glossiness of the material.
|
nuclear@0
|
239 *
|
nuclear@0
|
240 * The glossiness is in fact the exponent of the specular
|
nuclear@0
|
241 * (phong) lighting equation. Usually there is a conversion
|
nuclear@0
|
242 * function defined to map the linear color values in the
|
nuclear@0
|
243 * texture to a suitable exponent. Have fun.
|
nuclear@0
|
244 */
|
nuclear@0
|
245 aiTextureType_SHININESS = 0x7,
|
nuclear@0
|
246
|
nuclear@0
|
247 /** The texture defines per-pixel opacity.
|
nuclear@0
|
248 *
|
nuclear@0
|
249 * Usually 'white' means opaque and 'black' means
|
nuclear@0
|
250 * 'transparency'. Or quite the opposite. Have fun.
|
nuclear@0
|
251 */
|
nuclear@0
|
252 aiTextureType_OPACITY = 0x8,
|
nuclear@0
|
253
|
nuclear@0
|
254 /** Displacement texture
|
nuclear@0
|
255 *
|
nuclear@0
|
256 * The exact purpose and format is application-dependent.
|
nuclear@0
|
257 * Higher color values stand for higher vertex displacements.
|
nuclear@0
|
258 */
|
nuclear@0
|
259 aiTextureType_DISPLACEMENT = 0x9,
|
nuclear@0
|
260
|
nuclear@0
|
261 /** Lightmap texture (aka Ambient Occlusion)
|
nuclear@0
|
262 *
|
nuclear@0
|
263 * Both 'Lightmaps' and dedicated 'ambient occlusion maps' are
|
nuclear@0
|
264 * covered by this material property. The texture contains a
|
nuclear@0
|
265 * scaling value for the final color value of a pixel. Its
|
nuclear@0
|
266 * intensity is not affected by incoming light.
|
nuclear@0
|
267 */
|
nuclear@0
|
268 aiTextureType_LIGHTMAP = 0xA,
|
nuclear@0
|
269
|
nuclear@0
|
270 /** Reflection texture
|
nuclear@0
|
271 *
|
nuclear@0
|
272 * Contains the color of a perfect mirror reflection.
|
nuclear@0
|
273 * Rarely used, almost never for real-time applications.
|
nuclear@0
|
274 */
|
nuclear@0
|
275 aiTextureType_REFLECTION = 0xB,
|
nuclear@0
|
276
|
nuclear@0
|
277 /** Unknown texture
|
nuclear@0
|
278 *
|
nuclear@0
|
279 * A texture reference that does not match any of the definitions
|
nuclear@0
|
280 * above is considered to be 'unknown'. It is still imported,
|
nuclear@0
|
281 * but is excluded from any further postprocessing.
|
nuclear@0
|
282 */
|
nuclear@0
|
283 aiTextureType_UNKNOWN = 0xC,
|
nuclear@0
|
284
|
nuclear@0
|
285
|
nuclear@0
|
286 #ifndef SWIG
|
nuclear@0
|
287 _aiTextureType_Force32Bit = INT_MAX
|
nuclear@0
|
288 #endif
|
nuclear@0
|
289 };
|
nuclear@0
|
290
|
nuclear@0
|
291 #define AI_TEXTURE_TYPE_MAX aiTextureType_UNKNOWN
|
nuclear@0
|
292
|
nuclear@0
|
293 // ---------------------------------------------------------------------------
|
nuclear@0
|
294 /** @brief Defines all shading models supported by the library
|
nuclear@0
|
295 *
|
nuclear@0
|
296 * The list of shading modes has been taken from Blender.
|
nuclear@0
|
297 * See Blender documentation for more information. The API does
|
nuclear@0
|
298 * not distinguish between "specular" and "diffuse" shaders (thus the
|
nuclear@0
|
299 * specular term for diffuse shading models like Oren-Nayar remains
|
nuclear@0
|
300 * undefined). <br>
|
nuclear@0
|
301 * Again, this value is just a hint. Assimp tries to select the shader whose
|
nuclear@0
|
302 * most common implementation matches the original rendering results of the
|
nuclear@0
|
303 * 3D modeller which wrote a particular model as closely as possible.
|
nuclear@0
|
304 */
|
nuclear@0
|
305 enum aiShadingMode
|
nuclear@0
|
306 {
|
nuclear@0
|
307 /** Flat shading. Shading is done on per-face base,
|
nuclear@0
|
308 * diffuse only. Also known as 'faceted shading'.
|
nuclear@0
|
309 */
|
nuclear@0
|
310 aiShadingMode_Flat = 0x1,
|
nuclear@0
|
311
|
nuclear@0
|
312 /** Simple Gouraud shading.
|
nuclear@0
|
313 */
|
nuclear@0
|
314 aiShadingMode_Gouraud = 0x2,
|
nuclear@0
|
315
|
nuclear@0
|
316 /** Phong-Shading -
|
nuclear@0
|
317 */
|
nuclear@0
|
318 aiShadingMode_Phong = 0x3,
|
nuclear@0
|
319
|
nuclear@0
|
320 /** Phong-Blinn-Shading
|
nuclear@0
|
321 */
|
nuclear@0
|
322 aiShadingMode_Blinn = 0x4,
|
nuclear@0
|
323
|
nuclear@0
|
324 /** Toon-Shading per pixel
|
nuclear@0
|
325 *
|
nuclear@0
|
326 * Also known as 'comic' shader.
|
nuclear@0
|
327 */
|
nuclear@0
|
328 aiShadingMode_Toon = 0x5,
|
nuclear@0
|
329
|
nuclear@0
|
330 /** OrenNayar-Shading per pixel
|
nuclear@0
|
331 *
|
nuclear@0
|
332 * Extension to standard Lambertian shading, taking the
|
nuclear@0
|
333 * roughness of the material into account
|
nuclear@0
|
334 */
|
nuclear@0
|
335 aiShadingMode_OrenNayar = 0x6,
|
nuclear@0
|
336
|
nuclear@0
|
337 /** Minnaert-Shading per pixel
|
nuclear@0
|
338 *
|
nuclear@0
|
339 * Extension to standard Lambertian shading, taking the
|
nuclear@0
|
340 * "darkness" of the material into account
|
nuclear@0
|
341 */
|
nuclear@0
|
342 aiShadingMode_Minnaert = 0x7,
|
nuclear@0
|
343
|
nuclear@0
|
344 /** CookTorrance-Shading per pixel
|
nuclear@0
|
345 *
|
nuclear@0
|
346 * Special shader for metallic surfaces.
|
nuclear@0
|
347 */
|
nuclear@0
|
348 aiShadingMode_CookTorrance = 0x8,
|
nuclear@0
|
349
|
nuclear@0
|
350 /** No shading at all. Constant light influence of 1.0.
|
nuclear@0
|
351 */
|
nuclear@0
|
352 aiShadingMode_NoShading = 0x9,
|
nuclear@0
|
353
|
nuclear@0
|
354 /** Fresnel shading
|
nuclear@0
|
355 */
|
nuclear@0
|
356 aiShadingMode_Fresnel = 0xa,
|
nuclear@0
|
357
|
nuclear@0
|
358
|
nuclear@0
|
359 #ifndef SWIG
|
nuclear@0
|
360 _aiShadingMode_Force32Bit = INT_MAX
|
nuclear@0
|
361 #endif
|
nuclear@0
|
362 };
|
nuclear@0
|
363
|
nuclear@0
|
364
|
nuclear@0
|
365 // ---------------------------------------------------------------------------
|
nuclear@0
|
366 /** @brief Defines some mixed flags for a particular texture.
|
nuclear@0
|
367 *
|
nuclear@0
|
368 * Usually you'll instruct your cg artists how textures have to look like ...
|
nuclear@0
|
369 * and how they will be processed in your application. However, if you use
|
nuclear@0
|
370 * Assimp for completely generic loading purposes you might also need to
|
nuclear@0
|
371 * process these flags in order to display as many 'unknown' 3D models as
|
nuclear@0
|
372 * possible correctly.
|
nuclear@0
|
373 *
|
nuclear@0
|
374 * This corresponds to the #AI_MATKEY_TEXFLAGS property.
|
nuclear@0
|
375 */
|
nuclear@0
|
376 enum aiTextureFlags
|
nuclear@0
|
377 {
|
nuclear@0
|
378 /** The texture's color values have to be inverted (componentwise 1-n)
|
nuclear@0
|
379 */
|
nuclear@0
|
380 aiTextureFlags_Invert = 0x1,
|
nuclear@0
|
381
|
nuclear@0
|
382 /** Explicit request to the application to process the alpha channel
|
nuclear@0
|
383 * of the texture.
|
nuclear@0
|
384 *
|
nuclear@0
|
385 * Mutually exclusive with #aiTextureFlags_IgnoreAlpha. These
|
nuclear@0
|
386 * flags are set if the library can say for sure that the alpha
|
nuclear@0
|
387 * channel is used/is not used. If the model format does not
|
nuclear@0
|
388 * define this, it is left to the application to decide whether
|
nuclear@0
|
389 * the texture alpha channel - if any - is evaluated or not.
|
nuclear@0
|
390 */
|
nuclear@0
|
391 aiTextureFlags_UseAlpha = 0x2,
|
nuclear@0
|
392
|
nuclear@0
|
393 /** Explicit request to the application to ignore the alpha channel
|
nuclear@0
|
394 * of the texture.
|
nuclear@0
|
395 *
|
nuclear@0
|
396 * Mutually exclusive with #aiTextureFlags_UseAlpha.
|
nuclear@0
|
397 */
|
nuclear@0
|
398 aiTextureFlags_IgnoreAlpha = 0x4,
|
nuclear@0
|
399
|
nuclear@0
|
400 #ifndef SWIG
|
nuclear@0
|
401 _aiTextureFlags_Force32Bit = INT_MAX
|
nuclear@0
|
402 #endif
|
nuclear@0
|
403 };
|
nuclear@0
|
404
|
nuclear@0
|
405
|
nuclear@0
|
406 // ---------------------------------------------------------------------------
|
nuclear@0
|
407 /** @brief Defines alpha-blend flags.
|
nuclear@0
|
408 *
|
nuclear@0
|
409 * If you're familiar with OpenGL or D3D, these flags aren't new to you.
|
nuclear@0
|
410 * They define *how* the final color value of a pixel is computed, basing
|
nuclear@0
|
411 * on the previous color at that pixel and the new color value from the
|
nuclear@0
|
412 * material.
|
nuclear@0
|
413 * The blend formula is:
|
nuclear@0
|
414 * @code
|
nuclear@0
|
415 * SourceColor * SourceBlend + DestColor * DestBlend
|
nuclear@0
|
416 * @endcode
|
nuclear@0
|
417 * where DestColor is the previous color in the framebuffer at this
|
nuclear@0
|
418 * position and SourceColor is the material color before the transparency
|
nuclear@0
|
419 * calculation.<br>
|
nuclear@0
|
420 * This corresponds to the #AI_MATKEY_BLEND_FUNC property.
|
nuclear@0
|
421 */
|
nuclear@0
|
422 enum aiBlendMode
|
nuclear@0
|
423 {
|
nuclear@0
|
424 /**
|
nuclear@0
|
425 * Formula:
|
nuclear@0
|
426 * @code
|
nuclear@0
|
427 * SourceColor*SourceAlpha + DestColor*(1-SourceAlpha)
|
nuclear@0
|
428 * @endcode
|
nuclear@0
|
429 */
|
nuclear@0
|
430 aiBlendMode_Default = 0x0,
|
nuclear@0
|
431
|
nuclear@0
|
432 /** Additive blending
|
nuclear@0
|
433 *
|
nuclear@0
|
434 * Formula:
|
nuclear@0
|
435 * @code
|
nuclear@0
|
436 * SourceColor*1 + DestColor*1
|
nuclear@0
|
437 * @endcode
|
nuclear@0
|
438 */
|
nuclear@0
|
439 aiBlendMode_Additive = 0x1,
|
nuclear@0
|
440
|
nuclear@0
|
441 // we don't need more for the moment, but we might need them
|
nuclear@0
|
442 // in future versions ...
|
nuclear@0
|
443
|
nuclear@0
|
444 #ifndef SWIG
|
nuclear@0
|
445 _aiBlendMode_Force32Bit = INT_MAX
|
nuclear@0
|
446 #endif
|
nuclear@0
|
447 };
|
nuclear@0
|
448
|
nuclear@0
|
449
|
nuclear@0
|
450 #include "./Compiler/pushpack1.h"
|
nuclear@0
|
451
|
nuclear@0
|
452 // ---------------------------------------------------------------------------
|
nuclear@0
|
453 /** @brief Defines how an UV channel is transformed.
|
nuclear@0
|
454 *
|
nuclear@0
|
455 * This is just a helper structure for the #AI_MATKEY_UVTRANSFORM key.
|
nuclear@0
|
456 * See its documentation for more details.
|
nuclear@0
|
457 *
|
nuclear@0
|
458 * Typically you'll want to build a matrix of this information. However,
|
nuclear@0
|
459 * we keep separate scaling/translation/rotation values to make it
|
nuclear@0
|
460 * easier to process and optimize UV transformations internally.
|
nuclear@0
|
461 */
|
nuclear@0
|
462 struct aiUVTransform
|
nuclear@0
|
463 {
|
nuclear@0
|
464 /** Translation on the u and v axes.
|
nuclear@0
|
465 *
|
nuclear@0
|
466 * The default value is (0|0).
|
nuclear@0
|
467 */
|
nuclear@0
|
468 C_STRUCT aiVector2D mTranslation;
|
nuclear@0
|
469
|
nuclear@0
|
470 /** Scaling on the u and v axes.
|
nuclear@0
|
471 *
|
nuclear@0
|
472 * The default value is (1|1).
|
nuclear@0
|
473 */
|
nuclear@0
|
474 C_STRUCT aiVector2D mScaling;
|
nuclear@0
|
475
|
nuclear@0
|
476 /** Rotation - in counter-clockwise direction.
|
nuclear@0
|
477 *
|
nuclear@0
|
478 * The rotation angle is specified in radians. The
|
nuclear@0
|
479 * rotation center is 0.5f|0.5f. The default value
|
nuclear@0
|
480 * 0.f.
|
nuclear@0
|
481 */
|
nuclear@0
|
482 ai_real mRotation;
|
nuclear@0
|
483
|
nuclear@0
|
484
|
nuclear@0
|
485 #ifdef __cplusplus
|
nuclear@0
|
486 aiUVTransform() AI_NO_EXCEPT
|
nuclear@0
|
487 : mTranslation (0.0,0.0)
|
nuclear@0
|
488 , mScaling (1.0,1.0)
|
nuclear@0
|
489 , mRotation (0.0)
|
nuclear@0
|
490 {
|
nuclear@0
|
491 // nothing to be done here ...
|
nuclear@0
|
492 }
|
nuclear@0
|
493 #endif
|
nuclear@0
|
494
|
nuclear@0
|
495 };
|
nuclear@0
|
496
|
nuclear@0
|
497 #include "./Compiler/poppack1.h"
|
nuclear@0
|
498
|
nuclear@0
|
499 //! @cond AI_DOX_INCLUDE_INTERNAL
|
nuclear@0
|
500 // ---------------------------------------------------------------------------
|
nuclear@0
|
501 /** @brief A very primitive RTTI system for the contents of material
|
nuclear@0
|
502 * properties.
|
nuclear@0
|
503 */
|
nuclear@0
|
504 enum aiPropertyTypeInfo
|
nuclear@0
|
505 {
|
nuclear@0
|
506 /** Array of single-precision (32 Bit) floats
|
nuclear@0
|
507 *
|
nuclear@0
|
508 * It is possible to use aiGetMaterialInteger[Array]() (or the C++-API
|
nuclear@0
|
509 * aiMaterial::Get()) to query properties stored in floating-point format.
|
nuclear@0
|
510 * The material system performs the type conversion automatically.
|
nuclear@0
|
511 */
|
nuclear@0
|
512 aiPTI_Float = 0x1,
|
nuclear@0
|
513
|
nuclear@0
|
514 /** Array of double-precision (64 Bit) floats
|
nuclear@0
|
515 *
|
nuclear@0
|
516 * It is possible to use aiGetMaterialInteger[Array]() (or the C++-API
|
nuclear@0
|
517 * aiMaterial::Get()) to query properties stored in floating-point format.
|
nuclear@0
|
518 * The material system performs the type conversion automatically.
|
nuclear@0
|
519 */
|
nuclear@0
|
520 aiPTI_Double = 0x2,
|
nuclear@0
|
521
|
nuclear@0
|
522 /** The material property is an aiString.
|
nuclear@0
|
523 *
|
nuclear@0
|
524 * Arrays of strings aren't possible, aiGetMaterialString() (or the
|
nuclear@0
|
525 * C++-API aiMaterial::Get()) *must* be used to query a string property.
|
nuclear@0
|
526 */
|
nuclear@0
|
527 aiPTI_String = 0x3,
|
nuclear@0
|
528
|
nuclear@0
|
529 /** Array of (32 Bit) integers
|
nuclear@0
|
530 *
|
nuclear@0
|
531 * It is possible to use aiGetMaterialFloat[Array]() (or the C++-API
|
nuclear@0
|
532 * aiMaterial::Get()) to query properties stored in integer format.
|
nuclear@0
|
533 * The material system performs the type conversion automatically.
|
nuclear@0
|
534 */
|
nuclear@0
|
535 aiPTI_Integer = 0x4,
|
nuclear@0
|
536
|
nuclear@0
|
537
|
nuclear@0
|
538 /** Simple binary buffer, content undefined. Not convertible to anything.
|
nuclear@0
|
539 */
|
nuclear@0
|
540 aiPTI_Buffer = 0x5,
|
nuclear@0
|
541
|
nuclear@0
|
542
|
nuclear@0
|
543 /** This value is not used. It is just there to force the
|
nuclear@0
|
544 * compiler to map this enum to a 32 Bit integer.
|
nuclear@0
|
545 */
|
nuclear@0
|
546 #ifndef SWIG
|
nuclear@0
|
547 _aiPTI_Force32Bit = INT_MAX
|
nuclear@0
|
548 #endif
|
nuclear@0
|
549 };
|
nuclear@0
|
550
|
nuclear@0
|
551 // ---------------------------------------------------------------------------
|
nuclear@0
|
552 /** @brief Data structure for a single material property
|
nuclear@0
|
553 *
|
nuclear@0
|
554 * As an user, you'll probably never need to deal with this data structure.
|
nuclear@0
|
555 * Just use the provided aiGetMaterialXXX() or aiMaterial::Get() family
|
nuclear@0
|
556 * of functions to query material properties easily. Processing them
|
nuclear@0
|
557 * manually is faster, but it is not the recommended way. It isn't worth
|
nuclear@0
|
558 * the effort. <br>
|
nuclear@0
|
559 * Material property names follow a simple scheme:
|
nuclear@0
|
560 * @code
|
nuclear@0
|
561 * $<name>
|
nuclear@0
|
562 * ?<name>
|
nuclear@0
|
563 * A public property, there must be corresponding AI_MATKEY_XXX define
|
nuclear@0
|
564 * 2nd: Public, but ignored by the #aiProcess_RemoveRedundantMaterials
|
nuclear@0
|
565 * post-processing step.
|
nuclear@0
|
566 * ~<name>
|
nuclear@0
|
567 * A temporary property for internal use.
|
nuclear@0
|
568 * @endcode
|
nuclear@0
|
569 * @see aiMaterial
|
nuclear@0
|
570 */
|
nuclear@0
|
571 struct aiMaterialProperty
|
nuclear@0
|
572 {
|
nuclear@0
|
573 /** Specifies the name of the property (key)
|
nuclear@0
|
574 * Keys are generally case insensitive.
|
nuclear@0
|
575 */
|
nuclear@0
|
576 C_STRUCT aiString mKey;
|
nuclear@0
|
577
|
nuclear@0
|
578 /** Textures: Specifies their exact usage semantic.
|
nuclear@0
|
579 * For non-texture properties, this member is always 0
|
nuclear@0
|
580 * (or, better-said, #aiTextureType_NONE).
|
nuclear@0
|
581 */
|
nuclear@0
|
582 unsigned int mSemantic;
|
nuclear@0
|
583
|
nuclear@0
|
584 /** Textures: Specifies the index of the texture.
|
nuclear@0
|
585 * For non-texture properties, this member is always 0.
|
nuclear@0
|
586 */
|
nuclear@0
|
587 unsigned int mIndex;
|
nuclear@0
|
588
|
nuclear@0
|
589 /** Size of the buffer mData is pointing to, in bytes.
|
nuclear@0
|
590 * This value may not be 0.
|
nuclear@0
|
591 */
|
nuclear@0
|
592 unsigned int mDataLength;
|
nuclear@0
|
593
|
nuclear@0
|
594 /** Type information for the property.
|
nuclear@0
|
595 *
|
nuclear@0
|
596 * Defines the data layout inside the data buffer. This is used
|
nuclear@0
|
597 * by the library internally to perform debug checks and to
|
nuclear@0
|
598 * utilize proper type conversions.
|
nuclear@0
|
599 * (It's probably a hacky solution, but it works.)
|
nuclear@0
|
600 */
|
nuclear@0
|
601 C_ENUM aiPropertyTypeInfo mType;
|
nuclear@0
|
602
|
nuclear@0
|
603 /** Binary buffer to hold the property's value.
|
nuclear@0
|
604 * The size of the buffer is always mDataLength.
|
nuclear@0
|
605 */
|
nuclear@0
|
606 char* mData;
|
nuclear@0
|
607
|
nuclear@0
|
608 #ifdef __cplusplus
|
nuclear@0
|
609
|
nuclear@0
|
610 aiMaterialProperty() AI_NO_EXCEPT
|
nuclear@0
|
611 : mSemantic( 0 )
|
nuclear@0
|
612 , mIndex( 0 )
|
nuclear@0
|
613 , mDataLength( 0 )
|
nuclear@0
|
614 , mType( aiPTI_Float )
|
nuclear@0
|
615 , mData(0) {
|
nuclear@0
|
616 // empty
|
nuclear@0
|
617 }
|
nuclear@0
|
618
|
nuclear@0
|
619 ~aiMaterialProperty() {
|
nuclear@0
|
620 delete[] mData;
|
nuclear@0
|
621 mData = 0;
|
nuclear@0
|
622 }
|
nuclear@0
|
623
|
nuclear@0
|
624 #endif
|
nuclear@0
|
625 };
|
nuclear@0
|
626 //! @endcond
|
nuclear@0
|
627
|
nuclear@0
|
628 #ifdef __cplusplus
|
nuclear@0
|
629 } // We need to leave the "C" block here to allow template member functions
|
nuclear@0
|
630 #endif
|
nuclear@0
|
631
|
nuclear@0
|
632 // ---------------------------------------------------------------------------
|
nuclear@0
|
633 /** @brief Data structure for a material
|
nuclear@0
|
634 *
|
nuclear@0
|
635 * Material data is stored using a key-value structure. A single key-value
|
nuclear@0
|
636 * pair is called a 'material property'. C++ users should use the provided
|
nuclear@0
|
637 * member functions of aiMaterial to process material properties, C users
|
nuclear@0
|
638 * have to stick with the aiMaterialGetXXX family of unbound functions.
|
nuclear@0
|
639 * The library defines a set of standard keys (AI_MATKEY_XXX).
|
nuclear@0
|
640 */
|
nuclear@0
|
641 #ifdef __cplusplus
|
nuclear@0
|
642 struct ASSIMP_API aiMaterial
|
nuclear@0
|
643 #else
|
nuclear@0
|
644 struct aiMaterial
|
nuclear@0
|
645 #endif
|
nuclear@0
|
646 {
|
nuclear@0
|
647
|
nuclear@0
|
648 #ifdef __cplusplus
|
nuclear@0
|
649
|
nuclear@0
|
650 public:
|
nuclear@0
|
651
|
nuclear@0
|
652 aiMaterial();
|
nuclear@0
|
653 ~aiMaterial();
|
nuclear@0
|
654
|
nuclear@0
|
655 // -------------------------------------------------------------------
|
nuclear@0
|
656 /**
|
nuclear@0
|
657 * @brief Returns the name of the material.
|
nuclear@0
|
658 * @return The name of the material.
|
nuclear@0
|
659 */
|
nuclear@0
|
660 // -------------------------------------------------------------------
|
nuclear@0
|
661 aiString GetName();
|
nuclear@0
|
662
|
nuclear@0
|
663 // -------------------------------------------------------------------
|
nuclear@0
|
664 /** @brief Retrieve an array of Type values with a specific key
|
nuclear@0
|
665 * from the material
|
nuclear@0
|
666 *
|
nuclear@0
|
667 * @param pKey Key to search for. One of the AI_MATKEY_XXX constants.
|
nuclear@0
|
668 * @param type .. set by AI_MATKEY_XXX
|
nuclear@0
|
669 * @param idx .. set by AI_MATKEY_XXX
|
nuclear@0
|
670 * @param pOut Pointer to a buffer to receive the result.
|
nuclear@0
|
671 * @param pMax Specifies the size of the given buffer, in Type's.
|
nuclear@0
|
672 * Receives the number of values (not bytes!) read.
|
nuclear@0
|
673 * NULL is a valid value for this parameter.
|
nuclear@0
|
674 */
|
nuclear@0
|
675 template <typename Type>
|
nuclear@0
|
676 aiReturn Get(const char* pKey,unsigned int type,
|
nuclear@0
|
677 unsigned int idx, Type* pOut, unsigned int* pMax) const;
|
nuclear@0
|
678
|
nuclear@0
|
679 aiReturn Get(const char* pKey,unsigned int type,
|
nuclear@0
|
680 unsigned int idx, int* pOut, unsigned int* pMax) const;
|
nuclear@0
|
681
|
nuclear@0
|
682 aiReturn Get(const char* pKey,unsigned int type,
|
nuclear@0
|
683 unsigned int idx, ai_real* pOut, unsigned int* pMax) const;
|
nuclear@0
|
684
|
nuclear@0
|
685 // -------------------------------------------------------------------
|
nuclear@0
|
686 /** @brief Retrieve a Type value with a specific key
|
nuclear@0
|
687 * from the material
|
nuclear@0
|
688 *
|
nuclear@0
|
689 * @param pKey Key to search for. One of the AI_MATKEY_XXX constants.
|
nuclear@0
|
690 * @param type Specifies the type of the texture to be retrieved (
|
nuclear@0
|
691 * e.g. diffuse, specular, height map ...)
|
nuclear@0
|
692 * @param idx Index of the texture to be retrieved.
|
nuclear@0
|
693 * @param pOut Reference to receive the output value
|
nuclear@0
|
694 */
|
nuclear@0
|
695 template <typename Type>
|
nuclear@0
|
696 aiReturn Get(const char* pKey,unsigned int type,
|
nuclear@0
|
697 unsigned int idx,Type& pOut) const;
|
nuclear@0
|
698
|
nuclear@0
|
699
|
nuclear@0
|
700 aiReturn Get(const char* pKey,unsigned int type,
|
nuclear@0
|
701 unsigned int idx, int& pOut) const;
|
nuclear@0
|
702
|
nuclear@0
|
703 aiReturn Get(const char* pKey,unsigned int type,
|
nuclear@0
|
704 unsigned int idx, ai_real& pOut) const;
|
nuclear@0
|
705
|
nuclear@0
|
706 aiReturn Get(const char* pKey,unsigned int type,
|
nuclear@0
|
707 unsigned int idx, aiString& pOut) const;
|
nuclear@0
|
708
|
nuclear@0
|
709 aiReturn Get(const char* pKey,unsigned int type,
|
nuclear@0
|
710 unsigned int idx, aiColor3D& pOut) const;
|
nuclear@0
|
711
|
nuclear@0
|
712 aiReturn Get(const char* pKey,unsigned int type,
|
nuclear@0
|
713 unsigned int idx, aiColor4D& pOut) const;
|
nuclear@0
|
714
|
nuclear@0
|
715 aiReturn Get(const char* pKey,unsigned int type,
|
nuclear@0
|
716 unsigned int idx, aiUVTransform& pOut) const;
|
nuclear@0
|
717
|
nuclear@0
|
718 // -------------------------------------------------------------------
|
nuclear@0
|
719 /** Get the number of textures for a particular texture type.
|
nuclear@0
|
720 * @param type Texture type to check for
|
nuclear@0
|
721 * @return Number of textures for this type.
|
nuclear@0
|
722 * @note A texture can be easily queried using #GetTexture() */
|
nuclear@0
|
723 unsigned int GetTextureCount(aiTextureType type) const;
|
nuclear@0
|
724
|
nuclear@0
|
725 // -------------------------------------------------------------------
|
nuclear@0
|
726 /** Helper function to get all parameters pertaining to a
|
nuclear@0
|
727 * particular texture slot from a material.
|
nuclear@0
|
728 *
|
nuclear@0
|
729 * This function is provided just for convenience, you could also
|
nuclear@0
|
730 * read the single material properties manually.
|
nuclear@0
|
731 * @param type Specifies the type of the texture to be retrieved (
|
nuclear@0
|
732 * e.g. diffuse, specular, height map ...)
|
nuclear@0
|
733 * @param index Index of the texture to be retrieved. The function fails
|
nuclear@0
|
734 * if there is no texture of that type with this index.
|
nuclear@0
|
735 * #GetTextureCount() can be used to determine the number of textures
|
nuclear@0
|
736 * per texture type.
|
nuclear@0
|
737 * @param path Receives the path to the texture.
|
nuclear@0
|
738 * If the texture is embedded, receives a '*' followed by the id of
|
nuclear@0
|
739 * the texture (for the textures stored in the corresponding scene) which
|
nuclear@0
|
740 * can be converted to an int using a function like atoi.
|
nuclear@0
|
741 * NULL is a valid value.
|
nuclear@0
|
742 * @param mapping The texture mapping.
|
nuclear@0
|
743 * NULL is allowed as value.
|
nuclear@0
|
744 * @param uvindex Receives the UV index of the texture.
|
nuclear@0
|
745 * NULL is a valid value.
|
nuclear@0
|
746 * @param blend Receives the blend factor for the texture
|
nuclear@0
|
747 * NULL is a valid value.
|
nuclear@0
|
748 * @param op Receives the texture operation to be performed between
|
nuclear@0
|
749 * this texture and the previous texture. NULL is allowed as value.
|
nuclear@0
|
750 * @param mapmode Receives the mapping modes to be used for the texture.
|
nuclear@0
|
751 * The parameter may be NULL but if it is a valid pointer it MUST
|
nuclear@0
|
752 * point to an array of 3 aiTextureMapMode's (one for each
|
nuclear@0
|
753 * axis: UVW order (=XYZ)).
|
nuclear@0
|
754 */
|
nuclear@0
|
755 // -------------------------------------------------------------------
|
nuclear@0
|
756 aiReturn GetTexture(aiTextureType type,
|
nuclear@0
|
757 unsigned int index,
|
nuclear@0
|
758 C_STRUCT aiString* path,
|
nuclear@0
|
759 aiTextureMapping* mapping = NULL,
|
nuclear@0
|
760 unsigned int* uvindex = NULL,
|
nuclear@0
|
761 ai_real* blend = NULL,
|
nuclear@0
|
762 aiTextureOp* op = NULL,
|
nuclear@0
|
763 aiTextureMapMode* mapmode = NULL) const;
|
nuclear@0
|
764
|
nuclear@0
|
765
|
nuclear@0
|
766 // Setters
|
nuclear@0
|
767
|
nuclear@0
|
768
|
nuclear@0
|
769 // ------------------------------------------------------------------------------
|
nuclear@0
|
770 /** @brief Add a property with a given key and type info to the material
|
nuclear@0
|
771 * structure
|
nuclear@0
|
772 *
|
nuclear@0
|
773 * @param pInput Pointer to input data
|
nuclear@0
|
774 * @param pSizeInBytes Size of input data
|
nuclear@0
|
775 * @param pKey Key/Usage of the property (AI_MATKEY_XXX)
|
nuclear@0
|
776 * @param type Set by the AI_MATKEY_XXX macro
|
nuclear@0
|
777 * @param index Set by the AI_MATKEY_XXX macro
|
nuclear@0
|
778 * @param pType Type information hint */
|
nuclear@0
|
779 aiReturn AddBinaryProperty (const void* pInput,
|
nuclear@0
|
780 unsigned int pSizeInBytes,
|
nuclear@0
|
781 const char* pKey,
|
nuclear@0
|
782 unsigned int type ,
|
nuclear@0
|
783 unsigned int index ,
|
nuclear@0
|
784 aiPropertyTypeInfo pType);
|
nuclear@0
|
785
|
nuclear@0
|
786 // ------------------------------------------------------------------------------
|
nuclear@0
|
787 /** @brief Add a string property with a given key and type info to the
|
nuclear@0
|
788 * material structure
|
nuclear@0
|
789 *
|
nuclear@0
|
790 * @param pInput Input string
|
nuclear@0
|
791 * @param pKey Key/Usage of the property (AI_MATKEY_XXX)
|
nuclear@0
|
792 * @param type Set by the AI_MATKEY_XXX macro
|
nuclear@0
|
793 * @param index Set by the AI_MATKEY_XXX macro */
|
nuclear@0
|
794 aiReturn AddProperty (const aiString* pInput,
|
nuclear@0
|
795 const char* pKey,
|
nuclear@0
|
796 unsigned int type = 0,
|
nuclear@0
|
797 unsigned int index = 0);
|
nuclear@0
|
798
|
nuclear@0
|
799 // ------------------------------------------------------------------------------
|
nuclear@0
|
800 /** @brief Add a property with a given key to the material structure
|
nuclear@0
|
801 * @param pInput Pointer to the input data
|
nuclear@0
|
802 * @param pNumValues Number of values in the array
|
nuclear@0
|
803 * @param pKey Key/Usage of the property (AI_MATKEY_XXX)
|
nuclear@0
|
804 * @param type Set by the AI_MATKEY_XXX macro
|
nuclear@0
|
805 * @param index Set by the AI_MATKEY_XXX macro */
|
nuclear@0
|
806 template<class TYPE>
|
nuclear@0
|
807 aiReturn AddProperty (const TYPE* pInput,
|
nuclear@0
|
808 unsigned int pNumValues,
|
nuclear@0
|
809 const char* pKey,
|
nuclear@0
|
810 unsigned int type = 0,
|
nuclear@0
|
811 unsigned int index = 0);
|
nuclear@0
|
812
|
nuclear@0
|
813 aiReturn AddProperty (const aiVector3D* pInput,
|
nuclear@0
|
814 unsigned int pNumValues,
|
nuclear@0
|
815 const char* pKey,
|
nuclear@0
|
816 unsigned int type = 0,
|
nuclear@0
|
817 unsigned int index = 0);
|
nuclear@0
|
818
|
nuclear@0
|
819 aiReturn AddProperty (const aiColor3D* pInput,
|
nuclear@0
|
820 unsigned int pNumValues,
|
nuclear@0
|
821 const char* pKey,
|
nuclear@0
|
822 unsigned int type = 0,
|
nuclear@0
|
823 unsigned int index = 0);
|
nuclear@0
|
824
|
nuclear@0
|
825 aiReturn AddProperty (const aiColor4D* pInput,
|
nuclear@0
|
826 unsigned int pNumValues,
|
nuclear@0
|
827 const char* pKey,
|
nuclear@0
|
828 unsigned int type = 0,
|
nuclear@0
|
829 unsigned int index = 0);
|
nuclear@0
|
830
|
nuclear@0
|
831 aiReturn AddProperty (const int* pInput,
|
nuclear@0
|
832 unsigned int pNumValues,
|
nuclear@0
|
833 const char* pKey,
|
nuclear@0
|
834 unsigned int type = 0,
|
nuclear@0
|
835 unsigned int index = 0);
|
nuclear@0
|
836
|
nuclear@0
|
837 aiReturn AddProperty (const float* pInput,
|
nuclear@0
|
838 unsigned int pNumValues,
|
nuclear@0
|
839 const char* pKey,
|
nuclear@0
|
840 unsigned int type = 0,
|
nuclear@0
|
841 unsigned int index = 0);
|
nuclear@0
|
842
|
nuclear@0
|
843 aiReturn AddProperty (const double* pInput,
|
nuclear@0
|
844 unsigned int pNumValues,
|
nuclear@0
|
845 const char* pKey,
|
nuclear@0
|
846 unsigned int type = 0,
|
nuclear@0
|
847 unsigned int index = 0);
|
nuclear@0
|
848
|
nuclear@0
|
849 aiReturn AddProperty (const aiUVTransform* pInput,
|
nuclear@0
|
850 unsigned int pNumValues,
|
nuclear@0
|
851 const char* pKey,
|
nuclear@0
|
852 unsigned int type = 0,
|
nuclear@0
|
853 unsigned int index = 0);
|
nuclear@0
|
854
|
nuclear@0
|
855 // ------------------------------------------------------------------------------
|
nuclear@0
|
856 /** @brief Remove a given key from the list.
|
nuclear@0
|
857 *
|
nuclear@0
|
858 * The function fails if the key isn't found
|
nuclear@0
|
859 * @param pKey Key to be deleted
|
nuclear@0
|
860 * @param type Set by the AI_MATKEY_XXX macro
|
nuclear@0
|
861 * @param index Set by the AI_MATKEY_XXX macro */
|
nuclear@0
|
862 aiReturn RemoveProperty (const char* pKey,
|
nuclear@0
|
863 unsigned int type = 0,
|
nuclear@0
|
864 unsigned int index = 0);
|
nuclear@0
|
865
|
nuclear@0
|
866 // ------------------------------------------------------------------------------
|
nuclear@0
|
867 /** @brief Removes all properties from the material.
|
nuclear@0
|
868 *
|
nuclear@0
|
869 * The data array remains allocated so adding new properties is quite fast. */
|
nuclear@0
|
870 void Clear();
|
nuclear@0
|
871
|
nuclear@0
|
872 // ------------------------------------------------------------------------------
|
nuclear@0
|
873 /** Copy the property list of a material
|
nuclear@0
|
874 * @param pcDest Destination material
|
nuclear@0
|
875 * @param pcSrc Source material
|
nuclear@0
|
876 */
|
nuclear@0
|
877 static void CopyPropertyList(aiMaterial* pcDest,
|
nuclear@0
|
878 const aiMaterial* pcSrc);
|
nuclear@0
|
879
|
nuclear@0
|
880
|
nuclear@0
|
881 #endif
|
nuclear@0
|
882
|
nuclear@0
|
883 /** List of all material properties loaded. */
|
nuclear@0
|
884 C_STRUCT aiMaterialProperty** mProperties;
|
nuclear@0
|
885
|
nuclear@0
|
886 /** Number of properties in the data base */
|
nuclear@0
|
887 unsigned int mNumProperties;
|
nuclear@0
|
888
|
nuclear@0
|
889 /** Storage allocated */
|
nuclear@0
|
890 unsigned int mNumAllocated;
|
nuclear@0
|
891 };
|
nuclear@0
|
892
|
nuclear@0
|
893 // Go back to extern "C" again
|
nuclear@0
|
894 #ifdef __cplusplus
|
nuclear@0
|
895 extern "C" {
|
nuclear@0
|
896 #endif
|
nuclear@0
|
897
|
nuclear@0
|
898 // ---------------------------------------------------------------------------
|
nuclear@0
|
899 #define AI_MATKEY_NAME "?mat.name",0,0
|
nuclear@0
|
900 #define AI_MATKEY_TWOSIDED "$mat.twosided",0,0
|
nuclear@0
|
901 #define AI_MATKEY_SHADING_MODEL "$mat.shadingm",0,0
|
nuclear@0
|
902 #define AI_MATKEY_ENABLE_WIREFRAME "$mat.wireframe",0,0
|
nuclear@0
|
903 #define AI_MATKEY_BLEND_FUNC "$mat.blend",0,0
|
nuclear@0
|
904 #define AI_MATKEY_OPACITY "$mat.opacity",0,0
|
nuclear@0
|
905 #define AI_MATKEY_BUMPSCALING "$mat.bumpscaling",0,0
|
nuclear@0
|
906 #define AI_MATKEY_SHININESS "$mat.shininess",0,0
|
nuclear@0
|
907 #define AI_MATKEY_REFLECTIVITY "$mat.reflectivity",0,0
|
nuclear@0
|
908 #define AI_MATKEY_SHININESS_STRENGTH "$mat.shinpercent",0,0
|
nuclear@0
|
909 #define AI_MATKEY_REFRACTI "$mat.refracti",0,0
|
nuclear@0
|
910 #define AI_MATKEY_COLOR_DIFFUSE "$clr.diffuse",0,0
|
nuclear@0
|
911 #define AI_MATKEY_COLOR_AMBIENT "$clr.ambient",0,0
|
nuclear@0
|
912 #define AI_MATKEY_COLOR_SPECULAR "$clr.specular",0,0
|
nuclear@0
|
913 #define AI_MATKEY_COLOR_EMISSIVE "$clr.emissive",0,0
|
nuclear@0
|
914 #define AI_MATKEY_COLOR_TRANSPARENT "$clr.transparent",0,0
|
nuclear@0
|
915 #define AI_MATKEY_COLOR_REFLECTIVE "$clr.reflective",0,0
|
nuclear@0
|
916 #define AI_MATKEY_GLOBAL_BACKGROUND_IMAGE "?bg.global",0,0
|
nuclear@0
|
917
|
nuclear@0
|
918 // ---------------------------------------------------------------------------
|
nuclear@0
|
919 // Pure key names for all texture-related properties
|
nuclear@0
|
920 //! @cond MATS_DOC_FULL
|
nuclear@0
|
921 #define _AI_MATKEY_TEXTURE_BASE "$tex.file"
|
nuclear@0
|
922 #define _AI_MATKEY_UVWSRC_BASE "$tex.uvwsrc"
|
nuclear@0
|
923 #define _AI_MATKEY_TEXOP_BASE "$tex.op"
|
nuclear@0
|
924 #define _AI_MATKEY_MAPPING_BASE "$tex.mapping"
|
nuclear@0
|
925 #define _AI_MATKEY_TEXBLEND_BASE "$tex.blend"
|
nuclear@0
|
926 #define _AI_MATKEY_MAPPINGMODE_U_BASE "$tex.mapmodeu"
|
nuclear@0
|
927 #define _AI_MATKEY_MAPPINGMODE_V_BASE "$tex.mapmodev"
|
nuclear@0
|
928 #define _AI_MATKEY_TEXMAP_AXIS_BASE "$tex.mapaxis"
|
nuclear@0
|
929 #define _AI_MATKEY_UVTRANSFORM_BASE "$tex.uvtrafo"
|
nuclear@0
|
930 #define _AI_MATKEY_TEXFLAGS_BASE "$tex.flags"
|
nuclear@0
|
931 //! @endcond
|
nuclear@0
|
932
|
nuclear@0
|
933 // ---------------------------------------------------------------------------
|
nuclear@0
|
934 #define AI_MATKEY_TEXTURE(type, N) _AI_MATKEY_TEXTURE_BASE,type,N
|
nuclear@0
|
935
|
nuclear@0
|
936 // For backward compatibility and simplicity
|
nuclear@0
|
937 //! @cond MATS_DOC_FULL
|
nuclear@0
|
938 #define AI_MATKEY_TEXTURE_DIFFUSE(N) \
|
nuclear@0
|
939 AI_MATKEY_TEXTURE(aiTextureType_DIFFUSE,N)
|
nuclear@0
|
940
|
nuclear@0
|
941 #define AI_MATKEY_TEXTURE_SPECULAR(N) \
|
nuclear@0
|
942 AI_MATKEY_TEXTURE(aiTextureType_SPECULAR,N)
|
nuclear@0
|
943
|
nuclear@0
|
944 #define AI_MATKEY_TEXTURE_AMBIENT(N) \
|
nuclear@0
|
945 AI_MATKEY_TEXTURE(aiTextureType_AMBIENT,N)
|
nuclear@0
|
946
|
nuclear@0
|
947 #define AI_MATKEY_TEXTURE_EMISSIVE(N) \
|
nuclear@0
|
948 AI_MATKEY_TEXTURE(aiTextureType_EMISSIVE,N)
|
nuclear@0
|
949
|
nuclear@0
|
950 #define AI_MATKEY_TEXTURE_NORMALS(N) \
|
nuclear@0
|
951 AI_MATKEY_TEXTURE(aiTextureType_NORMALS,N)
|
nuclear@0
|
952
|
nuclear@0
|
953 #define AI_MATKEY_TEXTURE_HEIGHT(N) \
|
nuclear@0
|
954 AI_MATKEY_TEXTURE(aiTextureType_HEIGHT,N)
|
nuclear@0
|
955
|
nuclear@0
|
956 #define AI_MATKEY_TEXTURE_SHININESS(N) \
|
nuclear@0
|
957 AI_MATKEY_TEXTURE(aiTextureType_SHININESS,N)
|
nuclear@0
|
958
|
nuclear@0
|
959 #define AI_MATKEY_TEXTURE_OPACITY(N) \
|
nuclear@0
|
960 AI_MATKEY_TEXTURE(aiTextureType_OPACITY,N)
|
nuclear@0
|
961
|
nuclear@0
|
962 #define AI_MATKEY_TEXTURE_DISPLACEMENT(N) \
|
nuclear@0
|
963 AI_MATKEY_TEXTURE(aiTextureType_DISPLACEMENT,N)
|
nuclear@0
|
964
|
nuclear@0
|
965 #define AI_MATKEY_TEXTURE_LIGHTMAP(N) \
|
nuclear@0
|
966 AI_MATKEY_TEXTURE(aiTextureType_LIGHTMAP,N)
|
nuclear@0
|
967
|
nuclear@0
|
968 #define AI_MATKEY_TEXTURE_REFLECTION(N) \
|
nuclear@0
|
969 AI_MATKEY_TEXTURE(aiTextureType_REFLECTION,N)
|
nuclear@0
|
970
|
nuclear@0
|
971 //! @endcond
|
nuclear@0
|
972
|
nuclear@0
|
973 // ---------------------------------------------------------------------------
|
nuclear@0
|
974 #define AI_MATKEY_UVWSRC(type, N) _AI_MATKEY_UVWSRC_BASE,type,N
|
nuclear@0
|
975
|
nuclear@0
|
976 // For backward compatibility and simplicity
|
nuclear@0
|
977 //! @cond MATS_DOC_FULL
|
nuclear@0
|
978 #define AI_MATKEY_UVWSRC_DIFFUSE(N) \
|
nuclear@0
|
979 AI_MATKEY_UVWSRC(aiTextureType_DIFFUSE,N)
|
nuclear@0
|
980
|
nuclear@0
|
981 #define AI_MATKEY_UVWSRC_SPECULAR(N) \
|
nuclear@0
|
982 AI_MATKEY_UVWSRC(aiTextureType_SPECULAR,N)
|
nuclear@0
|
983
|
nuclear@0
|
984 #define AI_MATKEY_UVWSRC_AMBIENT(N) \
|
nuclear@0
|
985 AI_MATKEY_UVWSRC(aiTextureType_AMBIENT,N)
|
nuclear@0
|
986
|
nuclear@0
|
987 #define AI_MATKEY_UVWSRC_EMISSIVE(N) \
|
nuclear@0
|
988 AI_MATKEY_UVWSRC(aiTextureType_EMISSIVE,N)
|
nuclear@0
|
989
|
nuclear@0
|
990 #define AI_MATKEY_UVWSRC_NORMALS(N) \
|
nuclear@0
|
991 AI_MATKEY_UVWSRC(aiTextureType_NORMALS,N)
|
nuclear@0
|
992
|
nuclear@0
|
993 #define AI_MATKEY_UVWSRC_HEIGHT(N) \
|
nuclear@0
|
994 AI_MATKEY_UVWSRC(aiTextureType_HEIGHT,N)
|
nuclear@0
|
995
|
nuclear@0
|
996 #define AI_MATKEY_UVWSRC_SHININESS(N) \
|
nuclear@0
|
997 AI_MATKEY_UVWSRC(aiTextureType_SHININESS,N)
|
nuclear@0
|
998
|
nuclear@0
|
999 #define AI_MATKEY_UVWSRC_OPACITY(N) \
|
nuclear@0
|
1000 AI_MATKEY_UVWSRC(aiTextureType_OPACITY,N)
|
nuclear@0
|
1001
|
nuclear@0
|
1002 #define AI_MATKEY_UVWSRC_DISPLACEMENT(N) \
|
nuclear@0
|
1003 AI_MATKEY_UVWSRC(aiTextureType_DISPLACEMENT,N)
|
nuclear@0
|
1004
|
nuclear@0
|
1005 #define AI_MATKEY_UVWSRC_LIGHTMAP(N) \
|
nuclear@0
|
1006 AI_MATKEY_UVWSRC(aiTextureType_LIGHTMAP,N)
|
nuclear@0
|
1007
|
nuclear@0
|
1008 #define AI_MATKEY_UVWSRC_REFLECTION(N) \
|
nuclear@0
|
1009 AI_MATKEY_UVWSRC(aiTextureType_REFLECTION,N)
|
nuclear@0
|
1010
|
nuclear@0
|
1011 //! @endcond
|
nuclear@0
|
1012 // ---------------------------------------------------------------------------
|
nuclear@0
|
1013 #define AI_MATKEY_TEXOP(type, N) _AI_MATKEY_TEXOP_BASE,type,N
|
nuclear@0
|
1014
|
nuclear@0
|
1015 // For backward compatibility and simplicity
|
nuclear@0
|
1016 //! @cond MATS_DOC_FULL
|
nuclear@0
|
1017 #define AI_MATKEY_TEXOP_DIFFUSE(N) \
|
nuclear@0
|
1018 AI_MATKEY_TEXOP(aiTextureType_DIFFUSE,N)
|
nuclear@0
|
1019
|
nuclear@0
|
1020 #define AI_MATKEY_TEXOP_SPECULAR(N) \
|
nuclear@0
|
1021 AI_MATKEY_TEXOP(aiTextureType_SPECULAR,N)
|
nuclear@0
|
1022
|
nuclear@0
|
1023 #define AI_MATKEY_TEXOP_AMBIENT(N) \
|
nuclear@0
|
1024 AI_MATKEY_TEXOP(aiTextureType_AMBIENT,N)
|
nuclear@0
|
1025
|
nuclear@0
|
1026 #define AI_MATKEY_TEXOP_EMISSIVE(N) \
|
nuclear@0
|
1027 AI_MATKEY_TEXOP(aiTextureType_EMISSIVE,N)
|
nuclear@0
|
1028
|
nuclear@0
|
1029 #define AI_MATKEY_TEXOP_NORMALS(N) \
|
nuclear@0
|
1030 AI_MATKEY_TEXOP(aiTextureType_NORMALS,N)
|
nuclear@0
|
1031
|
nuclear@0
|
1032 #define AI_MATKEY_TEXOP_HEIGHT(N) \
|
nuclear@0
|
1033 AI_MATKEY_TEXOP(aiTextureType_HEIGHT,N)
|
nuclear@0
|
1034
|
nuclear@0
|
1035 #define AI_MATKEY_TEXOP_SHININESS(N) \
|
nuclear@0
|
1036 AI_MATKEY_TEXOP(aiTextureType_SHININESS,N)
|
nuclear@0
|
1037
|
nuclear@0
|
1038 #define AI_MATKEY_TEXOP_OPACITY(N) \
|
nuclear@0
|
1039 AI_MATKEY_TEXOP(aiTextureType_OPACITY,N)
|
nuclear@0
|
1040
|
nuclear@0
|
1041 #define AI_MATKEY_TEXOP_DISPLACEMENT(N) \
|
nuclear@0
|
1042 AI_MATKEY_TEXOP(aiTextureType_DISPLACEMENT,N)
|
nuclear@0
|
1043
|
nuclear@0
|
1044 #define AI_MATKEY_TEXOP_LIGHTMAP(N) \
|
nuclear@0
|
1045 AI_MATKEY_TEXOP(aiTextureType_LIGHTMAP,N)
|
nuclear@0
|
1046
|
nuclear@0
|
1047 #define AI_MATKEY_TEXOP_REFLECTION(N) \
|
nuclear@0
|
1048 AI_MATKEY_TEXOP(aiTextureType_REFLECTION,N)
|
nuclear@0
|
1049
|
nuclear@0
|
1050 //! @endcond
|
nuclear@0
|
1051 // ---------------------------------------------------------------------------
|
nuclear@0
|
1052 #define AI_MATKEY_MAPPING(type, N) _AI_MATKEY_MAPPING_BASE,type,N
|
nuclear@0
|
1053
|
nuclear@0
|
1054 // For backward compatibility and simplicity
|
nuclear@0
|
1055 //! @cond MATS_DOC_FULL
|
nuclear@0
|
1056 #define AI_MATKEY_MAPPING_DIFFUSE(N) \
|
nuclear@0
|
1057 AI_MATKEY_MAPPING(aiTextureType_DIFFUSE,N)
|
nuclear@0
|
1058
|
nuclear@0
|
1059 #define AI_MATKEY_MAPPING_SPECULAR(N) \
|
nuclear@0
|
1060 AI_MATKEY_MAPPING(aiTextureType_SPECULAR,N)
|
nuclear@0
|
1061
|
nuclear@0
|
1062 #define AI_MATKEY_MAPPING_AMBIENT(N) \
|
nuclear@0
|
1063 AI_MATKEY_MAPPING(aiTextureType_AMBIENT,N)
|
nuclear@0
|
1064
|
nuclear@0
|
1065 #define AI_MATKEY_MAPPING_EMISSIVE(N) \
|
nuclear@0
|
1066 AI_MATKEY_MAPPING(aiTextureType_EMISSIVE,N)
|
nuclear@0
|
1067
|
nuclear@0
|
1068 #define AI_MATKEY_MAPPING_NORMALS(N) \
|
nuclear@0
|
1069 AI_MATKEY_MAPPING(aiTextureType_NORMALS,N)
|
nuclear@0
|
1070
|
nuclear@0
|
1071 #define AI_MATKEY_MAPPING_HEIGHT(N) \
|
nuclear@0
|
1072 AI_MATKEY_MAPPING(aiTextureType_HEIGHT,N)
|
nuclear@0
|
1073
|
nuclear@0
|
1074 #define AI_MATKEY_MAPPING_SHININESS(N) \
|
nuclear@0
|
1075 AI_MATKEY_MAPPING(aiTextureType_SHININESS,N)
|
nuclear@0
|
1076
|
nuclear@0
|
1077 #define AI_MATKEY_MAPPING_OPACITY(N) \
|
nuclear@0
|
1078 AI_MATKEY_MAPPING(aiTextureType_OPACITY,N)
|
nuclear@0
|
1079
|
nuclear@0
|
1080 #define AI_MATKEY_MAPPING_DISPLACEMENT(N) \
|
nuclear@0
|
1081 AI_MATKEY_MAPPING(aiTextureType_DISPLACEMENT,N)
|
nuclear@0
|
1082
|
nuclear@0
|
1083 #define AI_MATKEY_MAPPING_LIGHTMAP(N) \
|
nuclear@0
|
1084 AI_MATKEY_MAPPING(aiTextureType_LIGHTMAP,N)
|
nuclear@0
|
1085
|
nuclear@0
|
1086 #define AI_MATKEY_MAPPING_REFLECTION(N) \
|
nuclear@0
|
1087 AI_MATKEY_MAPPING(aiTextureType_REFLECTION,N)
|
nuclear@0
|
1088
|
nuclear@0
|
1089 //! @endcond
|
nuclear@0
|
1090 // ---------------------------------------------------------------------------
|
nuclear@0
|
1091 #define AI_MATKEY_TEXBLEND(type, N) _AI_MATKEY_TEXBLEND_BASE,type,N
|
nuclear@0
|
1092
|
nuclear@0
|
1093 // For backward compatibility and simplicity
|
nuclear@0
|
1094 //! @cond MATS_DOC_FULL
|
nuclear@0
|
1095 #define AI_MATKEY_TEXBLEND_DIFFUSE(N) \
|
nuclear@0
|
1096 AI_MATKEY_TEXBLEND(aiTextureType_DIFFUSE,N)
|
nuclear@0
|
1097
|
nuclear@0
|
1098 #define AI_MATKEY_TEXBLEND_SPECULAR(N) \
|
nuclear@0
|
1099 AI_MATKEY_TEXBLEND(aiTextureType_SPECULAR,N)
|
nuclear@0
|
1100
|
nuclear@0
|
1101 #define AI_MATKEY_TEXBLEND_AMBIENT(N) \
|
nuclear@0
|
1102 AI_MATKEY_TEXBLEND(aiTextureType_AMBIENT,N)
|
nuclear@0
|
1103
|
nuclear@0
|
1104 #define AI_MATKEY_TEXBLEND_EMISSIVE(N) \
|
nuclear@0
|
1105 AI_MATKEY_TEXBLEND(aiTextureType_EMISSIVE,N)
|
nuclear@0
|
1106
|
nuclear@0
|
1107 #define AI_MATKEY_TEXBLEND_NORMALS(N) \
|
nuclear@0
|
1108 AI_MATKEY_TEXBLEND(aiTextureType_NORMALS,N)
|
nuclear@0
|
1109
|
nuclear@0
|
1110 #define AI_MATKEY_TEXBLEND_HEIGHT(N) \
|
nuclear@0
|
1111 AI_MATKEY_TEXBLEND(aiTextureType_HEIGHT,N)
|
nuclear@0
|
1112
|
nuclear@0
|
1113 #define AI_MATKEY_TEXBLEND_SHININESS(N) \
|
nuclear@0
|
1114 AI_MATKEY_TEXBLEND(aiTextureType_SHININESS,N)
|
nuclear@0
|
1115
|
nuclear@0
|
1116 #define AI_MATKEY_TEXBLEND_OPACITY(N) \
|
nuclear@0
|
1117 AI_MATKEY_TEXBLEND(aiTextureType_OPACITY,N)
|
nuclear@0
|
1118
|
nuclear@0
|
1119 #define AI_MATKEY_TEXBLEND_DISPLACEMENT(N) \
|
nuclear@0
|
1120 AI_MATKEY_TEXBLEND(aiTextureType_DISPLACEMENT,N)
|
nuclear@0
|
1121
|
nuclear@0
|
1122 #define AI_MATKEY_TEXBLEND_LIGHTMAP(N) \
|
nuclear@0
|
1123 AI_MATKEY_TEXBLEND(aiTextureType_LIGHTMAP,N)
|
nuclear@0
|
1124
|
nuclear@0
|
1125 #define AI_MATKEY_TEXBLEND_REFLECTION(N) \
|
nuclear@0
|
1126 AI_MATKEY_TEXBLEND(aiTextureType_REFLECTION,N)
|
nuclear@0
|
1127
|
nuclear@0
|
1128 //! @endcond
|
nuclear@0
|
1129 // ---------------------------------------------------------------------------
|
nuclear@0
|
1130 #define AI_MATKEY_MAPPINGMODE_U(type, N) _AI_MATKEY_MAPPINGMODE_U_BASE,type,N
|
nuclear@0
|
1131
|
nuclear@0
|
1132 // For backward compatibility and simplicity
|
nuclear@0
|
1133 //! @cond MATS_DOC_FULL
|
nuclear@0
|
1134 #define AI_MATKEY_MAPPINGMODE_U_DIFFUSE(N) \
|
nuclear@0
|
1135 AI_MATKEY_MAPPINGMODE_U(aiTextureType_DIFFUSE,N)
|
nuclear@0
|
1136
|
nuclear@0
|
1137 #define AI_MATKEY_MAPPINGMODE_U_SPECULAR(N) \
|
nuclear@0
|
1138 AI_MATKEY_MAPPINGMODE_U(aiTextureType_SPECULAR,N)
|
nuclear@0
|
1139
|
nuclear@0
|
1140 #define AI_MATKEY_MAPPINGMODE_U_AMBIENT(N) \
|
nuclear@0
|
1141 AI_MATKEY_MAPPINGMODE_U(aiTextureType_AMBIENT,N)
|
nuclear@0
|
1142
|
nuclear@0
|
1143 #define AI_MATKEY_MAPPINGMODE_U_EMISSIVE(N) \
|
nuclear@0
|
1144 AI_MATKEY_MAPPINGMODE_U(aiTextureType_EMISSIVE,N)
|
nuclear@0
|
1145
|
nuclear@0
|
1146 #define AI_MATKEY_MAPPINGMODE_U_NORMALS(N) \
|
nuclear@0
|
1147 AI_MATKEY_MAPPINGMODE_U(aiTextureType_NORMALS,N)
|
nuclear@0
|
1148
|
nuclear@0
|
1149 #define AI_MATKEY_MAPPINGMODE_U_HEIGHT(N) \
|
nuclear@0
|
1150 AI_MATKEY_MAPPINGMODE_U(aiTextureType_HEIGHT,N)
|
nuclear@0
|
1151
|
nuclear@0
|
1152 #define AI_MATKEY_MAPPINGMODE_U_SHININESS(N) \
|
nuclear@0
|
1153 AI_MATKEY_MAPPINGMODE_U(aiTextureType_SHININESS,N)
|
nuclear@0
|
1154
|
nuclear@0
|
1155 #define AI_MATKEY_MAPPINGMODE_U_OPACITY(N) \
|
nuclear@0
|
1156 AI_MATKEY_MAPPINGMODE_U(aiTextureType_OPACITY,N)
|
nuclear@0
|
1157
|
nuclear@0
|
1158 #define AI_MATKEY_MAPPINGMODE_U_DISPLACEMENT(N) \
|
nuclear@0
|
1159 AI_MATKEY_MAPPINGMODE_U(aiTextureType_DISPLACEMENT,N)
|
nuclear@0
|
1160
|
nuclear@0
|
1161 #define AI_MATKEY_MAPPINGMODE_U_LIGHTMAP(N) \
|
nuclear@0
|
1162 AI_MATKEY_MAPPINGMODE_U(aiTextureType_LIGHTMAP,N)
|
nuclear@0
|
1163
|
nuclear@0
|
1164 #define AI_MATKEY_MAPPINGMODE_U_REFLECTION(N) \
|
nuclear@0
|
1165 AI_MATKEY_MAPPINGMODE_U(aiTextureType_REFLECTION,N)
|
nuclear@0
|
1166
|
nuclear@0
|
1167 //! @endcond
|
nuclear@0
|
1168 // ---------------------------------------------------------------------------
|
nuclear@0
|
1169 #define AI_MATKEY_MAPPINGMODE_V(type, N) _AI_MATKEY_MAPPINGMODE_V_BASE,type,N
|
nuclear@0
|
1170
|
nuclear@0
|
1171 // For backward compatibility and simplicity
|
nuclear@0
|
1172 //! @cond MATS_DOC_FULL
|
nuclear@0
|
1173 #define AI_MATKEY_MAPPINGMODE_V_DIFFUSE(N) \
|
nuclear@0
|
1174 AI_MATKEY_MAPPINGMODE_V(aiTextureType_DIFFUSE,N)
|
nuclear@0
|
1175
|
nuclear@0
|
1176 #define AI_MATKEY_MAPPINGMODE_V_SPECULAR(N) \
|
nuclear@0
|
1177 AI_MATKEY_MAPPINGMODE_V(aiTextureType_SPECULAR,N)
|
nuclear@0
|
1178
|
nuclear@0
|
1179 #define AI_MATKEY_MAPPINGMODE_V_AMBIENT(N) \
|
nuclear@0
|
1180 AI_MATKEY_MAPPINGMODE_V(aiTextureType_AMBIENT,N)
|
nuclear@0
|
1181
|
nuclear@0
|
1182 #define AI_MATKEY_MAPPINGMODE_V_EMISSIVE(N) \
|
nuclear@0
|
1183 AI_MATKEY_MAPPINGMODE_V(aiTextureType_EMISSIVE,N)
|
nuclear@0
|
1184
|
nuclear@0
|
1185 #define AI_MATKEY_MAPPINGMODE_V_NORMALS(N) \
|
nuclear@0
|
1186 AI_MATKEY_MAPPINGMODE_V(aiTextureType_NORMALS,N)
|
nuclear@0
|
1187
|
nuclear@0
|
1188 #define AI_MATKEY_MAPPINGMODE_V_HEIGHT(N) \
|
nuclear@0
|
1189 AI_MATKEY_MAPPINGMODE_V(aiTextureType_HEIGHT,N)
|
nuclear@0
|
1190
|
nuclear@0
|
1191 #define AI_MATKEY_MAPPINGMODE_V_SHININESS(N) \
|
nuclear@0
|
1192 AI_MATKEY_MAPPINGMODE_V(aiTextureType_SHININESS,N)
|
nuclear@0
|
1193
|
nuclear@0
|
1194 #define AI_MATKEY_MAPPINGMODE_V_OPACITY(N) \
|
nuclear@0
|
1195 AI_MATKEY_MAPPINGMODE_V(aiTextureType_OPACITY,N)
|
nuclear@0
|
1196
|
nuclear@0
|
1197 #define AI_MATKEY_MAPPINGMODE_V_DISPLACEMENT(N) \
|
nuclear@0
|
1198 AI_MATKEY_MAPPINGMODE_V(aiTextureType_DISPLACEMENT,N)
|
nuclear@0
|
1199
|
nuclear@0
|
1200 #define AI_MATKEY_MAPPINGMODE_V_LIGHTMAP(N) \
|
nuclear@0
|
1201 AI_MATKEY_MAPPINGMODE_V(aiTextureType_LIGHTMAP,N)
|
nuclear@0
|
1202
|
nuclear@0
|
1203 #define AI_MATKEY_MAPPINGMODE_V_REFLECTION(N) \
|
nuclear@0
|
1204 AI_MATKEY_MAPPINGMODE_V(aiTextureType_REFLECTION,N)
|
nuclear@0
|
1205
|
nuclear@0
|
1206 //! @endcond
|
nuclear@0
|
1207 // ---------------------------------------------------------------------------
|
nuclear@0
|
1208 #define AI_MATKEY_TEXMAP_AXIS(type, N) _AI_MATKEY_TEXMAP_AXIS_BASE,type,N
|
nuclear@0
|
1209
|
nuclear@0
|
1210 // For backward compatibility and simplicity
|
nuclear@0
|
1211 //! @cond MATS_DOC_FULL
|
nuclear@0
|
1212 #define AI_MATKEY_TEXMAP_AXIS_DIFFUSE(N) \
|
nuclear@0
|
1213 AI_MATKEY_TEXMAP_AXIS(aiTextureType_DIFFUSE,N)
|
nuclear@0
|
1214
|
nuclear@0
|
1215 #define AI_MATKEY_TEXMAP_AXIS_SPECULAR(N) \
|
nuclear@0
|
1216 AI_MATKEY_TEXMAP_AXIS(aiTextureType_SPECULAR,N)
|
nuclear@0
|
1217
|
nuclear@0
|
1218 #define AI_MATKEY_TEXMAP_AXIS_AMBIENT(N) \
|
nuclear@0
|
1219 AI_MATKEY_TEXMAP_AXIS(aiTextureType_AMBIENT,N)
|
nuclear@0
|
1220
|
nuclear@0
|
1221 #define AI_MATKEY_TEXMAP_AXIS_EMISSIVE(N) \
|
nuclear@0
|
1222 AI_MATKEY_TEXMAP_AXIS(aiTextureType_EMISSIVE,N)
|
nuclear@0
|
1223
|
nuclear@0
|
1224 #define AI_MATKEY_TEXMAP_AXIS_NORMALS(N) \
|
nuclear@0
|
1225 AI_MATKEY_TEXMAP_AXIS(aiTextureType_NORMALS,N)
|
nuclear@0
|
1226
|
nuclear@0
|
1227 #define AI_MATKEY_TEXMAP_AXIS_HEIGHT(N) \
|
nuclear@0
|
1228 AI_MATKEY_TEXMAP_AXIS(aiTextureType_HEIGHT,N)
|
nuclear@0
|
1229
|
nuclear@0
|
1230 #define AI_MATKEY_TEXMAP_AXIS_SHININESS(N) \
|
nuclear@0
|
1231 AI_MATKEY_TEXMAP_AXIS(aiTextureType_SHININESS,N)
|
nuclear@0
|
1232
|
nuclear@0
|
1233 #define AI_MATKEY_TEXMAP_AXIS_OPACITY(N) \
|
nuclear@0
|
1234 AI_MATKEY_TEXMAP_AXIS(aiTextureType_OPACITY,N)
|
nuclear@0
|
1235
|
nuclear@0
|
1236 #define AI_MATKEY_TEXMAP_AXIS_DISPLACEMENT(N) \
|
nuclear@0
|
1237 AI_MATKEY_TEXMAP_AXIS(aiTextureType_DISPLACEMENT,N)
|
nuclear@0
|
1238
|
nuclear@0
|
1239 #define AI_MATKEY_TEXMAP_AXIS_LIGHTMAP(N) \
|
nuclear@0
|
1240 AI_MATKEY_TEXMAP_AXIS(aiTextureType_LIGHTMAP,N)
|
nuclear@0
|
1241
|
nuclear@0
|
1242 #define AI_MATKEY_TEXMAP_AXIS_REFLECTION(N) \
|
nuclear@0
|
1243 AI_MATKEY_TEXMAP_AXIS(aiTextureType_REFLECTION,N)
|
nuclear@0
|
1244
|
nuclear@0
|
1245 //! @endcond
|
nuclear@0
|
1246 // ---------------------------------------------------------------------------
|
nuclear@0
|
1247 #define AI_MATKEY_UVTRANSFORM(type, N) _AI_MATKEY_UVTRANSFORM_BASE,type,N
|
nuclear@0
|
1248
|
nuclear@0
|
1249 // For backward compatibility and simplicity
|
nuclear@0
|
1250 //! @cond MATS_DOC_FULL
|
nuclear@0
|
1251 #define AI_MATKEY_UVTRANSFORM_DIFFUSE(N) \
|
nuclear@0
|
1252 AI_MATKEY_UVTRANSFORM(aiTextureType_DIFFUSE,N)
|
nuclear@0
|
1253
|
nuclear@0
|
1254 #define AI_MATKEY_UVTRANSFORM_SPECULAR(N) \
|
nuclear@0
|
1255 AI_MATKEY_UVTRANSFORM(aiTextureType_SPECULAR,N)
|
nuclear@0
|
1256
|
nuclear@0
|
1257 #define AI_MATKEY_UVTRANSFORM_AMBIENT(N) \
|
nuclear@0
|
1258 AI_MATKEY_UVTRANSFORM(aiTextureType_AMBIENT,N)
|
nuclear@0
|
1259
|
nuclear@0
|
1260 #define AI_MATKEY_UVTRANSFORM_EMISSIVE(N) \
|
nuclear@0
|
1261 AI_MATKEY_UVTRANSFORM(aiTextureType_EMISSIVE,N)
|
nuclear@0
|
1262
|
nuclear@0
|
1263 #define AI_MATKEY_UVTRANSFORM_NORMALS(N) \
|
nuclear@0
|
1264 AI_MATKEY_UVTRANSFORM(aiTextureType_NORMALS,N)
|
nuclear@0
|
1265
|
nuclear@0
|
1266 #define AI_MATKEY_UVTRANSFORM_HEIGHT(N) \
|
nuclear@0
|
1267 AI_MATKEY_UVTRANSFORM(aiTextureType_HEIGHT,N)
|
nuclear@0
|
1268
|
nuclear@0
|
1269 #define AI_MATKEY_UVTRANSFORM_SHININESS(N) \
|
nuclear@0
|
1270 AI_MATKEY_UVTRANSFORM(aiTextureType_SHININESS,N)
|
nuclear@0
|
1271
|
nuclear@0
|
1272 #define AI_MATKEY_UVTRANSFORM_OPACITY(N) \
|
nuclear@0
|
1273 AI_MATKEY_UVTRANSFORM(aiTextureType_OPACITY,N)
|
nuclear@0
|
1274
|
nuclear@0
|
1275 #define AI_MATKEY_UVTRANSFORM_DISPLACEMENT(N) \
|
nuclear@0
|
1276 AI_MATKEY_UVTRANSFORM(aiTextureType_DISPLACEMENT,N)
|
nuclear@0
|
1277
|
nuclear@0
|
1278 #define AI_MATKEY_UVTRANSFORM_LIGHTMAP(N) \
|
nuclear@0
|
1279 AI_MATKEY_UVTRANSFORM(aiTextureType_LIGHTMAP,N)
|
nuclear@0
|
1280
|
nuclear@0
|
1281 #define AI_MATKEY_UVTRANSFORM_REFLECTION(N) \
|
nuclear@0
|
1282 AI_MATKEY_UVTRANSFORM(aiTextureType_REFLECTION,N)
|
nuclear@0
|
1283
|
nuclear@0
|
1284 #define AI_MATKEY_UVTRANSFORM_UNKNOWN(N) \
|
nuclear@0
|
1285 AI_MATKEY_UVTRANSFORM(aiTextureType_UNKNOWN,N)
|
nuclear@0
|
1286
|
nuclear@0
|
1287 //! @endcond
|
nuclear@0
|
1288 // ---------------------------------------------------------------------------
|
nuclear@0
|
1289 #define AI_MATKEY_TEXFLAGS(type, N) _AI_MATKEY_TEXFLAGS_BASE,type,N
|
nuclear@0
|
1290
|
nuclear@0
|
1291 // For backward compatibility and simplicity
|
nuclear@0
|
1292 //! @cond MATS_DOC_FULL
|
nuclear@0
|
1293 #define AI_MATKEY_TEXFLAGS_DIFFUSE(N) \
|
nuclear@0
|
1294 AI_MATKEY_TEXFLAGS(aiTextureType_DIFFUSE,N)
|
nuclear@0
|
1295
|
nuclear@0
|
1296 #define AI_MATKEY_TEXFLAGS_SPECULAR(N) \
|
nuclear@0
|
1297 AI_MATKEY_TEXFLAGS(aiTextureType_SPECULAR,N)
|
nuclear@0
|
1298
|
nuclear@0
|
1299 #define AI_MATKEY_TEXFLAGS_AMBIENT(N) \
|
nuclear@0
|
1300 AI_MATKEY_TEXFLAGS(aiTextureType_AMBIENT,N)
|
nuclear@0
|
1301
|
nuclear@0
|
1302 #define AI_MATKEY_TEXFLAGS_EMISSIVE(N) \
|
nuclear@0
|
1303 AI_MATKEY_TEXFLAGS(aiTextureType_EMISSIVE,N)
|
nuclear@0
|
1304
|
nuclear@0
|
1305 #define AI_MATKEY_TEXFLAGS_NORMALS(N) \
|
nuclear@0
|
1306 AI_MATKEY_TEXFLAGS(aiTextureType_NORMALS,N)
|
nuclear@0
|
1307
|
nuclear@0
|
1308 #define AI_MATKEY_TEXFLAGS_HEIGHT(N) \
|
nuclear@0
|
1309 AI_MATKEY_TEXFLAGS(aiTextureType_HEIGHT,N)
|
nuclear@0
|
1310
|
nuclear@0
|
1311 #define AI_MATKEY_TEXFLAGS_SHININESS(N) \
|
nuclear@0
|
1312 AI_MATKEY_TEXFLAGS(aiTextureType_SHININESS,N)
|
nuclear@0
|
1313
|
nuclear@0
|
1314 #define AI_MATKEY_TEXFLAGS_OPACITY(N) \
|
nuclear@0
|
1315 AI_MATKEY_TEXFLAGS(aiTextureType_OPACITY,N)
|
nuclear@0
|
1316
|
nuclear@0
|
1317 #define AI_MATKEY_TEXFLAGS_DISPLACEMENT(N) \
|
nuclear@0
|
1318 AI_MATKEY_TEXFLAGS(aiTextureType_DISPLACEMENT,N)
|
nuclear@0
|
1319
|
nuclear@0
|
1320 #define AI_MATKEY_TEXFLAGS_LIGHTMAP(N) \
|
nuclear@0
|
1321 AI_MATKEY_TEXFLAGS(aiTextureType_LIGHTMAP,N)
|
nuclear@0
|
1322
|
nuclear@0
|
1323 #define AI_MATKEY_TEXFLAGS_REFLECTION(N) \
|
nuclear@0
|
1324 AI_MATKEY_TEXFLAGS(aiTextureType_REFLECTION,N)
|
nuclear@0
|
1325
|
nuclear@0
|
1326 #define AI_MATKEY_TEXFLAGS_UNKNOWN(N) \
|
nuclear@0
|
1327 AI_MATKEY_TEXFLAGS(aiTextureType_UNKNOWN,N)
|
nuclear@0
|
1328
|
nuclear@0
|
1329 //! @endcond
|
nuclear@0
|
1330 //!
|
nuclear@0
|
1331 // ---------------------------------------------------------------------------
|
nuclear@0
|
1332 /** @brief Retrieve a material property with a specific key from the material
|
nuclear@0
|
1333 *
|
nuclear@0
|
1334 * @param pMat Pointer to the input material. May not be NULL
|
nuclear@0
|
1335 * @param pKey Key to search for. One of the AI_MATKEY_XXX constants.
|
nuclear@0
|
1336 * @param type Specifies the type of the texture to be retrieved (
|
nuclear@0
|
1337 * e.g. diffuse, specular, height map ...)
|
nuclear@0
|
1338 * @param index Index of the texture to be retrieved.
|
nuclear@0
|
1339 * @param pPropOut Pointer to receive a pointer to a valid aiMaterialProperty
|
nuclear@0
|
1340 * structure or NULL if the key has not been found. */
|
nuclear@0
|
1341 // ---------------------------------------------------------------------------
|
nuclear@0
|
1342 ASSIMP_API C_ENUM aiReturn aiGetMaterialProperty(
|
nuclear@0
|
1343 const C_STRUCT aiMaterial* pMat,
|
nuclear@0
|
1344 const char* pKey,
|
nuclear@0
|
1345 unsigned int type,
|
nuclear@0
|
1346 unsigned int index,
|
nuclear@0
|
1347 const C_STRUCT aiMaterialProperty** pPropOut);
|
nuclear@0
|
1348
|
nuclear@0
|
1349 // ---------------------------------------------------------------------------
|
nuclear@0
|
1350 /** @brief Retrieve an array of float values with a specific key
|
nuclear@0
|
1351 * from the material
|
nuclear@0
|
1352 *
|
nuclear@0
|
1353 * Pass one of the AI_MATKEY_XXX constants for the last three parameters (the
|
nuclear@0
|
1354 * example reads the #AI_MATKEY_UVTRANSFORM property of the first diffuse texture)
|
nuclear@0
|
1355 * @code
|
nuclear@0
|
1356 * aiUVTransform trafo;
|
nuclear@0
|
1357 * unsigned int max = sizeof(aiUVTransform);
|
nuclear@0
|
1358 * if (AI_SUCCESS != aiGetMaterialFloatArray(mat, AI_MATKEY_UVTRANSFORM(aiTextureType_DIFFUSE,0),
|
nuclear@0
|
1359 * (float*)&trafo, &max) || sizeof(aiUVTransform) != max)
|
nuclear@0
|
1360 * {
|
nuclear@0
|
1361 * // error handling
|
nuclear@0
|
1362 * }
|
nuclear@0
|
1363 * @endcode
|
nuclear@0
|
1364 *
|
nuclear@0
|
1365 * @param pMat Pointer to the input material. May not be NULL
|
nuclear@0
|
1366 * @param pKey Key to search for. One of the AI_MATKEY_XXX constants.
|
nuclear@0
|
1367 * @param pOut Pointer to a buffer to receive the result.
|
nuclear@0
|
1368 * @param pMax Specifies the size of the given buffer, in float's.
|
nuclear@0
|
1369 * Receives the number of values (not bytes!) read.
|
nuclear@0
|
1370 * @param type (see the code sample above)
|
nuclear@0
|
1371 * @param index (see the code sample above)
|
nuclear@0
|
1372 * @return Specifies whether the key has been found. If not, the output
|
nuclear@0
|
1373 * arrays remains unmodified and pMax is set to 0.*/
|
nuclear@0
|
1374 // ---------------------------------------------------------------------------
|
nuclear@0
|
1375 ASSIMP_API C_ENUM aiReturn aiGetMaterialFloatArray(
|
nuclear@0
|
1376 const C_STRUCT aiMaterial* pMat,
|
nuclear@0
|
1377 const char* pKey,
|
nuclear@0
|
1378 unsigned int type,
|
nuclear@0
|
1379 unsigned int index,
|
nuclear@0
|
1380 ai_real* pOut,
|
nuclear@0
|
1381 unsigned int* pMax);
|
nuclear@0
|
1382
|
nuclear@0
|
1383
|
nuclear@0
|
1384 #ifdef __cplusplus
|
nuclear@0
|
1385
|
nuclear@0
|
1386 // ---------------------------------------------------------------------------
|
nuclear@0
|
1387 /** @brief Retrieve a single float property with a specific key from the material.
|
nuclear@0
|
1388 *
|
nuclear@0
|
1389 * Pass one of the AI_MATKEY_XXX constants for the last three parameters (the
|
nuclear@0
|
1390 * example reads the #AI_MATKEY_SHININESS_STRENGTH property of the first diffuse texture)
|
nuclear@0
|
1391 * @code
|
nuclear@0
|
1392 * float specStrength = 1.f; // default value, remains unmodified if we fail.
|
nuclear@0
|
1393 * aiGetMaterialFloat(mat, AI_MATKEY_SHININESS_STRENGTH,
|
nuclear@0
|
1394 * (float*)&specStrength);
|
nuclear@0
|
1395 * @endcode
|
nuclear@0
|
1396 *
|
nuclear@0
|
1397 * @param pMat Pointer to the input material. May not be NULL
|
nuclear@0
|
1398 * @param pKey Key to search for. One of the AI_MATKEY_XXX constants.
|
nuclear@0
|
1399 * @param pOut Receives the output float.
|
nuclear@0
|
1400 * @param type (see the code sample above)
|
nuclear@0
|
1401 * @param index (see the code sample above)
|
nuclear@0
|
1402 * @return Specifies whether the key has been found. If not, the output
|
nuclear@0
|
1403 * float remains unmodified.*/
|
nuclear@0
|
1404 // ---------------------------------------------------------------------------
|
nuclear@0
|
1405 inline aiReturn aiGetMaterialFloat(const aiMaterial* pMat,
|
nuclear@0
|
1406 const char* pKey,
|
nuclear@0
|
1407 unsigned int type,
|
nuclear@0
|
1408 unsigned int index,
|
nuclear@0
|
1409 ai_real* pOut)
|
nuclear@0
|
1410 {
|
nuclear@0
|
1411 return aiGetMaterialFloatArray(pMat,pKey,type,index,pOut,(unsigned int*)0x0);
|
nuclear@0
|
1412 }
|
nuclear@0
|
1413
|
nuclear@0
|
1414 #else
|
nuclear@0
|
1415
|
nuclear@0
|
1416 // Use our friend, the C preprocessor
|
nuclear@0
|
1417 #define aiGetMaterialFloat (pMat, type, index, pKey, pOut) \
|
nuclear@0
|
1418 aiGetMaterialFloatArray(pMat, type, index, pKey, pOut, NULL)
|
nuclear@0
|
1419
|
nuclear@0
|
1420 #endif //!__cplusplus
|
nuclear@0
|
1421
|
nuclear@0
|
1422
|
nuclear@0
|
1423 // ---------------------------------------------------------------------------
|
nuclear@0
|
1424 /** @brief Retrieve an array of integer values with a specific key
|
nuclear@0
|
1425 * from a material
|
nuclear@0
|
1426 *
|
nuclear@0
|
1427 * See the sample for aiGetMaterialFloatArray for more information.*/
|
nuclear@0
|
1428 ASSIMP_API C_ENUM aiReturn aiGetMaterialIntegerArray(const C_STRUCT aiMaterial* pMat,
|
nuclear@0
|
1429 const char* pKey,
|
nuclear@0
|
1430 unsigned int type,
|
nuclear@0
|
1431 unsigned int index,
|
nuclear@0
|
1432 int* pOut,
|
nuclear@0
|
1433 unsigned int* pMax);
|
nuclear@0
|
1434
|
nuclear@0
|
1435
|
nuclear@0
|
1436 #ifdef __cplusplus
|
nuclear@0
|
1437
|
nuclear@0
|
1438 // ---------------------------------------------------------------------------
|
nuclear@0
|
1439 /** @brief Retrieve an integer property with a specific key from a material
|
nuclear@0
|
1440 *
|
nuclear@0
|
1441 * See the sample for aiGetMaterialFloat for more information.*/
|
nuclear@0
|
1442 // ---------------------------------------------------------------------------
|
nuclear@0
|
1443 inline aiReturn aiGetMaterialInteger(const C_STRUCT aiMaterial* pMat,
|
nuclear@0
|
1444 const char* pKey,
|
nuclear@0
|
1445 unsigned int type,
|
nuclear@0
|
1446 unsigned int index,
|
nuclear@0
|
1447 int* pOut)
|
nuclear@0
|
1448 {
|
nuclear@0
|
1449 return aiGetMaterialIntegerArray(pMat,pKey,type,index,pOut,(unsigned int*)0x0);
|
nuclear@0
|
1450 }
|
nuclear@0
|
1451
|
nuclear@0
|
1452 #else
|
nuclear@0
|
1453
|
nuclear@0
|
1454 // use our friend, the C preprocessor
|
nuclear@0
|
1455 #define aiGetMaterialInteger (pMat, type, index, pKey, pOut) \
|
nuclear@0
|
1456 aiGetMaterialIntegerArray(pMat, type, index, pKey, pOut, NULL)
|
nuclear@0
|
1457
|
nuclear@0
|
1458 #endif //!__cplusplus
|
nuclear@0
|
1459
|
nuclear@0
|
1460
|
nuclear@0
|
1461
|
nuclear@0
|
1462 // ---------------------------------------------------------------------------
|
nuclear@0
|
1463 /** @brief Retrieve a color value from the material property table
|
nuclear@0
|
1464 *
|
nuclear@0
|
1465 * See the sample for aiGetMaterialFloat for more information*/
|
nuclear@0
|
1466 // ---------------------------------------------------------------------------
|
nuclear@0
|
1467 ASSIMP_API C_ENUM aiReturn aiGetMaterialColor(const C_STRUCT aiMaterial* pMat,
|
nuclear@0
|
1468 const char* pKey,
|
nuclear@0
|
1469 unsigned int type,
|
nuclear@0
|
1470 unsigned int index,
|
nuclear@0
|
1471 C_STRUCT aiColor4D* pOut);
|
nuclear@0
|
1472
|
nuclear@0
|
1473
|
nuclear@0
|
1474 // ---------------------------------------------------------------------------
|
nuclear@0
|
1475 /** @brief Retrieve a aiUVTransform value from the material property table
|
nuclear@0
|
1476 *
|
nuclear@0
|
1477 * See the sample for aiGetMaterialFloat for more information*/
|
nuclear@0
|
1478 // ---------------------------------------------------------------------------
|
nuclear@0
|
1479 ASSIMP_API C_ENUM aiReturn aiGetMaterialUVTransform(const C_STRUCT aiMaterial* pMat,
|
nuclear@0
|
1480 const char* pKey,
|
nuclear@0
|
1481 unsigned int type,
|
nuclear@0
|
1482 unsigned int index,
|
nuclear@0
|
1483 C_STRUCT aiUVTransform* pOut);
|
nuclear@0
|
1484
|
nuclear@0
|
1485
|
nuclear@0
|
1486 // ---------------------------------------------------------------------------
|
nuclear@0
|
1487 /** @brief Retrieve a string from the material property table
|
nuclear@0
|
1488 *
|
nuclear@0
|
1489 * See the sample for aiGetMaterialFloat for more information.*/
|
nuclear@0
|
1490 // ---------------------------------------------------------------------------
|
nuclear@0
|
1491 ASSIMP_API C_ENUM aiReturn aiGetMaterialString(const C_STRUCT aiMaterial* pMat,
|
nuclear@0
|
1492 const char* pKey,
|
nuclear@0
|
1493 unsigned int type,
|
nuclear@0
|
1494 unsigned int index,
|
nuclear@0
|
1495 C_STRUCT aiString* pOut);
|
nuclear@0
|
1496
|
nuclear@0
|
1497 // ---------------------------------------------------------------------------
|
nuclear@0
|
1498 /** Get the number of textures for a particular texture type.
|
nuclear@0
|
1499 * @param[in] pMat Pointer to the input material. May not be NULL
|
nuclear@0
|
1500 * @param type Texture type to check for
|
nuclear@0
|
1501 * @return Number of textures for this type.
|
nuclear@0
|
1502 * @note A texture can be easily queried using #aiGetMaterialTexture() */
|
nuclear@0
|
1503 // ---------------------------------------------------------------------------
|
nuclear@0
|
1504 ASSIMP_API unsigned int aiGetMaterialTextureCount(const C_STRUCT aiMaterial* pMat,
|
nuclear@0
|
1505 C_ENUM aiTextureType type);
|
nuclear@0
|
1506
|
nuclear@0
|
1507 // ---------------------------------------------------------------------------
|
nuclear@0
|
1508 /** @brief Helper function to get all values pertaining to a particular
|
nuclear@0
|
1509 * texture slot from a material structure.
|
nuclear@0
|
1510 *
|
nuclear@0
|
1511 * This function is provided just for convenience. You could also read the
|
nuclear@0
|
1512 * texture by parsing all of its properties manually. This function bundles
|
nuclear@0
|
1513 * all of them in a huge function monster.
|
nuclear@0
|
1514 *
|
nuclear@0
|
1515 * @param[in] mat Pointer to the input material. May not be NULL
|
nuclear@0
|
1516 * @param[in] type Specifies the texture stack to read from (e.g. diffuse,
|
nuclear@0
|
1517 * specular, height map ...).
|
nuclear@0
|
1518 * @param[in] index Index of the texture. The function fails if the
|
nuclear@0
|
1519 * requested index is not available for this texture type.
|
nuclear@0
|
1520 * #aiGetMaterialTextureCount() can be used to determine the number of
|
nuclear@0
|
1521 * textures in a particular texture stack.
|
nuclear@0
|
1522 * @param[out] path Receives the output path
|
nuclear@0
|
1523 * If the texture is embedded, receives a '*' followed by the id of
|
nuclear@0
|
1524 * the texture (for the textures stored in the corresponding scene) which
|
nuclear@0
|
1525 * can be converted to an int using a function like atoi.
|
nuclear@0
|
1526 * This parameter must be non-null.
|
nuclear@0
|
1527 * @param mapping The texture mapping mode to be used.
|
nuclear@0
|
1528 * Pass NULL if you're not interested in this information.
|
nuclear@0
|
1529 * @param[out] uvindex For UV-mapped textures: receives the index of the UV
|
nuclear@0
|
1530 * source channel. Unmodified otherwise.
|
nuclear@0
|
1531 * Pass NULL if you're not interested in this information.
|
nuclear@0
|
1532 * @param[out] blend Receives the blend factor for the texture
|
nuclear@0
|
1533 * Pass NULL if you're not interested in this information.
|
nuclear@0
|
1534 * @param[out] op Receives the texture blend operation to be perform between
|
nuclear@0
|
1535 * this texture and the previous texture.
|
nuclear@0
|
1536 * Pass NULL if you're not interested in this information.
|
nuclear@0
|
1537 * @param[out] mapmode Receives the mapping modes to be used for the texture.
|
nuclear@0
|
1538 * Pass NULL if you're not interested in this information. Otherwise,
|
nuclear@0
|
1539 * pass a pointer to an array of two aiTextureMapMode's (one for each
|
nuclear@0
|
1540 * axis, UV order).
|
nuclear@0
|
1541 * @param[out] flags Receives the the texture flags.
|
nuclear@0
|
1542 * @return AI_SUCCESS on success, otherwise something else. Have fun.*/
|
nuclear@0
|
1543 // ---------------------------------------------------------------------------
|
nuclear@0
|
1544 #ifdef __cplusplus
|
nuclear@0
|
1545 ASSIMP_API aiReturn aiGetMaterialTexture(const C_STRUCT aiMaterial* mat,
|
nuclear@0
|
1546 aiTextureType type,
|
nuclear@0
|
1547 unsigned int index,
|
nuclear@0
|
1548 aiString* path,
|
nuclear@0
|
1549 aiTextureMapping* mapping = NULL,
|
nuclear@0
|
1550 unsigned int* uvindex = NULL,
|
nuclear@0
|
1551 ai_real* blend = NULL,
|
nuclear@0
|
1552 aiTextureOp* op = NULL,
|
nuclear@0
|
1553 aiTextureMapMode* mapmode = NULL,
|
nuclear@0
|
1554 unsigned int* flags = NULL);
|
nuclear@0
|
1555 #else
|
nuclear@0
|
1556 C_ENUM aiReturn aiGetMaterialTexture(const C_STRUCT aiMaterial* mat,
|
nuclear@0
|
1557 C_ENUM aiTextureType type,
|
nuclear@0
|
1558 unsigned int index,
|
nuclear@0
|
1559 C_STRUCT aiString* path,
|
nuclear@0
|
1560 C_ENUM aiTextureMapping* mapping /*= NULL*/,
|
nuclear@0
|
1561 unsigned int* uvindex /*= NULL*/,
|
nuclear@0
|
1562 ai_real* blend /*= NULL*/,
|
nuclear@0
|
1563 C_ENUM aiTextureOp* op /*= NULL*/,
|
nuclear@0
|
1564 C_ENUM aiTextureMapMode* mapmode /*= NULL*/,
|
nuclear@0
|
1565 unsigned int* flags /*= NULL*/);
|
nuclear@0
|
1566 #endif // !#ifdef __cplusplus
|
nuclear@0
|
1567
|
nuclear@0
|
1568
|
nuclear@0
|
1569 #ifdef __cplusplus
|
nuclear@0
|
1570 }
|
nuclear@0
|
1571
|
nuclear@0
|
1572 #include "material.inl"
|
nuclear@0
|
1573
|
nuclear@0
|
1574 #endif //!__cplusplus
|
nuclear@0
|
1575
|
nuclear@0
|
1576 #endif //!!AI_MATERIAL_H_INC
|