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