mirror of
https://github.com/JoeyDeVries/LearnOpenGL.git
synced 2026-01-02 04:37:54 +08:00
Update Assimp lib/dll/includes. Update glfw3 lib (all 64 bit now).
This commit is contained in:
BIN
dlls/assimp-vc140-mt.dll
Normal file
BIN
dlls/assimp-vc140-mt.dll
Normal file
Binary file not shown.
BIN
dlls/assimp.dll
BIN
dlls/assimp.dll
Binary file not shown.
8
includes/assimp/.editorconfig
Normal file
8
includes/assimp/.editorconfig
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# See <http://EditorConfig.org> for details
|
||||||
|
|
||||||
|
[*.{h,hpp,inl}]
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
indent_size = 4
|
||||||
|
indent_style = space
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
* BSD License:
|
* BSD License:
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
*
|
*
|
||||||
* Copyright (c) 2005-2007 Paul Hsieh
|
* Copyright (c) 2005-2016 Paul Hsieh
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
*
|
*
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
*
|
*
|
||||||
* Version 0.1.10
|
* Version 0.1.15.4
|
||||||
*
|
*
|
||||||
* The ANSI C standard committee, for the C99 standard, specified the
|
* The ANSI C standard committee, for the C99 standard, specified the
|
||||||
* inclusion of a new standard include file called stdint.h. This is
|
* inclusion of a new standard include file called stdint.h. This is
|
||||||
@@ -42,19 +42,17 @@
|
|||||||
* integer libraries and so on. But for most developers its likely
|
* integer libraries and so on. But for most developers its likely
|
||||||
* useful just for programming sanity.
|
* useful just for programming sanity.
|
||||||
*
|
*
|
||||||
* The problem is that most compiler vendors have decided not to
|
* The problem is that some compiler vendors chose to ignore the C99
|
||||||
* implement the C99 standard, and the next C++ language standard
|
* standard and some older compilers have no opportunity to be updated.
|
||||||
* (which has a lot more mindshare these days) will be a long time in
|
* Because of this situation, simply including stdint.h in your code
|
||||||
* coming and its unknown whether or not it will include stdint.h or
|
* makes it unportable.
|
||||||
* how much adoption it will have. Either way, it will be a long time
|
|
||||||
* before all compilers come with a stdint.h and it also does nothing
|
|
||||||
* for the extremely large number of compilers available today which
|
|
||||||
* do not include this file, or anything comparable to it.
|
|
||||||
*
|
*
|
||||||
* So that's what this file is all about. Its an attempt to build a
|
* So that's what this file is all about. Its an attempt to build a
|
||||||
* single universal include file that works on as many platforms as
|
* single universal include file that works on as many platforms as
|
||||||
* possible to deliver what stdint.h is supposed to. A few things
|
* possible to deliver what stdint.h is supposed to. Even compilers
|
||||||
* that should be noted about this file:
|
* that already come with stdint.h can use this file instead without
|
||||||
|
* any loss of functionality. A few things that should be noted about
|
||||||
|
* this file:
|
||||||
*
|
*
|
||||||
* 1) It is not guaranteed to be portable and/or present an identical
|
* 1) It is not guaranteed to be portable and/or present an identical
|
||||||
* interface on all platforms. The extreme variability of the
|
* interface on all platforms. The extreme variability of the
|
||||||
@@ -73,7 +71,7 @@
|
|||||||
* include stdint.h. The hope is that one or the other can be
|
* include stdint.h. The hope is that one or the other can be
|
||||||
* used with no real difference.
|
* used with no real difference.
|
||||||
*
|
*
|
||||||
* 5) In the current verison, if your platform can't represent
|
* 5) In the current version, if your platform can't represent
|
||||||
* int32_t, int16_t and int8_t, it just dumps out with a compiler
|
* int32_t, int16_t and int8_t, it just dumps out with a compiler
|
||||||
* error.
|
* error.
|
||||||
*
|
*
|
||||||
@@ -154,7 +152,12 @@
|
|||||||
* PRINTF_INT64_DEC_WIDTH
|
* PRINTF_INT64_DEC_WIDTH
|
||||||
* PRINTF_INT32_DEC_WIDTH
|
* PRINTF_INT32_DEC_WIDTH
|
||||||
* PRINTF_INT16_DEC_WIDTH
|
* PRINTF_INT16_DEC_WIDTH
|
||||||
* PRINTF_INT8_DEC_WIDTH
|
* PRINTF_UINT8_DEC_WIDTH
|
||||||
|
* PRINTF_UINTMAX_DEC_WIDTH
|
||||||
|
* PRINTF_UINT64_DEC_WIDTH
|
||||||
|
* PRINTF_UINT32_DEC_WIDTH
|
||||||
|
* PRINTF_UINT16_DEC_WIDTH
|
||||||
|
* PRINTF_UINT8_DEC_WIDTH
|
||||||
*
|
*
|
||||||
* Which specifies the maximum number of characters required to
|
* Which specifies the maximum number of characters required to
|
||||||
* print the number of that type in either hexadecimal or decimal.
|
* print the number of that type in either hexadecimal or decimal.
|
||||||
@@ -178,6 +181,10 @@
|
|||||||
* Chris Howie
|
* Chris Howie
|
||||||
* John Steele Scott
|
* John Steele Scott
|
||||||
* Dave Thorup
|
* Dave Thorup
|
||||||
|
* John Dill
|
||||||
|
* Florian Wobbe
|
||||||
|
* Christopher Sean Morrison
|
||||||
|
* Mikkel Fahnoe Jorgensen
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -190,14 +197,27 @@
|
|||||||
* do nothing else. On the Mac OS X version of gcc this is _STDINT_H_.
|
* do nothing else. On the Mac OS X version of gcc this is _STDINT_H_.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if ((defined(__STDC__) && __STDC__ && __STDC_VERSION__ >= 199901L) || (defined (__WATCOMC__) && (defined (_STDINT_H_INCLUDED) || __WATCOMC__ >= 1250)) || (defined(__GNUC__) && (defined(_STDINT_H) || defined(_STDINT_H_)))) && !defined (_PSTDINT_H_INCLUDED) && !defined(_STDINT)
|
#if ((defined(__SUNPRO_C) && __SUNPRO_C >= 0x570) || (defined(_MSC_VER) && _MSC_VER >= 1600) || (defined(__STDC__) && __STDC__ && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (defined (__WATCOMC__) && (defined (_STDINT_H_INCLUDED) || __WATCOMC__ >= 1250)) || (defined(__GNUC__) && (__GNUC__ > 3 || defined(_STDINT_H) || defined(_STDINT_H_) || defined (__UINT_FAST64_TYPE__)) )) && !defined (_PSTDINT_H_INCLUDED)
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#define _PSTDINT_H_INCLUDED
|
#define _PSTDINT_H_INCLUDED
|
||||||
# ifndef PRINTF_INT64_MODIFIER
|
# if defined(__GNUC__) && (defined(__x86_64__) || defined(__ppc64__)) && !(defined(__APPLE__) && defined(__MACH__))
|
||||||
# define PRINTF_INT64_MODIFIER "ll"
|
# ifndef PRINTF_INT64_MODIFIER
|
||||||
# endif
|
# define PRINTF_INT64_MODIFIER "l"
|
||||||
# ifndef PRINTF_INT32_MODIFIER
|
# endif
|
||||||
# define PRINTF_INT32_MODIFIER "l"
|
# ifndef PRINTF_INT32_MODIFIER
|
||||||
|
# define PRINTF_INT32_MODIFIER ""
|
||||||
|
# endif
|
||||||
|
# else
|
||||||
|
# ifndef PRINTF_INT64_MODIFIER
|
||||||
|
# define PRINTF_INT64_MODIFIER "ll"
|
||||||
|
# endif
|
||||||
|
# ifndef PRINTF_INT32_MODIFIER
|
||||||
|
# if (UINT_MAX == UINT32_MAX)
|
||||||
|
# define PRINTF_INT32_MODIFIER ""
|
||||||
|
# else
|
||||||
|
# define PRINTF_INT32_MODIFIER "l"
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
# ifndef PRINTF_INT16_MODIFIER
|
# ifndef PRINTF_INT16_MODIFIER
|
||||||
# define PRINTF_INT16_MODIFIER "h"
|
# define PRINTF_INT16_MODIFIER "h"
|
||||||
@@ -208,32 +228,62 @@
|
|||||||
# ifndef PRINTF_INT64_HEX_WIDTH
|
# ifndef PRINTF_INT64_HEX_WIDTH
|
||||||
# define PRINTF_INT64_HEX_WIDTH "16"
|
# define PRINTF_INT64_HEX_WIDTH "16"
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef PRINTF_UINT64_HEX_WIDTH
|
||||||
|
# define PRINTF_UINT64_HEX_WIDTH "16"
|
||||||
|
# endif
|
||||||
# ifndef PRINTF_INT32_HEX_WIDTH
|
# ifndef PRINTF_INT32_HEX_WIDTH
|
||||||
# define PRINTF_INT32_HEX_WIDTH "8"
|
# define PRINTF_INT32_HEX_WIDTH "8"
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef PRINTF_UINT32_HEX_WIDTH
|
||||||
|
# define PRINTF_UINT32_HEX_WIDTH "8"
|
||||||
|
# endif
|
||||||
# ifndef PRINTF_INT16_HEX_WIDTH
|
# ifndef PRINTF_INT16_HEX_WIDTH
|
||||||
# define PRINTF_INT16_HEX_WIDTH "4"
|
# define PRINTF_INT16_HEX_WIDTH "4"
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef PRINTF_UINT16_HEX_WIDTH
|
||||||
|
# define PRINTF_UINT16_HEX_WIDTH "4"
|
||||||
|
# endif
|
||||||
# ifndef PRINTF_INT8_HEX_WIDTH
|
# ifndef PRINTF_INT8_HEX_WIDTH
|
||||||
# define PRINTF_INT8_HEX_WIDTH "2"
|
# define PRINTF_INT8_HEX_WIDTH "2"
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef PRINTF_UINT8_HEX_WIDTH
|
||||||
|
# define PRINTF_UINT8_HEX_WIDTH "2"
|
||||||
|
# endif
|
||||||
# ifndef PRINTF_INT64_DEC_WIDTH
|
# ifndef PRINTF_INT64_DEC_WIDTH
|
||||||
# define PRINTF_INT64_DEC_WIDTH "20"
|
# define PRINTF_INT64_DEC_WIDTH "19"
|
||||||
|
# endif
|
||||||
|
# ifndef PRINTF_UINT64_DEC_WIDTH
|
||||||
|
# define PRINTF_UINT64_DEC_WIDTH "20"
|
||||||
# endif
|
# endif
|
||||||
# ifndef PRINTF_INT32_DEC_WIDTH
|
# ifndef PRINTF_INT32_DEC_WIDTH
|
||||||
# define PRINTF_INT32_DEC_WIDTH "10"
|
# define PRINTF_INT32_DEC_WIDTH "10"
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef PRINTF_UINT32_DEC_WIDTH
|
||||||
|
# define PRINTF_UINT32_DEC_WIDTH "10"
|
||||||
|
# endif
|
||||||
# ifndef PRINTF_INT16_DEC_WIDTH
|
# ifndef PRINTF_INT16_DEC_WIDTH
|
||||||
# define PRINTF_INT16_DEC_WIDTH "5"
|
# define PRINTF_INT16_DEC_WIDTH "5"
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef PRINTF_UINT16_DEC_WIDTH
|
||||||
|
# define PRINTF_UINT16_DEC_WIDTH "5"
|
||||||
|
# endif
|
||||||
# ifndef PRINTF_INT8_DEC_WIDTH
|
# ifndef PRINTF_INT8_DEC_WIDTH
|
||||||
# define PRINTF_INT8_DEC_WIDTH "3"
|
# define PRINTF_INT8_DEC_WIDTH "3"
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef PRINTF_UINT8_DEC_WIDTH
|
||||||
|
# define PRINTF_UINT8_DEC_WIDTH "3"
|
||||||
|
# endif
|
||||||
# ifndef PRINTF_INTMAX_HEX_WIDTH
|
# ifndef PRINTF_INTMAX_HEX_WIDTH
|
||||||
# define PRINTF_INTMAX_HEX_WIDTH PRINTF_INT64_HEX_WIDTH
|
# define PRINTF_INTMAX_HEX_WIDTH PRINTF_UINT64_HEX_WIDTH
|
||||||
|
# endif
|
||||||
|
# ifndef PRINTF_UINTMAX_HEX_WIDTH
|
||||||
|
# define PRINTF_UINTMAX_HEX_WIDTH PRINTF_UINT64_HEX_WIDTH
|
||||||
# endif
|
# endif
|
||||||
# ifndef PRINTF_INTMAX_DEC_WIDTH
|
# ifndef PRINTF_INTMAX_DEC_WIDTH
|
||||||
# define PRINTF_INTMAX_DEC_WIDTH PRINTF_INT64_DEC_WIDTH
|
# define PRINTF_INTMAX_DEC_WIDTH PRINTF_UINT64_DEC_WIDTH
|
||||||
|
# endif
|
||||||
|
# ifndef PRINTF_UINTMAX_DEC_WIDTH
|
||||||
|
# define PRINTF_UINTMAX_DEC_WIDTH PRINTF_UINT64_DEC_WIDTH
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -287,6 +337,20 @@
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* I have no idea what is the truly correct thing to do on older Solaris.
|
||||||
|
* From some online discussions, this seems to be what is being
|
||||||
|
* recommended. For people who actually are developing on older Solaris,
|
||||||
|
* what I would like to know is, does this define all of the relevant
|
||||||
|
* macros of a complete stdint.h? Remember, in pstdint.h 64 bit is
|
||||||
|
* considered optional.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if (defined(__SUNPRO_C) && __SUNPRO_C >= 0x420) && !defined(_PSTDINT_H_INCLUDED)
|
||||||
|
#include <sys/inttypes.h>
|
||||||
|
#define _PSTDINT_H_INCLUDED
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef _PSTDINT_H_INCLUDED
|
#ifndef _PSTDINT_H_INCLUDED
|
||||||
#define _PSTDINT_H_INCLUDED
|
#define _PSTDINT_H_INCLUDED
|
||||||
|
|
||||||
@@ -303,7 +367,7 @@
|
|||||||
#ifndef UINT8_MAX
|
#ifndef UINT8_MAX
|
||||||
# define UINT8_MAX 0xff
|
# define UINT8_MAX 0xff
|
||||||
#endif
|
#endif
|
||||||
#ifndef uint8_t
|
#if !defined(uint8_t) && !defined(_UINT8_T) && !defined(vxWorks)
|
||||||
# if (UCHAR_MAX == UINT8_MAX) || defined (S_SPLINT_S)
|
# if (UCHAR_MAX == UINT8_MAX) || defined (S_SPLINT_S)
|
||||||
typedef unsigned char uint8_t;
|
typedef unsigned char uint8_t;
|
||||||
# define UINT8_C(v) ((uint8_t) v)
|
# define UINT8_C(v) ((uint8_t) v)
|
||||||
@@ -318,7 +382,7 @@
|
|||||||
#ifndef INT8_MIN
|
#ifndef INT8_MIN
|
||||||
# define INT8_MIN INT8_C(0x80)
|
# define INT8_MIN INT8_C(0x80)
|
||||||
#endif
|
#endif
|
||||||
#ifndef int8_t
|
#if !defined(int8_t) && !defined(_INT8_T) && !defined(vxWorks)
|
||||||
# if (SCHAR_MAX == INT8_MAX) || defined (S_SPLINT_S)
|
# if (SCHAR_MAX == INT8_MAX) || defined (S_SPLINT_S)
|
||||||
typedef signed char int8_t;
|
typedef signed char int8_t;
|
||||||
# define INT8_C(v) ((int8_t) v)
|
# define INT8_C(v) ((int8_t) v)
|
||||||
@@ -330,7 +394,7 @@
|
|||||||
#ifndef UINT16_MAX
|
#ifndef UINT16_MAX
|
||||||
# define UINT16_MAX 0xffff
|
# define UINT16_MAX 0xffff
|
||||||
#endif
|
#endif
|
||||||
#ifndef uint16_t
|
#if !defined(uint16_t) && !defined(_UINT16_T) && !defined(vxWorks)
|
||||||
#if (UINT_MAX == UINT16_MAX) || defined (S_SPLINT_S)
|
#if (UINT_MAX == UINT16_MAX) || defined (S_SPLINT_S)
|
||||||
typedef unsigned int uint16_t;
|
typedef unsigned int uint16_t;
|
||||||
# ifndef PRINTF_INT16_MODIFIER
|
# ifndef PRINTF_INT16_MODIFIER
|
||||||
@@ -354,7 +418,7 @@
|
|||||||
#ifndef INT16_MIN
|
#ifndef INT16_MIN
|
||||||
# define INT16_MIN INT16_C(0x8000)
|
# define INT16_MIN INT16_C(0x8000)
|
||||||
#endif
|
#endif
|
||||||
#ifndef int16_t
|
#if !defined(int16_t) && !defined(_INT16_T) && !defined(vxWorks)
|
||||||
#if (INT_MAX == INT16_MAX) || defined (S_SPLINT_S)
|
#if (INT_MAX == INT16_MAX) || defined (S_SPLINT_S)
|
||||||
typedef signed int int16_t;
|
typedef signed int int16_t;
|
||||||
# define INT16_C(v) ((int16_t) (v))
|
# define INT16_C(v) ((int16_t) (v))
|
||||||
@@ -375,7 +439,7 @@
|
|||||||
#ifndef UINT32_MAX
|
#ifndef UINT32_MAX
|
||||||
# define UINT32_MAX (0xffffffffUL)
|
# define UINT32_MAX (0xffffffffUL)
|
||||||
#endif
|
#endif
|
||||||
#ifndef uint32_t
|
#if !defined(uint32_t) && !defined(_UINT32_T) && !defined(vxWorks)
|
||||||
#if (ULONG_MAX == UINT32_MAX) || defined (S_SPLINT_S)
|
#if (ULONG_MAX == UINT32_MAX) || defined (S_SPLINT_S)
|
||||||
typedef unsigned long uint32_t;
|
typedef unsigned long uint32_t;
|
||||||
# define UINT32_C(v) v ## UL
|
# define UINT32_C(v) v ## UL
|
||||||
@@ -405,7 +469,7 @@
|
|||||||
#ifndef INT32_MIN
|
#ifndef INT32_MIN
|
||||||
# define INT32_MIN INT32_C(0x80000000)
|
# define INT32_MIN INT32_C(0x80000000)
|
||||||
#endif
|
#endif
|
||||||
#ifndef int32_t
|
#if !defined(int32_t) && !defined(_INT32_T) && !defined(vxWorks)
|
||||||
#if (LONG_MAX == INT32_MAX) || defined (S_SPLINT_S)
|
#if (LONG_MAX == INT32_MAX) || defined (S_SPLINT_S)
|
||||||
typedef signed long int32_t;
|
typedef signed long int32_t;
|
||||||
# define INT32_C(v) v ## L
|
# define INT32_C(v) v ## L
|
||||||
@@ -438,7 +502,7 @@
|
|||||||
|
|
||||||
#undef stdint_int64_defined
|
#undef stdint_int64_defined
|
||||||
#if (defined(__STDC__) && defined(__STDC_VERSION__)) || defined (S_SPLINT_S)
|
#if (defined(__STDC__) && defined(__STDC_VERSION__)) || defined (S_SPLINT_S)
|
||||||
# if (__STDC__ && __STDC_VERSION >= 199901L) || defined (S_SPLINT_S)
|
# if (__STDC__ && __STDC_VERSION__ >= 199901L) || defined (S_SPLINT_S)
|
||||||
# define stdint_int64_defined
|
# define stdint_int64_defined
|
||||||
typedef long long int64_t;
|
typedef long long int64_t;
|
||||||
typedef unsigned long long uint64_t;
|
typedef unsigned long long uint64_t;
|
||||||
@@ -451,7 +515,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined (stdint_int64_defined)
|
#if !defined (stdint_int64_defined)
|
||||||
# if defined(__GNUC__)
|
# if defined(__GNUC__) && !defined(vxWorks)
|
||||||
# define stdint_int64_defined
|
# define stdint_int64_defined
|
||||||
__extension__ typedef long long int64_t;
|
__extension__ typedef long long int64_t;
|
||||||
__extension__ typedef unsigned long long uint64_t;
|
__extension__ typedef unsigned long long uint64_t;
|
||||||
@@ -514,9 +578,8 @@
|
|||||||
#ifndef PRINTF_INT8_HEX_WIDTH
|
#ifndef PRINTF_INT8_HEX_WIDTH
|
||||||
# define PRINTF_INT8_HEX_WIDTH "2"
|
# define PRINTF_INT8_HEX_WIDTH "2"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef PRINTF_INT64_DEC_WIDTH
|
#ifndef PRINTF_INT64_DEC_WIDTH
|
||||||
# define PRINTF_INT64_DEC_WIDTH "20"
|
# define PRINTF_INT64_DEC_WIDTH "19"
|
||||||
#endif
|
#endif
|
||||||
#ifndef PRINTF_INT32_DEC_WIDTH
|
#ifndef PRINTF_INT32_DEC_WIDTH
|
||||||
# define PRINTF_INT32_DEC_WIDTH "10"
|
# define PRINTF_INT32_DEC_WIDTH "10"
|
||||||
@@ -527,6 +590,18 @@
|
|||||||
#ifndef PRINTF_INT8_DEC_WIDTH
|
#ifndef PRINTF_INT8_DEC_WIDTH
|
||||||
# define PRINTF_INT8_DEC_WIDTH "3"
|
# define PRINTF_INT8_DEC_WIDTH "3"
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef PRINTF_UINT64_DEC_WIDTH
|
||||||
|
# define PRINTF_UINT64_DEC_WIDTH "20"
|
||||||
|
#endif
|
||||||
|
#ifndef PRINTF_UINT32_DEC_WIDTH
|
||||||
|
# define PRINTF_UINT32_DEC_WIDTH "10"
|
||||||
|
#endif
|
||||||
|
#ifndef PRINTF_UINT16_DEC_WIDTH
|
||||||
|
# define PRINTF_UINT16_DEC_WIDTH "5"
|
||||||
|
#endif
|
||||||
|
#ifndef PRINTF_UINT8_DEC_WIDTH
|
||||||
|
# define PRINTF_UINT8_DEC_WIDTH "3"
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Ok, lets not worry about 128 bit integers for now. Moore's law says
|
* Ok, lets not worry about 128 bit integers for now. Moore's law says
|
||||||
@@ -646,7 +721,7 @@ typedef uint_least32_t uint_fast32_t;
|
|||||||
* type limits.
|
* type limits.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined(__WATCOMC__) || defined(_MSC_VER) || defined (__GNUC__)
|
#if defined(__WATCOMC__) || defined(_MSC_VER) || defined (__GNUC__) && !defined(vxWorks)
|
||||||
# include <wchar.h>
|
# include <wchar.h>
|
||||||
# ifndef WCHAR_MIN
|
# ifndef WCHAR_MIN
|
||||||
# define WCHAR_MIN 0
|
# define WCHAR_MIN 0
|
||||||
@@ -661,12 +736,12 @@ typedef uint_least32_t uint_fast32_t;
|
|||||||
* (u)intptr_t types and limits.
|
* (u)intptr_t types and limits.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined (_MSC_VER) && defined (_UINTPTR_T_DEFINED)
|
#if (defined (_MSC_VER) && defined (_UINTPTR_T_DEFINED)) || defined (_UINTPTR_T)
|
||||||
# define STDINT_H_UINTPTR_T_DEFINED
|
# define STDINT_H_UINTPTR_T_DEFINED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef STDINT_H_UINTPTR_T_DEFINED
|
#ifndef STDINT_H_UINTPTR_T_DEFINED
|
||||||
# if defined (__alpha__) || defined (__ia64__) || defined (__x86_64__) || defined (_WIN64)
|
# if defined (__alpha__) || defined (__ia64__) || defined (__x86_64__) || defined (_WIN64) || defined (__ppc64__)
|
||||||
# define stdint_intptr_bits 64
|
# define stdint_intptr_bits 64
|
||||||
# elif defined (__WATCOMC__) || defined (__TURBOC__)
|
# elif defined (__WATCOMC__) || defined (__TURBOC__)
|
||||||
# if defined(__TINY__) || defined(__SMALL__) || defined(__MEDIUM__)
|
# if defined(__TINY__) || defined(__SMALL__) || defined(__MEDIUM__)
|
||||||
@@ -674,10 +749,12 @@ typedef uint_least32_t uint_fast32_t;
|
|||||||
# else
|
# else
|
||||||
# define stdint_intptr_bits 32
|
# define stdint_intptr_bits 32
|
||||||
# endif
|
# endif
|
||||||
# elif defined (__i386__) || defined (_WIN32) || defined (WIN32)
|
# elif defined (__i386__) || defined (_WIN32) || defined (WIN32) || defined (__ppc64__)
|
||||||
# define stdint_intptr_bits 32
|
# define stdint_intptr_bits 32
|
||||||
# elif defined (__INTEL_COMPILER)
|
# elif defined (__INTEL_COMPILER)
|
||||||
/* TODO -- what will Intel do about x86-64? */
|
/* TODO -- what did Intel do about x86-64? */
|
||||||
|
# else
|
||||||
|
/* #error "This platform might not be supported yet" */
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# ifdef stdint_intptr_bits
|
# ifdef stdint_intptr_bits
|
||||||
@@ -727,3 +804,109 @@ typedef uint_least32_t uint_fast32_t;
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined (__TEST_PSTDINT_FOR_CORRECTNESS)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Please compile with the maximum warning settings to make sure macros are
|
||||||
|
* not defined more than once.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#define glue3_aux(x,y,z) x ## y ## z
|
||||||
|
#define glue3(x,y,z) glue3_aux(x,y,z)
|
||||||
|
|
||||||
|
#define DECLU(bits) glue3(uint,bits,_t) glue3(u,bits,) = glue3(UINT,bits,_C) (0);
|
||||||
|
#define DECLI(bits) glue3(int,bits,_t) glue3(i,bits,) = glue3(INT,bits,_C) (0);
|
||||||
|
|
||||||
|
#define DECL(us,bits) glue3(DECL,us,) (bits)
|
||||||
|
|
||||||
|
#define TESTUMAX(bits) glue3(u,bits,) = ~glue3(u,bits,); if (glue3(UINT,bits,_MAX) != glue3(u,bits,)) printf ("Something wrong with UINT%d_MAX\n", bits)
|
||||||
|
|
||||||
|
#define REPORTERROR(msg) { err_n++; if (err_first <= 0) err_first = __LINE__; printf msg; }
|
||||||
|
|
||||||
|
int main () {
|
||||||
|
int err_n = 0;
|
||||||
|
int err_first = 0;
|
||||||
|
DECL(I,8)
|
||||||
|
DECL(U,8)
|
||||||
|
DECL(I,16)
|
||||||
|
DECL(U,16)
|
||||||
|
DECL(I,32)
|
||||||
|
DECL(U,32)
|
||||||
|
#ifdef INT64_MAX
|
||||||
|
DECL(I,64)
|
||||||
|
DECL(U,64)
|
||||||
|
#endif
|
||||||
|
intmax_t imax = INTMAX_C(0);
|
||||||
|
uintmax_t umax = UINTMAX_C(0);
|
||||||
|
char str0[256], str1[256];
|
||||||
|
|
||||||
|
sprintf (str0, "%" PRINTF_INT32_MODIFIER "d", INT32_C(2147483647));
|
||||||
|
if (0 != strcmp (str0, "2147483647")) REPORTERROR (("Something wrong with PRINTF_INT32_MODIFIER : %s\n", str0));
|
||||||
|
if (atoi(PRINTF_INT32_DEC_WIDTH) != (int) strlen(str0)) REPORTERROR (("Something wrong with PRINTF_INT32_DEC_WIDTH : %s\n", PRINTF_INT32_DEC_WIDTH));
|
||||||
|
sprintf (str0, "%" PRINTF_INT32_MODIFIER "u", UINT32_C(4294967295));
|
||||||
|
if (0 != strcmp (str0, "4294967295")) REPORTERROR (("Something wrong with PRINTF_INT32_MODIFIER : %s\n", str0));
|
||||||
|
if (atoi(PRINTF_UINT32_DEC_WIDTH) != (int) strlen(str0)) REPORTERROR (("Something wrong with PRINTF_UINT32_DEC_WIDTH : %s\n", PRINTF_UINT32_DEC_WIDTH));
|
||||||
|
#ifdef INT64_MAX
|
||||||
|
sprintf (str1, "%" PRINTF_INT64_MODIFIER "d", INT64_C(9223372036854775807));
|
||||||
|
if (0 != strcmp (str1, "9223372036854775807")) REPORTERROR (("Something wrong with PRINTF_INT32_MODIFIER : %s\n", str1));
|
||||||
|
if (atoi(PRINTF_INT64_DEC_WIDTH) != (int) strlen(str1)) REPORTERROR (("Something wrong with PRINTF_INT64_DEC_WIDTH : %s, %d\n", PRINTF_INT64_DEC_WIDTH, (int) strlen(str1)));
|
||||||
|
sprintf (str1, "%" PRINTF_INT64_MODIFIER "u", UINT64_C(18446744073709550591));
|
||||||
|
if (0 != strcmp (str1, "18446744073709550591")) REPORTERROR (("Something wrong with PRINTF_INT32_MODIFIER : %s\n", str1));
|
||||||
|
if (atoi(PRINTF_UINT64_DEC_WIDTH) != (int) strlen(str1)) REPORTERROR (("Something wrong with PRINTF_UINT64_DEC_WIDTH : %s, %d\n", PRINTF_UINT64_DEC_WIDTH, (int) strlen(str1)));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
sprintf (str0, "%d %x\n", 0, ~0);
|
||||||
|
|
||||||
|
sprintf (str1, "%d %x\n", i8, ~0);
|
||||||
|
if (0 != strcmp (str0, str1)) REPORTERROR (("Something wrong with i8 : %s\n", str1));
|
||||||
|
sprintf (str1, "%u %x\n", u8, ~0);
|
||||||
|
if (0 != strcmp (str0, str1)) REPORTERROR (("Something wrong with u8 : %s\n", str1));
|
||||||
|
sprintf (str1, "%d %x\n", i16, ~0);
|
||||||
|
if (0 != strcmp (str0, str1)) REPORTERROR (("Something wrong with i16 : %s\n", str1));
|
||||||
|
sprintf (str1, "%u %x\n", u16, ~0);
|
||||||
|
if (0 != strcmp (str0, str1)) REPORTERROR (("Something wrong with u16 : %s\n", str1));
|
||||||
|
sprintf (str1, "%" PRINTF_INT32_MODIFIER "d %x\n", i32, ~0);
|
||||||
|
if (0 != strcmp (str0, str1)) REPORTERROR (("Something wrong with i32 : %s\n", str1));
|
||||||
|
sprintf (str1, "%" PRINTF_INT32_MODIFIER "u %x\n", u32, ~0);
|
||||||
|
if (0 != strcmp (str0, str1)) REPORTERROR (("Something wrong with u32 : %s\n", str1));
|
||||||
|
#ifdef INT64_MAX
|
||||||
|
sprintf (str1, "%" PRINTF_INT64_MODIFIER "d %x\n", i64, ~0);
|
||||||
|
if (0 != strcmp (str0, str1)) REPORTERROR (("Something wrong with i64 : %s\n", str1));
|
||||||
|
#endif
|
||||||
|
sprintf (str1, "%" PRINTF_INTMAX_MODIFIER "d %x\n", imax, ~0);
|
||||||
|
if (0 != strcmp (str0, str1)) REPORTERROR (("Something wrong with imax : %s\n", str1));
|
||||||
|
sprintf (str1, "%" PRINTF_INTMAX_MODIFIER "u %x\n", umax, ~0);
|
||||||
|
if (0 != strcmp (str0, str1)) REPORTERROR (("Something wrong with umax : %s\n", str1));
|
||||||
|
|
||||||
|
TESTUMAX(8);
|
||||||
|
TESTUMAX(16);
|
||||||
|
TESTUMAX(32);
|
||||||
|
#ifdef INT64_MAX
|
||||||
|
TESTUMAX(64);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define STR(v) #v
|
||||||
|
#define Q(v) printf ("sizeof " STR(v) " = %u\n", (unsigned) sizeof (v));
|
||||||
|
if (err_n) {
|
||||||
|
printf ("pstdint.h is not correct. Please use sizes below to correct it:\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
Q(int)
|
||||||
|
Q(unsigned)
|
||||||
|
Q(long int)
|
||||||
|
Q(short int)
|
||||||
|
Q(int8_t)
|
||||||
|
Q(int16_t)
|
||||||
|
Q(int32_t)
|
||||||
|
#ifdef INT64_MAX
|
||||||
|
Q(int64_t)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
# pragma pack(push,1)
|
# pragma pack(push,1)
|
||||||
# define PACK_STRUCT
|
# define PACK_STRUCT
|
||||||
#elif defined( __GNUC__ )
|
#elif defined( __GNUC__ )
|
||||||
# if defined(__clang__)
|
# if !defined(HOST_MINGW)
|
||||||
# define PACK_STRUCT __attribute__((__packed__))
|
# define PACK_STRUCT __attribute__((__packed__))
|
||||||
# else
|
# else
|
||||||
# define PACK_STRUCT __attribute__((gcc_struct, __packed__))
|
# define PACK_STRUCT __attribute__((gcc_struct, __packed__))
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
|
|
||||||
// C4103: Packing was changed after the inclusion of the header, propably missing #pragma pop
|
// C4103: Packing was changed after the inclusion of the header, probably missing #pragma pop
|
||||||
# pragma warning (disable : 4103)
|
# pragma warning (disable : 4103)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -2,11 +2,11 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the
|
with or without modification, are permitted provided that the
|
||||||
following conditions are met:
|
following conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -23,21 +23,21 @@ following conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
/** @file DefaultLogger.h
|
/** @file DefaultLogger.hpp
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef INCLUDED_AI_DEFAULTLOGGER
|
#ifndef INCLUDED_AI_DEFAULTLOGGER
|
||||||
@@ -48,7 +48,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "NullLogger.hpp"
|
#include "NullLogger.hpp"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
// ------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------
|
||||||
class IOStream;
|
class IOStream;
|
||||||
struct LogStreamInfo;
|
struct LogStreamInfo;
|
||||||
@@ -57,7 +57,7 @@ struct LogStreamInfo;
|
|||||||
#define ASSIMP_DEFAULT_LOG_NAME "AssimpLog.txt"
|
#define ASSIMP_DEFAULT_LOG_NAME "AssimpLog.txt"
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------
|
||||||
/** @brief CPP-API: Primary logging facility of Assimp.
|
/** @brief CPP-API: Primary logging facility of Assimp.
|
||||||
*
|
*
|
||||||
* The library stores its primary #Logger as a static member of this class.
|
* The library stores its primary #Logger as a static member of this class.
|
||||||
* #get() returns this primary logger. By default the underlying implementation is
|
* #get() returns this primary logger. By default the underlying implementation is
|
||||||
@@ -65,123 +65,123 @@ struct LogStreamInfo;
|
|||||||
* is turned on. To capture the log output multiple log streams (#LogStream) can be
|
* is turned on. To capture the log output multiple log streams (#LogStream) can be
|
||||||
* attach to the logger. Some default streams for common streaming locations (such as
|
* attach to the logger. Some default streams for common streaming locations (such as
|
||||||
* a file, std::cout, OutputDebugString()) are also provided.
|
* a file, std::cout, OutputDebugString()) are also provided.
|
||||||
*
|
*
|
||||||
* If you wish to customize the logging at an even deeper level supply your own
|
* If you wish to customize the logging at an even deeper level supply your own
|
||||||
* implementation of #Logger to #set().
|
* implementation of #Logger to #set().
|
||||||
* @note The whole logging stuff causes a small extra overhead for all imports. */
|
* @note The whole logging stuff causes a small extra overhead for all imports. */
|
||||||
class ASSIMP_API DefaultLogger :
|
class ASSIMP_API DefaultLogger :
|
||||||
public Logger {
|
public Logger {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
/** @brief Creates a logging instance.
|
/** @brief Creates a logging instance.
|
||||||
* @param name Name for log file. Only valid in combination
|
* @param name Name for log file. Only valid in combination
|
||||||
* with the aiDefaultLogStream_FILE flag.
|
* with the aiDefaultLogStream_FILE flag.
|
||||||
* @param severity Log severity, VERBOSE turns on debug messages
|
* @param severity Log severity, VERBOSE turns on debug messages
|
||||||
* @param defStreams Default log streams to be attached. Any bitwise
|
* @param defStreams Default log streams to be attached. Any bitwise
|
||||||
* combination of the aiDefaultLogStream enumerated values.
|
* combination of the aiDefaultLogStream enumerated values.
|
||||||
* If #aiDefaultLogStream_FILE is specified but an empty string is
|
* If #aiDefaultLogStream_FILE is specified but an empty string is
|
||||||
* passed for 'name', no log file is created at all.
|
* passed for 'name', no log file is created at all.
|
||||||
* @param io IOSystem to be used to open external files (such as the
|
* @param io IOSystem to be used to open external files (such as the
|
||||||
* log file). Pass NULL to rely on the default implementation.
|
* log file). Pass NULL to rely on the default implementation.
|
||||||
* This replaces the default #NullLogger with a #DefaultLogger instance. */
|
* This replaces the default #NullLogger with a #DefaultLogger instance. */
|
||||||
static Logger *create(const char* name = ASSIMP_DEFAULT_LOG_NAME,
|
static Logger *create(const char* name = ASSIMP_DEFAULT_LOG_NAME,
|
||||||
LogSeverity severity = NORMAL,
|
LogSeverity severity = NORMAL,
|
||||||
unsigned int defStreams = aiDefaultLogStream_DEBUGGER | aiDefaultLogStream_FILE,
|
unsigned int defStreams = aiDefaultLogStream_DEBUGGER | aiDefaultLogStream_FILE,
|
||||||
IOSystem* io = NULL);
|
IOSystem* io = NULL);
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
/** @brief Setup a custom #Logger implementation.
|
/** @brief Setup a custom #Logger implementation.
|
||||||
*
|
*
|
||||||
* Use this if the provided #DefaultLogger class doesn't fit into
|
* Use this if the provided #DefaultLogger class doesn't fit into
|
||||||
* your needs. If the provided message formatting is OK for you,
|
* your needs. If the provided message formatting is OK for you,
|
||||||
* it's much easier to use #create() and to attach your own custom
|
* it's much easier to use #create() and to attach your own custom
|
||||||
* output streams to it.
|
* output streams to it.
|
||||||
* @param logger Pass NULL to setup a default NullLogger*/
|
* @param logger Pass NULL to setup a default NullLogger*/
|
||||||
static void set (Logger *logger);
|
static void set (Logger *logger);
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
/** @brief Getter for singleton instance
|
|
||||||
* @return Only instance. This is never null, but it could be a
|
|
||||||
* NullLogger. Use isNullLogger to check this.*/
|
|
||||||
static Logger *get();
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
/** @brief Return whether a #NullLogger is currently active
|
/** @brief Getter for singleton instance
|
||||||
* @return true if the current logger is a #NullLogger.
|
* @return Only instance. This is never null, but it could be a
|
||||||
* Use create() or set() to setup a logger that does actually do
|
* NullLogger. Use isNullLogger to check this.*/
|
||||||
* something else than just rejecting all log messages. */
|
static Logger *get();
|
||||||
static bool isNullLogger();
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
/** @brief Kills the current singleton logger and replaces it with a
|
|
||||||
* #NullLogger instance. */
|
|
||||||
static void kill();
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
|
||||||
/** @copydoc Logger::attachStream */
|
|
||||||
bool attachStream(LogStream *pStream,
|
|
||||||
unsigned int severity);
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
/** @copydoc Logger::detatchStream */
|
/** @brief Return whether a #NullLogger is currently active
|
||||||
bool detatchStream(LogStream *pStream,
|
* @return true if the current logger is a #NullLogger.
|
||||||
unsigned int severity);
|
* Use create() or set() to setup a logger that does actually do
|
||||||
|
* something else than just rejecting all log messages. */
|
||||||
|
static bool isNullLogger();
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
/** @brief Kills the current singleton logger and replaces it with a
|
||||||
|
* #NullLogger instance. */
|
||||||
|
static void kill();
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
/** @copydoc Logger::attachStream */
|
||||||
|
bool attachStream(LogStream *pStream,
|
||||||
|
unsigned int severity);
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
/** @copydoc Logger::detatchStream */
|
||||||
|
bool detatchStream(LogStream *pStream,
|
||||||
|
unsigned int severity);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
/** @briefPrivate construction for internal use by create().
|
/** @briefPrivate construction for internal use by create().
|
||||||
* @param severity Logging granularity */
|
* @param severity Logging granularity */
|
||||||
DefaultLogger(LogSeverity severity);
|
explicit DefaultLogger(LogSeverity severity);
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
/** @briefDestructor */
|
/** @briefDestructor */
|
||||||
~DefaultLogger();
|
~DefaultLogger();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
/** @brief Logs debug infos, only been written when severity level VERBOSE is set */
|
/** @brief Logs debug infos, only been written when severity level VERBOSE is set */
|
||||||
void OnDebug(const char* message);
|
void OnDebug(const char* message);
|
||||||
|
|
||||||
/** @brief Logs an info message */
|
/** @brief Logs an info message */
|
||||||
void OnInfo(const char* message);
|
void OnInfo(const char* message);
|
||||||
|
|
||||||
/** @brief Logs a warning message */
|
/** @brief Logs a warning message */
|
||||||
void OnWarn(const char* message);
|
void OnWarn(const char* message);
|
||||||
|
|
||||||
/** @brief Logs an error message */
|
|
||||||
void OnError(const char* message);
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
/** @brief Logs an error message */
|
||||||
/** @brief Writes a message to all streams */
|
void OnError(const char* message);
|
||||||
void WriteToStreams(const char* message, ErrorSeverity ErrorSev );
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
/** @brief Returns the thread id.
|
/** @brief Writes a message to all streams */
|
||||||
* @note This is an OS specific feature, if not supported, a
|
void WriteToStreams(const char* message, ErrorSeverity ErrorSev );
|
||||||
* zero will be returned.
|
|
||||||
*/
|
// ----------------------------------------------------------------------
|
||||||
unsigned int GetThreadID();
|
/** @brief Returns the thread id.
|
||||||
|
* @note This is an OS specific feature, if not supported, a
|
||||||
|
* zero will be returned.
|
||||||
|
*/
|
||||||
|
unsigned int GetThreadID();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Aliases for stream container
|
// Aliases for stream container
|
||||||
typedef std::vector<LogStreamInfo*> StreamArray;
|
typedef std::vector<LogStreamInfo*> StreamArray;
|
||||||
typedef std::vector<LogStreamInfo*>::iterator StreamIt;
|
typedef std::vector<LogStreamInfo*>::iterator StreamIt;
|
||||||
typedef std::vector<LogStreamInfo*>::const_iterator ConstStreamIt;
|
typedef std::vector<LogStreamInfo*>::const_iterator ConstStreamIt;
|
||||||
|
|
||||||
//! only logging instance
|
//! only logging instance
|
||||||
static Logger *m_pLogger;
|
static Logger *m_pLogger;
|
||||||
static NullLogger s_pNullLogger;
|
static NullLogger s_pNullLogger;
|
||||||
|
|
||||||
//! Attached streams
|
//! Attached streams
|
||||||
StreamArray m_StreamArray;
|
StreamArray m_StreamArray;
|
||||||
|
|
||||||
bool noRepeatMsg;
|
bool noRepeatMsg;
|
||||||
char lastMsg[MAX_LOG_MESSAGE_LENGTH*2];
|
char lastMsg[MAX_LOG_MESSAGE_LENGTH*2];
|
||||||
size_t lastLen;
|
size_t lastLen;
|
||||||
};
|
};
|
||||||
// ------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ Copyright (c) 2006-2011, assimp team
|
|||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,21 +25,21 @@ contributors may be used to endorse or promote products
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @file export.hpp
|
/** @file Exporter.hpp
|
||||||
* @brief Defines the CPP-API for the Assimp export interface
|
* @brief Defines the CPP-API for the Assimp export interface
|
||||||
*/
|
*/
|
||||||
#ifndef AI_EXPORT_HPP_INC
|
#ifndef AI_EXPORT_HPP_INC
|
||||||
@@ -48,268 +48,457 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#ifndef ASSIMP_BUILD_NO_EXPORT
|
#ifndef ASSIMP_BUILD_NO_EXPORT
|
||||||
|
|
||||||
#include "cexport.h"
|
#include "cexport.h"
|
||||||
|
#include <map>
|
||||||
|
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
class ExporterPimpl;
|
class ExporterPimpl;
|
||||||
class IOSystem;
|
class IOSystem;
|
||||||
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
/** CPP-API: The Exporter class forms an C++ interface to the export functionality
|
/** CPP-API: The Exporter class forms an C++ interface to the export functionality
|
||||||
* of the Open Asset Import Library. Note that the export interface is available
|
* of the Open Asset Import Library. Note that the export interface is available
|
||||||
* only if Assimp has been built with ASSIMP_BUILD_NO_EXPORT not defined.
|
* only if Assimp has been built with ASSIMP_BUILD_NO_EXPORT not defined.
|
||||||
*
|
*
|
||||||
* The interface is modelled after the importer interface and mostly
|
* The interface is modelled after the importer interface and mostly
|
||||||
* symmetric. The same rules for threading etc. apply.
|
* symmetric. The same rules for threading etc. apply.
|
||||||
*
|
*
|
||||||
* In a nutshell, there are two export interfaces: #Export, which writes the
|
* In a nutshell, there are two export interfaces: #Export, which writes the
|
||||||
* output file(s) either to the regular file system or to a user-supplied
|
* output file(s) either to the regular file system or to a user-supplied
|
||||||
* #IOSystem, and #ExportToBlob which returns a linked list of memory
|
* #IOSystem, and #ExportToBlob which returns a linked list of memory
|
||||||
* buffers (blob), each referring to one output file (in most cases
|
* buffers (blob), each referring to one output file (in most cases
|
||||||
* there will be only one output file of course, but this extra complexity is
|
* there will be only one output file of course, but this extra complexity is
|
||||||
* needed since Assimp aims at supporting a wide range of file formats).
|
* needed since Assimp aims at supporting a wide range of file formats).
|
||||||
*
|
*
|
||||||
* #ExportToBlob is especially useful if you intend to work
|
* #ExportToBlob is especially useful if you intend to work
|
||||||
* with the data in-memory.
|
* with the data in-memory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
class ASSIMP_API ExportProperties;
|
||||||
|
|
||||||
class ASSIMP_API Exporter
|
class ASSIMP_API Exporter
|
||||||
// TODO: causes good ol' base class has no dll interface warning
|
// TODO: causes good ol' base class has no dll interface warning
|
||||||
//#ifdef __cplusplus
|
//#ifdef __cplusplus
|
||||||
// : public boost::noncopyable
|
// : public boost::noncopyable
|
||||||
//#endif // __cplusplus
|
//#endif // __cplusplus
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/** Function pointer type of a Export worker function */
|
/** Function pointer type of a Export worker function */
|
||||||
typedef void (*fpExportFunc)(const char*,IOSystem*,const aiScene*);
|
typedef void (*fpExportFunc)(const char*, IOSystem*, const aiScene*, const ExportProperties*);
|
||||||
|
|
||||||
/** Internal description of an Assimp export format option */
|
/** Internal description of an Assimp export format option */
|
||||||
struct ExportFormatEntry
|
struct ExportFormatEntry
|
||||||
{
|
{
|
||||||
/// Public description structure to be returned by aiGetExportFormatDescription()
|
/// Public description structure to be returned by aiGetExportFormatDescription()
|
||||||
aiExportFormatDesc mDescription;
|
aiExportFormatDesc mDescription;
|
||||||
|
|
||||||
// Worker function to do the actual exporting
|
// Worker function to do the actual exporting
|
||||||
fpExportFunc mExportFunction;
|
fpExportFunc mExportFunction;
|
||||||
|
|
||||||
// Postprocessing steps to be executed PRIOR to invoking mExportFunction
|
// Postprocessing steps to be executed PRIOR to invoking mExportFunction
|
||||||
unsigned int mEnforcePP;
|
unsigned int mEnforcePP;
|
||||||
|
|
||||||
// Constructor to fill all entries
|
// Constructor to fill all entries
|
||||||
ExportFormatEntry( const char* pId, const char* pDesc, const char* pExtension, fpExportFunc pFunction, unsigned int pEnforcePP = 0u)
|
ExportFormatEntry( const char* pId, const char* pDesc, const char* pExtension, fpExportFunc pFunction, unsigned int pEnforcePP = 0u)
|
||||||
{
|
{
|
||||||
mDescription.id = pId;
|
mDescription.id = pId;
|
||||||
mDescription.description = pDesc;
|
mDescription.description = pDesc;
|
||||||
mDescription.fileExtension = pExtension;
|
mDescription.fileExtension = pExtension;
|
||||||
mExportFunction = pFunction;
|
mExportFunction = pFunction;
|
||||||
mEnforcePP = pEnforcePP;
|
mEnforcePP = pEnforcePP;
|
||||||
}
|
}
|
||||||
|
|
||||||
ExportFormatEntry() : mExportFunction(), mEnforcePP() {}
|
ExportFormatEntry() :
|
||||||
};
|
mExportFunction()
|
||||||
|
, mEnforcePP()
|
||||||
|
{
|
||||||
|
mDescription.id = NULL;
|
||||||
|
mDescription.description = NULL;
|
||||||
|
mDescription.fileExtension = NULL;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
||||||
Exporter();
|
Exporter();
|
||||||
~Exporter();
|
~Exporter();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** Supplies a custom IO handler to the exporter to use to open and
|
/** Supplies a custom IO handler to the exporter to use to open and
|
||||||
* access files.
|
* access files.
|
||||||
*
|
*
|
||||||
* If you need #Export to use custom IO logic to access the files,
|
* If you need #Export to use custom IO logic to access the files,
|
||||||
* you need to supply a custom implementation of IOSystem and
|
* you need to supply a custom implementation of IOSystem and
|
||||||
* IOFile to the exporter.
|
* IOFile to the exporter.
|
||||||
*
|
*
|
||||||
* #Exporter takes ownership of the object and will destroy it
|
* #Exporter takes ownership of the object and will destroy it
|
||||||
* afterwards. The previously assigned handler will be deleted.
|
* afterwards. The previously assigned handler will be deleted.
|
||||||
* Pass NULL to take again ownership of your IOSystem and reset Assimp
|
* Pass NULL to take again ownership of your IOSystem and reset Assimp
|
||||||
* to use its default implementation, which uses plain file IO.
|
* to use its default implementation, which uses plain file IO.
|
||||||
*
|
*
|
||||||
* @param pIOHandler The IO handler to be used in all file accesses
|
* @param pIOHandler The IO handler to be used in all file accesses
|
||||||
* of the Importer. */
|
* of the Importer. */
|
||||||
void SetIOHandler( IOSystem* pIOHandler);
|
void SetIOHandler( IOSystem* pIOHandler);
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** Retrieves the IO handler that is currently set.
|
/** Retrieves the IO handler that is currently set.
|
||||||
* You can use #IsDefaultIOHandler() to check whether the returned
|
* You can use #IsDefaultIOHandler() to check whether the returned
|
||||||
* interface is the default IO handler provided by ASSIMP. The default
|
* interface is the default IO handler provided by ASSIMP. The default
|
||||||
* handler is active as long the application doesn't supply its own
|
* handler is active as long the application doesn't supply its own
|
||||||
* custom IO handler via #SetIOHandler().
|
* custom IO handler via #SetIOHandler().
|
||||||
* @return A valid IOSystem interface, never NULL. */
|
* @return A valid IOSystem interface, never NULL. */
|
||||||
IOSystem* GetIOHandler() const;
|
IOSystem* GetIOHandler() const;
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** Checks whether a default IO handler is active
|
/** Checks whether a default IO handler is active
|
||||||
* A default handler is active as long the application doesn't
|
* A default handler is active as long the application doesn't
|
||||||
* supply its own custom IO handler via #SetIOHandler().
|
* supply its own custom IO handler via #SetIOHandler().
|
||||||
* @return true by default */
|
* @return true by default */
|
||||||
bool IsDefaultIOHandler() const;
|
bool IsDefaultIOHandler() const;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** Exports the given scene to a chosen file format. Returns the exported
|
/** Exports the given scene to a chosen file format. Returns the exported
|
||||||
* data as a binary blob which you can write into a file or something.
|
* data as a binary blob which you can write into a file or something.
|
||||||
* When you're done with the data, simply let the #Exporter instance go
|
* When you're done with the data, simply let the #Exporter instance go
|
||||||
* out of scope to have it released automatically.
|
* out of scope to have it released automatically.
|
||||||
* @param pScene The scene to export. Stays in possession of the caller,
|
* @param pScene The scene to export. Stays in possession of the caller,
|
||||||
* is not changed by the function.
|
* is not changed by the function.
|
||||||
* @param pFormatId ID string to specify to which format you want to
|
* @param pFormatId ID string to specify to which format you want to
|
||||||
* export to. Use
|
* export to. Use
|
||||||
* #GetExportFormatCount / #GetExportFormatDescription to learn which
|
* #GetExportFormatCount / #GetExportFormatDescription to learn which
|
||||||
* export formats are available.
|
* export formats are available.
|
||||||
* @param pPreprocessing See the documentation for #Export
|
* @param pPreprocessing See the documentation for #Export
|
||||||
* @return the exported data or NULL in case of error.
|
* @return the exported data or NULL in case of error.
|
||||||
* @note If the Exporter instance did already hold a blob from
|
* @note If the Exporter instance did already hold a blob from
|
||||||
* a previous call to #ExportToBlob, it will be disposed.
|
* a previous call to #ExportToBlob, it will be disposed.
|
||||||
* Any IO handlers set via #SetIOHandler are ignored here.
|
* Any IO handlers set via #SetIOHandler are ignored here.
|
||||||
* @note Use aiCopyScene() to get a modifiable copy of a previously
|
* @note Use aiCopyScene() to get a modifiable copy of a previously
|
||||||
* imported scene. */
|
* imported scene. */
|
||||||
const aiExportDataBlob* ExportToBlob( const aiScene* pScene, const char* pFormatId, unsigned int pPreprocessing = 0u );
|
const aiExportDataBlob* ExportToBlob( const aiScene* pScene, const char* pFormatId, unsigned int pPreprocessing = 0u, const ExportProperties* pProperties = NULL);
|
||||||
inline const aiExportDataBlob* ExportToBlob( const aiScene* pScene, const std::string& pFormatId, unsigned int pPreprocessing = 0u );
|
inline const aiExportDataBlob* ExportToBlob( const aiScene* pScene, const std::string& pFormatId, unsigned int pPreprocessing = 0u, const ExportProperties* pProperties = NULL);
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** Convenience function to export directly to a file. Use
|
/** Convenience function to export directly to a file. Use
|
||||||
* #SetIOSystem to supply a custom IOSystem to gain fine-grained control
|
* #SetIOSystem to supply a custom IOSystem to gain fine-grained control
|
||||||
* about the output data flow of the export process.
|
* about the output data flow of the export process.
|
||||||
* @param pBlob A data blob obtained from a previous call to #aiExportScene. Must not be NULL.
|
* @param pBlob A data blob obtained from a previous call to #aiExportScene. Must not be NULL.
|
||||||
* @param pPath Full target file name. Target must be accessible.
|
* @param pPath Full target file name. Target must be accessible.
|
||||||
* @param pPreprocessing Accepts any choice of the #aiPostProcessing enumerated
|
* @param pPreprocessing Accepts any choice of the #aiPostProcessSteps enumerated
|
||||||
* flags, but in reality only a subset of them makes sense here. Specifying
|
* flags, but in reality only a subset of them makes sense here. Specifying
|
||||||
* 'preprocessing' flags is useful if the input scene does not conform to
|
* 'preprocessing' flags is useful if the input scene does not conform to
|
||||||
* Assimp's default conventions as specified in the @link data Data Structures Page @endlink.
|
* Assimp's default conventions as specified in the @link data Data Structures Page @endlink.
|
||||||
* In short, this means the geometry data should use a right-handed coordinate systems, face
|
* In short, this means the geometry data should use a right-handed coordinate systems, face
|
||||||
* winding should be counter-clockwise and the UV coordinate origin is assumed to be in
|
* winding should be counter-clockwise and the UV coordinate origin is assumed to be in
|
||||||
* the upper left. The #aiProcess_MakeLeftHanded, #aiProcess_FlipUVs and
|
* the upper left. The #aiProcess_MakeLeftHanded, #aiProcess_FlipUVs and
|
||||||
* #aiProcess_FlipWindingOrder flags are used in the import side to allow users
|
* #aiProcess_FlipWindingOrder flags are used in the import side to allow users
|
||||||
* to have those defaults automatically adapted to their conventions. Specifying those flags
|
* to have those defaults automatically adapted to their conventions. Specifying those flags
|
||||||
* for exporting has the opposite effect, respectively. Some other of the
|
* for exporting has the opposite effect, respectively. Some other of the
|
||||||
* #aiPostProcessSteps enumerated values may be useful as well, but you'll need
|
* #aiPostProcessSteps enumerated values may be useful as well, but you'll need
|
||||||
* to try out what their effect on the exported file is. Many formats impose
|
* to try out what their effect on the exported file is. Many formats impose
|
||||||
* their own restrictions on the structure of the geometry stored therein,
|
* their own restrictions on the structure of the geometry stored therein,
|
||||||
* so some preprocessing may have little or no effect at all, or may be
|
* so some preprocessing may have little or no effect at all, or may be
|
||||||
* redundant as exporters would apply them anyhow. A good example
|
* redundant as exporters would apply them anyhow. A good example
|
||||||
* is triangulation - whilst you can enforce it by specifying
|
* is triangulation - whilst you can enforce it by specifying
|
||||||
* the #aiProcess_Triangulate flag, most export formats support only
|
* the #aiProcess_Triangulate flag, most export formats support only
|
||||||
* triangulate data so they would run the step even if it wasn't requested.
|
* triangulate data so they would run the step even if it wasn't requested.
|
||||||
*
|
*
|
||||||
* If assimp detects that the input scene was directly taken from the importer side of
|
* If assimp detects that the input scene was directly taken from the importer side of
|
||||||
* the library (i.e. not copied using aiCopyScene and potetially modified afterwards),
|
* the library (i.e. not copied using aiCopyScene and potetially modified afterwards),
|
||||||
* any postprocessing steps already applied to the scene will not be applied again, unless
|
* any postprocessing steps already applied to the scene will not be applied again, unless
|
||||||
* they show non-idempotent behaviour (#aiProcess_MakeLeftHanded, #aiProcess_FlipUVs and
|
* they show non-idempotent behaviour (#aiProcess_MakeLeftHanded, #aiProcess_FlipUVs and
|
||||||
* #aiProcess_FlipWindingOrder).
|
* #aiProcess_FlipWindingOrder).
|
||||||
* @return AI_SUCCESS if everything was fine.
|
* @return AI_SUCCESS if everything was fine.
|
||||||
* @note Use aiCopyScene() to get a modifiable copy of a previously
|
* @note Use aiCopyScene() to get a modifiable copy of a previously
|
||||||
* imported scene.*/
|
* imported scene.*/
|
||||||
aiReturn Export( const aiScene* pScene, const char* pFormatId, const char* pPath, unsigned int pPreprocessing = 0u);
|
aiReturn Export( const aiScene* pScene, const char* pFormatId, const char* pPath, unsigned int pPreprocessing = 0u, const ExportProperties* pProperties = NULL);
|
||||||
inline aiReturn Export( const aiScene* pScene, const std::string& pFormatId, const std::string& pPath, unsigned int pPreprocessing = 0u);
|
inline aiReturn Export( const aiScene* pScene, const std::string& pFormatId, const std::string& pPath, unsigned int pPreprocessing = 0u, const ExportProperties* pProperties = NULL);
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** Returns an error description of an error that occurred in #Export
|
/** Returns an error description of an error that occurred in #Export
|
||||||
* or #ExportToBlob
|
* or #ExportToBlob
|
||||||
*
|
*
|
||||||
* Returns an empty string if no error occurred.
|
* Returns an empty string if no error occurred.
|
||||||
* @return A description of the last error, an empty string if no
|
* @return A description of the last error, an empty string if no
|
||||||
* error occurred. The string is never NULL.
|
* error occurred. The string is never NULL.
|
||||||
*
|
*
|
||||||
* @note The returned function remains valid until one of the
|
* @note The returned function remains valid until one of the
|
||||||
* following methods is called: #Export, #ExportToBlob, #FreeBlob */
|
* following methods is called: #Export, #ExportToBlob, #FreeBlob */
|
||||||
const char* GetErrorString() const;
|
const char* GetErrorString() const;
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** Return the blob obtained from the last call to #ExportToBlob */
|
/** Return the blob obtained from the last call to #ExportToBlob */
|
||||||
const aiExportDataBlob* GetBlob() const;
|
const aiExportDataBlob* GetBlob() const;
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** Orphan the blob from the last call to #ExportToBlob. This means
|
/** Orphan the blob from the last call to #ExportToBlob. This means
|
||||||
* the caller takes ownership and is thus responsible for calling
|
* the caller takes ownership and is thus responsible for calling
|
||||||
* the C API function #aiReleaseExportBlob to release it. */
|
* the C API function #aiReleaseExportBlob to release it. */
|
||||||
const aiExportDataBlob* GetOrphanedBlob() const;
|
const aiExportDataBlob* GetOrphanedBlob() const;
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** Frees the current blob.
|
/** Frees the current blob.
|
||||||
*
|
*
|
||||||
* The function does nothing if no blob has previously been
|
* The function does nothing if no blob has previously been
|
||||||
* previously produced via #ExportToBlob. #FreeBlob is called
|
* previously produced via #ExportToBlob. #FreeBlob is called
|
||||||
* automatically by the destructor. The only reason to call
|
* automatically by the destructor. The only reason to call
|
||||||
* it manually would be to reclain as much storage as possible
|
* it manually would be to reclain as much storage as possible
|
||||||
* without giving up the #Exporter instance yet. */
|
* without giving up the #Exporter instance yet. */
|
||||||
void FreeBlob( );
|
void FreeBlob( );
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** Returns the number of export file formats available in the current
|
/** Returns the number of export file formats available in the current
|
||||||
* Assimp build. Use #Exporter::GetExportFormatDescription to
|
* Assimp build. Use #Exporter::GetExportFormatDescription to
|
||||||
* retrieve infos of a specific export format */
|
* retrieve infos of a specific export format.
|
||||||
size_t GetExportFormatCount() const;
|
*
|
||||||
|
* This includes built-in exporters as well as exporters registered
|
||||||
|
* using #RegisterExporter.
|
||||||
|
**/
|
||||||
|
size_t GetExportFormatCount() const;
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** Returns a description of the nth export file format. Use #
|
/** Returns a description of the nth export file format. Use #
|
||||||
* #Exporter::GetExportFormatCount to learn how many export
|
* #Exporter::GetExportFormatCount to learn how many export
|
||||||
* formats are supported.
|
* formats are supported.
|
||||||
* @param pIndex Index of the export format to retrieve information
|
*
|
||||||
* for. Valid range is 0 to #Exporter::GetExportFormatCount
|
* The returned pointer is of static storage duration iff the
|
||||||
* @return A description of that specific export format.
|
* pIndex pertains to a built-in exporter (i.e. one not registered
|
||||||
* NULL if pIndex is out of range. */
|
* via #RegistrerExporter). It is restricted to the life-time of the
|
||||||
const aiExportFormatDesc* GetExportFormatDescription( size_t pIndex ) const;
|
* #Exporter instance otherwise.
|
||||||
|
*
|
||||||
|
* @param pIndex Index of the export format to retrieve information
|
||||||
|
* for. Valid range is 0 to #Exporter::GetExportFormatCount
|
||||||
|
* @return A description of that specific export format.
|
||||||
|
* NULL if pIndex is out of range. */
|
||||||
|
const aiExportFormatDesc* GetExportFormatDescription( size_t pIndex ) const;
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** Register a custom exporter. Custom export formats are limited to
|
/** Register a custom exporter. Custom export formats are limited to
|
||||||
* to the current #Exporter instance and do not affect the
|
* to the current #Exporter instance and do not affect the
|
||||||
* library globally.
|
* library globally. The indexes under which the format's
|
||||||
* @param desc Exporter description.
|
* export format description can be queried are assigned
|
||||||
* @return aiReturn_SUCCESS if the export format was successfully
|
* monotonously.
|
||||||
* registered. A common cause that would prevent an exporter
|
* @param desc Exporter description.
|
||||||
* from being registered is that its format id is already
|
* @return aiReturn_SUCCESS if the export format was successfully
|
||||||
* occupied by another format. */
|
* registered. A common cause that would prevent an exporter
|
||||||
aiReturn RegisterExporter(const ExportFormatEntry& desc);
|
* from being registered is that its format id is already
|
||||||
|
* occupied by another format. */
|
||||||
|
aiReturn RegisterExporter(const ExportFormatEntry& desc);
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** Remove an export format previously registered with #RegisterExporter
|
/** Remove an export format previously registered with #RegisterExporter
|
||||||
* from the #Exporter instance (this can also be used to drop
|
* from the #Exporter instance (this can also be used to drop
|
||||||
* builtin exporters because those are implicitly registered
|
* builtin exporters because those are implicitly registered
|
||||||
* using #RegisterExporter).
|
* using #RegisterExporter).
|
||||||
* @param id Format id to be unregistered, this refers to the
|
* @param id Format id to be unregistered, this refers to the
|
||||||
* 'id' field of #aiExportFormatDesc.
|
* 'id' field of #aiExportFormatDesc.
|
||||||
* @note Calling this method on a format description not yet registered
|
* @note Calling this method on a format description not yet registered
|
||||||
* has no effect.*/
|
* has no effect.*/
|
||||||
void UnregisterExporter(const char* id);
|
void UnregisterExporter(const char* id);
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
// Just because we don't want you to know how we're hacking around.
|
// Just because we don't want you to know how we're hacking around.
|
||||||
ExporterPimpl* pimpl;
|
ExporterPimpl* pimpl;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class ASSIMP_API ExportProperties
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// Data type to store the key hash
|
||||||
|
typedef unsigned int KeyType;
|
||||||
|
|
||||||
|
// typedefs for our four configuration maps.
|
||||||
|
// We don't need more, so there is no need for a generic solution
|
||||||
|
typedef std::map<KeyType, int> IntPropertyMap;
|
||||||
|
typedef std::map<KeyType, float> FloatPropertyMap;
|
||||||
|
typedef std::map<KeyType, std::string> StringPropertyMap;
|
||||||
|
typedef std::map<KeyType, aiMatrix4x4> MatrixPropertyMap;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
/** Standard constructor
|
||||||
|
* @see ExportProperties()
|
||||||
|
*/
|
||||||
|
|
||||||
|
ExportProperties();
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** Copy constructor.
|
||||||
|
*
|
||||||
|
* This copies the configuration properties of another ExportProperties.
|
||||||
|
* @see ExportProperties(const ExportProperties& other)
|
||||||
|
*/
|
||||||
|
ExportProperties(const ExportProperties& other);
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** Set an integer configuration property.
|
||||||
|
* @param szName Name of the property. All supported properties
|
||||||
|
* are defined in the aiConfig.g header (all constants share the
|
||||||
|
* prefix AI_CONFIG_XXX and are simple strings).
|
||||||
|
* @param iValue New value of the property
|
||||||
|
* @return true if the property was set before. The new value replaces
|
||||||
|
* the previous value in this case.
|
||||||
|
* @note Property of different types (float, int, string ..) are kept
|
||||||
|
* on different stacks, so calling SetPropertyInteger() for a
|
||||||
|
* floating-point property has no effect - the loader will call
|
||||||
|
* GetPropertyFloat() to read the property, but it won't be there.
|
||||||
|
*/
|
||||||
|
bool SetPropertyInteger(const char* szName, int iValue);
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** Set a boolean configuration property. Boolean properties
|
||||||
|
* are stored on the integer stack internally so it's possible
|
||||||
|
* to set them via #SetPropertyBool and query them with
|
||||||
|
* #GetPropertyBool and vice versa.
|
||||||
|
* @see SetPropertyInteger()
|
||||||
|
*/
|
||||||
|
bool SetPropertyBool(const char* szName, bool value) {
|
||||||
|
return SetPropertyInteger(szName,value);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** Set a floating-point configuration property.
|
||||||
|
* @see SetPropertyInteger()
|
||||||
|
*/
|
||||||
|
bool SetPropertyFloat(const char* szName, float fValue);
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** Set a string configuration property.
|
||||||
|
* @see SetPropertyInteger()
|
||||||
|
*/
|
||||||
|
bool SetPropertyString(const char* szName, const std::string& sValue);
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** Set a matrix configuration property.
|
||||||
|
* @see SetPropertyInteger()
|
||||||
|
*/
|
||||||
|
bool SetPropertyMatrix(const char* szName, const aiMatrix4x4& sValue);
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** Get a configuration property.
|
||||||
|
* @param szName Name of the property. All supported properties
|
||||||
|
* are defined in the aiConfig.g header (all constants share the
|
||||||
|
* prefix AI_CONFIG_XXX).
|
||||||
|
* @param iErrorReturn Value that is returned if the property
|
||||||
|
* is not found.
|
||||||
|
* @return Current value of the property
|
||||||
|
* @note Property of different types (float, int, string ..) are kept
|
||||||
|
* on different lists, so calling SetPropertyInteger() for a
|
||||||
|
* floating-point property has no effect - the loader will call
|
||||||
|
* GetPropertyFloat() to read the property, but it won't be there.
|
||||||
|
*/
|
||||||
|
int GetPropertyInteger(const char* szName,
|
||||||
|
int iErrorReturn = 0xffffffff) const;
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** Get a boolean configuration property. Boolean properties
|
||||||
|
* are stored on the integer stack internally so it's possible
|
||||||
|
* to set them via #SetPropertyBool and query them with
|
||||||
|
* #GetPropertyBool and vice versa.
|
||||||
|
* @see GetPropertyInteger()
|
||||||
|
*/
|
||||||
|
bool GetPropertyBool(const char* szName, bool bErrorReturn = false) const {
|
||||||
|
return GetPropertyInteger(szName,bErrorReturn)!=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** Get a floating-point configuration property
|
||||||
|
* @see GetPropertyInteger()
|
||||||
|
*/
|
||||||
|
float GetPropertyFloat(const char* szName,
|
||||||
|
float fErrorReturn = 10e10f) const;
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** Get a string configuration property
|
||||||
|
*
|
||||||
|
* The return value remains valid until the property is modified.
|
||||||
|
* @see GetPropertyInteger()
|
||||||
|
*/
|
||||||
|
const std::string GetPropertyString(const char* szName,
|
||||||
|
const std::string& sErrorReturn = "") const;
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** Get a matrix configuration property
|
||||||
|
*
|
||||||
|
* The return value remains valid until the property is modified.
|
||||||
|
* @see GetPropertyInteger()
|
||||||
|
*/
|
||||||
|
const aiMatrix4x4 GetPropertyMatrix(const char* szName,
|
||||||
|
const aiMatrix4x4& sErrorReturn = aiMatrix4x4()) const;
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** Determine a integer configuration property has been set.
|
||||||
|
* @see HasPropertyInteger()
|
||||||
|
*/
|
||||||
|
bool HasPropertyInteger(const char* szName) const;
|
||||||
|
|
||||||
|
/** Determine a boolean configuration property has been set.
|
||||||
|
* @see HasPropertyBool()
|
||||||
|
*/
|
||||||
|
bool HasPropertyBool(const char* szName) const;
|
||||||
|
|
||||||
|
/** Determine a boolean configuration property has been set.
|
||||||
|
* @see HasPropertyFloat()
|
||||||
|
*/
|
||||||
|
bool HasPropertyFloat(const char* szName) const;
|
||||||
|
|
||||||
|
/** Determine a String configuration property has been set.
|
||||||
|
* @see HasPropertyString()
|
||||||
|
*/
|
||||||
|
bool HasPropertyString(const char* szName) const;
|
||||||
|
|
||||||
|
/** Determine a Matrix configuration property has been set.
|
||||||
|
* @see HasPropertyMatrix()
|
||||||
|
*/
|
||||||
|
bool HasPropertyMatrix(const char* szName) const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
/** List of integer properties */
|
||||||
|
IntPropertyMap mIntProperties;
|
||||||
|
|
||||||
|
/** List of floating-point properties */
|
||||||
|
FloatPropertyMap mFloatProperties;
|
||||||
|
|
||||||
|
/** List of string properties */
|
||||||
|
StringPropertyMap mStringProperties;
|
||||||
|
|
||||||
|
/** List of Matrix properties */
|
||||||
|
MatrixPropertyMap mMatrixProperties;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
inline const aiExportDataBlob* Exporter :: ExportToBlob( const aiScene* pScene, const std::string& pFormatId,unsigned int pPreprocessing )
|
inline const aiExportDataBlob* Exporter :: ExportToBlob( const aiScene* pScene, const std::string& pFormatId,unsigned int pPreprocessing, const ExportProperties* pProperties)
|
||||||
{
|
{
|
||||||
return ExportToBlob(pScene,pFormatId.c_str(),pPreprocessing);
|
return ExportToBlob(pScene,pFormatId.c_str(),pPreprocessing, pProperties);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
inline aiReturn Exporter :: Export( const aiScene* pScene, const std::string& pFormatId, const std::string& pPath, unsigned int pPreprocessing )
|
inline aiReturn Exporter :: Export( const aiScene* pScene, const std::string& pFormatId, const std::string& pPath, unsigned int pPreprocessing, const ExportProperties* pProperties)
|
||||||
{
|
{
|
||||||
return Export(pScene,pFormatId.c_str(),pPath.c_str(),pPreprocessing);
|
return Export(pScene,pFormatId.c_str(),pPath.c_str(),pPreprocessing, pProperties);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Assimp
|
} // namespace Assimp
|
||||||
#endif // ASSIMP_BUILD_NO_EXPORT
|
#endif // ASSIMP_BUILD_NO_EXPORT
|
||||||
#endif // AI_EXPORT_HPP_INC
|
#endif // AI_EXPORT_HPP_INC
|
||||||
|
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,21 +25,21 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
/** @file IOStream.h
|
/** @file IOStream.hpp
|
||||||
* @brief File I/O wrappers for C++.
|
* @brief File I/O wrappers for C++.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef AI_IOSTREAM_H_INC
|
#ifndef AI_IOSTREAM_H_INC
|
||||||
@@ -48,11 +48,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
#ifndef __cplusplus
|
#ifndef __cplusplus
|
||||||
# error This header requires C++ to be used. aiFileIO.h is the \
|
# error This header requires C++ to be used. aiFileIO.h is the \
|
||||||
corresponding C interface.
|
corresponding C interface.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
/** @brief CPP-API: Class to handle file I/O for C++
|
/** @brief CPP-API: Class to handle file I/O for C++
|
||||||
@@ -63,74 +63,74 @@ namespace Assimp {
|
|||||||
*/
|
*/
|
||||||
class ASSIMP_API IOStream
|
class ASSIMP_API IOStream
|
||||||
#ifndef SWIG
|
#ifndef SWIG
|
||||||
: public Intern::AllocateFromAssimpHeap
|
: public Intern::AllocateFromAssimpHeap
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
/** Constructor protected, use IOSystem::Open() to create an instance. */
|
/** Constructor protected, use IOSystem::Open() to create an instance. */
|
||||||
IOStream(void);
|
IOStream(void);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Destructor. Deleting the object closes the underlying file,
|
/** @brief Destructor. Deleting the object closes the underlying file,
|
||||||
* alternatively you may use IOSystem::Close() to release the file.
|
* alternatively you may use IOSystem::Close() to release the file.
|
||||||
*/
|
*/
|
||||||
virtual ~IOStream();
|
virtual ~IOStream();
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Read from the file
|
/** @brief Read from the file
|
||||||
*
|
*
|
||||||
* See fread() for more details
|
* See fread() for more details
|
||||||
* This fails for write-only files */
|
* This fails for write-only files */
|
||||||
virtual size_t Read(void* pvBuffer,
|
virtual size_t Read(void* pvBuffer,
|
||||||
size_t pSize,
|
size_t pSize,
|
||||||
size_t pCount) = 0;
|
size_t pCount) = 0;
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Write to the file
|
/** @brief Write to the file
|
||||||
*
|
*
|
||||||
* See fwrite() for more details
|
* See fwrite() for more details
|
||||||
* This fails for read-only files */
|
* This fails for read-only files */
|
||||||
virtual size_t Write(const void* pvBuffer,
|
virtual size_t Write(const void* pvBuffer,
|
||||||
size_t pSize,
|
size_t pSize,
|
||||||
size_t pCount) = 0;
|
size_t pCount) = 0;
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Set the read/write cursor of the file
|
/** @brief Set the read/write cursor of the file
|
||||||
*
|
*
|
||||||
* Note that the offset is _negative_ for aiOrigin_END.
|
* Note that the offset is _negative_ for aiOrigin_END.
|
||||||
* See fseek() for more details */
|
* See fseek() for more details */
|
||||||
virtual aiReturn Seek(size_t pOffset,
|
virtual aiReturn Seek(size_t pOffset,
|
||||||
aiOrigin pOrigin) = 0;
|
aiOrigin pOrigin) = 0;
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Get the current position of the read/write cursor
|
/** @brief Get the current position of the read/write cursor
|
||||||
*
|
*
|
||||||
* See ftell() for more details */
|
* See ftell() for more details */
|
||||||
virtual size_t Tell() const = 0;
|
virtual size_t Tell() const = 0;
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Returns filesize
|
/** @brief Returns filesize
|
||||||
* Returns the filesize. */
|
* Returns the filesize. */
|
||||||
virtual size_t FileSize() const = 0;
|
virtual size_t FileSize() const = 0;
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Flush the contents of the file buffer (for writers)
|
/** @brief Flush the contents of the file buffer (for writers)
|
||||||
* See fflush() for more details.
|
* See fflush() for more details.
|
||||||
*/
|
*/
|
||||||
virtual void Flush() = 0;
|
virtual void Flush() = 0;
|
||||||
}; //! class IOStream
|
}; //! class IOStream
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
inline IOStream::IOStream()
|
inline IOStream::IOStream()
|
||||||
{
|
{
|
||||||
// empty
|
// empty
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
inline IOStream::~IOStream()
|
inline IOStream::~IOStream()
|
||||||
{
|
{
|
||||||
// empty
|
// empty
|
||||||
}
|
}
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
} //!namespace Assimp
|
} //!namespace Assimp
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,21 +25,21 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @file IOSystem.h
|
/** @file IOSystem.hpp
|
||||||
* @brief File system wrapper for C++. Inherit this class to supply
|
* @brief File system wrapper for C++. Inherit this class to supply
|
||||||
* custom file handling logic to the Import library.
|
* custom file handling logic to the Import library.
|
||||||
*/
|
*/
|
||||||
@@ -48,12 +48,15 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#define AI_IOSYSTEM_H_INC
|
#define AI_IOSYSTEM_H_INC
|
||||||
|
|
||||||
#ifndef __cplusplus
|
#ifndef __cplusplus
|
||||||
# error This header requires C++ to be used. aiFileIO.h is the \
|
# error This header requires C++ to be used. aiFileIO.h is the \
|
||||||
corresponding C interface.
|
corresponding C interface.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
namespace Assimp {
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace Assimp {
|
||||||
class IOStream;
|
class IOStream;
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@@ -66,160 +69,222 @@ class IOStream;
|
|||||||
* @see Importer::SetIOHandler() */
|
* @see Importer::SetIOHandler() */
|
||||||
class ASSIMP_API IOSystem
|
class ASSIMP_API IOSystem
|
||||||
#ifndef SWIG
|
#ifndef SWIG
|
||||||
: public Intern::AllocateFromAssimpHeap
|
: public Intern::AllocateFromAssimpHeap
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Default constructor.
|
/** @brief Default constructor.
|
||||||
*
|
*
|
||||||
* Create an instance of your derived class and assign it to an
|
* Create an instance of your derived class and assign it to an
|
||||||
* #Assimp::Importer instance by calling Importer::SetIOHandler().
|
* #Assimp::Importer instance by calling Importer::SetIOHandler().
|
||||||
*/
|
*/
|
||||||
IOSystem();
|
IOSystem();
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Virtual destructor.
|
/** @brief Virtual destructor.
|
||||||
*
|
*
|
||||||
* It is safe to be called from within DLL Assimp, we're constructed
|
* It is safe to be called from within DLL Assimp, we're constructed
|
||||||
* on Assimp's heap.
|
* on Assimp's heap.
|
||||||
*/
|
*/
|
||||||
virtual ~IOSystem();
|
virtual ~IOSystem();
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief For backward compatibility
|
/** @brief For backward compatibility
|
||||||
* @see Exists(const char*)
|
* @see Exists(const char*)
|
||||||
*/
|
*/
|
||||||
AI_FORCE_INLINE bool Exists( const std::string& pFile) const;
|
AI_FORCE_INLINE bool Exists( const std::string& pFile) const;
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Tests for the existence of a file at the given path.
|
/** @brief Tests for the existence of a file at the given path.
|
||||||
*
|
*
|
||||||
* @param pFile Path to the file
|
* @param pFile Path to the file
|
||||||
* @return true if there is a file with this path, else false.
|
* @return true if there is a file with this path, else false.
|
||||||
*/
|
*/
|
||||||
|
virtual bool Exists( const char* pFile) const = 0;
|
||||||
|
|
||||||
virtual bool Exists( const char* pFile) const = 0;
|
// -------------------------------------------------------------------
|
||||||
|
/** @brief Returns the system specific directory separator
|
||||||
|
* @return System specific directory separator
|
||||||
|
*/
|
||||||
|
virtual char getOsSeparator() const = 0;
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** @brief Open a new file with a given path.
|
||||||
|
*
|
||||||
|
* When the access to the file is finished, call Close() to release
|
||||||
|
* all associated resources (or the virtual dtor of the IOStream).
|
||||||
|
*
|
||||||
|
* @param pFile Path to the file
|
||||||
|
* @param pMode Desired file I/O mode. Required are: "wb", "w", "wt",
|
||||||
|
* "rb", "r", "rt".
|
||||||
|
*
|
||||||
|
* @return New IOStream interface allowing the lib to access
|
||||||
|
* the underlying file.
|
||||||
|
* @note When implementing this class to provide custom IO handling,
|
||||||
|
* you probably have to supply an own implementation of IOStream as well.
|
||||||
|
*/
|
||||||
|
virtual IOStream* Open(const char* pFile,
|
||||||
|
const char* pMode = "rb") = 0;
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** @brief For backward compatibility
|
||||||
|
* @see Open(const char*, const char*)
|
||||||
|
*/
|
||||||
|
inline IOStream* Open(const std::string& pFile,
|
||||||
|
const std::string& pMode = std::string("rb"));
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Returns the system specific directory separator
|
/** @brief Closes the given file and releases all resources
|
||||||
* @return System specific directory separator
|
* associated with it.
|
||||||
*/
|
* @param pFile The file instance previously created by Open().
|
||||||
virtual char getOsSeparator() const = 0;
|
*/
|
||||||
|
virtual void Close( IOStream* pFile) = 0;
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** @brief Compares two paths and check whether the point to
|
||||||
|
* identical files.
|
||||||
|
*
|
||||||
|
* The dummy implementation of this virtual member performs a
|
||||||
|
* case-insensitive comparison of the given strings. The default IO
|
||||||
|
* system implementation uses OS mechanisms to convert relative into
|
||||||
|
* absolute paths, so the result can be trusted.
|
||||||
|
* @param one First file
|
||||||
|
* @param second Second file
|
||||||
|
* @return true if the paths point to the same file. The file needn't
|
||||||
|
* be existing, however.
|
||||||
|
*/
|
||||||
|
virtual bool ComparePaths (const char* one,
|
||||||
|
const char* second) const;
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Open a new file with a given path.
|
/** @brief For backward compatibility
|
||||||
*
|
* @see ComparePaths(const char*, const char*)
|
||||||
* When the access to the file is finished, call Close() to release
|
*/
|
||||||
* all associated resources (or the virtual dtor of the IOStream).
|
inline bool ComparePaths (const std::string& one,
|
||||||
*
|
const std::string& second) const;
|
||||||
* @param pFile Path to the file
|
|
||||||
* @param pMode Desired file I/O mode. Required are: "wb", "w", "wt",
|
|
||||||
* "rb", "r", "rt".
|
|
||||||
*
|
|
||||||
* @return New IOStream interface allowing the lib to access
|
|
||||||
* the underlying file.
|
|
||||||
* @note When implementing this class to provide custom IO handling,
|
|
||||||
* you probably have to supply an own implementation of IOStream as well.
|
|
||||||
*/
|
|
||||||
virtual IOStream* Open(const char* pFile,
|
|
||||||
const char* pMode = "rb") = 0;
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief For backward compatibility
|
/** @brief Pushes a new directory onto the directory stack.
|
||||||
* @see Open(const char*, const char*)
|
* @param path Path to push onto the stack.
|
||||||
*/
|
* @return True, when push was successful, false if path is empty.
|
||||||
inline IOStream* Open(const std::string& pFile,
|
*/
|
||||||
const std::string& pMode = std::string("rb"));
|
virtual bool PushDirectory( const std::string &path );
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** @brief Returns the top directory from the stack.
|
||||||
|
* @return The directory on the top of the stack.
|
||||||
|
* Returns empty when no directory was pushed to the stack.
|
||||||
|
*/
|
||||||
|
virtual const std::string &CurrentDirectory() const;
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** @brief Returns the number of directories stored on the stack.
|
||||||
|
* @return The number of directories of the stack.
|
||||||
|
*/
|
||||||
|
virtual size_t StackSize() const;
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Closes the given file and releases all resources
|
/** @brief Pops the top directory from the stack.
|
||||||
* associated with it.
|
* @return True, when a directory was on the stack. False if no
|
||||||
* @param pFile The file instance previously created by Open().
|
* directory was on the stack.
|
||||||
*/
|
*/
|
||||||
virtual void Close( IOStream* pFile) = 0;
|
virtual bool PopDirectory();
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
private:
|
||||||
/** @brief Compares two paths and check whether the point to
|
std::vector<std::string> m_pathStack;
|
||||||
* identical files.
|
|
||||||
*
|
|
||||||
* The dummy implementation of this virtual member performs a
|
|
||||||
* case-insensitive comparison of the given strings. The default IO
|
|
||||||
* system implementation uses OS mechanisms to convert relative into
|
|
||||||
* absolute paths, so the result can be trusted.
|
|
||||||
* @param one First file
|
|
||||||
* @param second Second file
|
|
||||||
* @return true if the paths point to the same file. The file needn't
|
|
||||||
* be existing, however.
|
|
||||||
*/
|
|
||||||
virtual bool ComparePaths (const char* one,
|
|
||||||
const char* second) const;
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
|
||||||
/** @brief For backward compatibility
|
|
||||||
* @see ComparePaths(const char*, const char*)
|
|
||||||
*/
|
|
||||||
inline bool ComparePaths (const std::string& one,
|
|
||||||
const std::string& second) const;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
AI_FORCE_INLINE IOSystem::IOSystem()
|
AI_FORCE_INLINE IOSystem::IOSystem() :
|
||||||
|
m_pathStack()
|
||||||
{
|
{
|
||||||
// empty
|
// empty
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
AI_FORCE_INLINE IOSystem::~IOSystem()
|
AI_FORCE_INLINE IOSystem::~IOSystem()
|
||||||
{
|
{
|
||||||
// empty
|
// empty
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// For compatibility, the interface of some functions taking a std::string was
|
// For compatibility, the interface of some functions taking a std::string was
|
||||||
// changed to const char* to avoid crashes between binary incompatible STL
|
// changed to const char* to avoid crashes between binary incompatible STL
|
||||||
// versions. This code her is inlined, so it shouldn't cause any problems.
|
// versions. This code her is inlined, so it shouldn't cause any problems.
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
AI_FORCE_INLINE IOStream* IOSystem::Open(const std::string& pFile,
|
AI_FORCE_INLINE IOStream* IOSystem::Open(const std::string& pFile,
|
||||||
const std::string& pMode)
|
const std::string& pMode)
|
||||||
{
|
{
|
||||||
// NOTE:
|
// NOTE:
|
||||||
// For compatibility, interface was changed to const char* to
|
// For compatibility, interface was changed to const char* to
|
||||||
// avoid crashes between binary incompatible STL versions
|
// avoid crashes between binary incompatible STL versions
|
||||||
return Open(pFile.c_str(),pMode.c_str());
|
return Open(pFile.c_str(),pMode.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
AI_FORCE_INLINE bool IOSystem::Exists( const std::string& pFile) const
|
AI_FORCE_INLINE bool IOSystem::Exists( const std::string& pFile) const
|
||||||
{
|
{
|
||||||
// NOTE:
|
// NOTE:
|
||||||
// For compatibility, interface was changed to const char* to
|
// For compatibility, interface was changed to const char* to
|
||||||
// avoid crashes between binary incompatible STL versions
|
// avoid crashes between binary incompatible STL versions
|
||||||
return Exists(pFile.c_str());
|
return Exists(pFile.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
inline bool IOSystem::ComparePaths (const std::string& one,
|
inline bool IOSystem::ComparePaths (const std::string& one,
|
||||||
const std::string& second) const
|
const std::string& second) const
|
||||||
{
|
{
|
||||||
// NOTE:
|
// NOTE:
|
||||||
// For compatibility, interface was changed to const char* to
|
// For compatibility, interface was changed to const char* to
|
||||||
// avoid crashes between binary incompatible STL versions
|
// avoid crashes between binary incompatible STL versions
|
||||||
return ComparePaths(one.c_str(),second.c_str());
|
return ComparePaths(one.c_str(),second.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
inline bool IOSystem::PushDirectory( const std::string &path ) {
|
||||||
|
if ( path.empty() ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_pathStack.push_back( path );
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
inline const std::string &IOSystem::CurrentDirectory() const {
|
||||||
|
if ( m_pathStack.empty() ) {
|
||||||
|
static const std::string Dummy("");
|
||||||
|
return Dummy;
|
||||||
|
}
|
||||||
|
return m_pathStack[ m_pathStack.size()-1 ];
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
inline size_t IOSystem::StackSize() const {
|
||||||
|
return m_pathStack.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
inline bool IOSystem::PopDirectory() {
|
||||||
|
if ( m_pathStack.empty() ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_pathStack.pop_back();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
} //!ns Assimp
|
} //!ns Assimp
|
||||||
|
|
||||||
#endif //AI_IOSYSTEM_H_INC
|
#endif //AI_IOSYSTEM_H_INC
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -2,11 +2,11 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the
|
with or without modification, are permitted provided that the
|
||||||
following conditions are met:
|
following conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -23,28 +23,28 @@ following conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @file LogStream.h
|
/** @file LogStream.hpp
|
||||||
* @brief Abstract base class 'LogStream', representing an output log stream.
|
* @brief Abstract base class 'LogStream', representing an output log stream.
|
||||||
*/
|
*/
|
||||||
#ifndef INCLUDED_AI_LOGSTREAM_H
|
#ifndef INCLUDED_AI_LOGSTREAM_H
|
||||||
#define INCLUDED_AI_LOGSTREAM_H
|
#define INCLUDED_AI_LOGSTREAM_H
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
class IOSystem;
|
class IOSystem;
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------
|
||||||
@@ -55,39 +55,39 @@ class IOSystem;
|
|||||||
* are not enough for your purpose. */
|
* are not enough for your purpose. */
|
||||||
class ASSIMP_API LogStream
|
class ASSIMP_API LogStream
|
||||||
#ifndef SWIG
|
#ifndef SWIG
|
||||||
: public Intern::AllocateFromAssimpHeap
|
: public Intern::AllocateFromAssimpHeap
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
/** @brief Default constructor */
|
/** @brief Default constructor */
|
||||||
LogStream() {
|
LogStream() {
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
/** @brief Virtual destructor */
|
/** @brief Virtual destructor */
|
||||||
virtual ~LogStream() {
|
virtual ~LogStream() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Overwrite this for your own output methods
|
/** @brief Overwrite this for your own output methods
|
||||||
*
|
*
|
||||||
* Log messages *may* consist of multiple lines and you shouldn't
|
* Log messages *may* consist of multiple lines and you shouldn't
|
||||||
* expect a consistent formatting. If you want custom formatting
|
* expect a consistent formatting. If you want custom formatting
|
||||||
* (e.g. generate HTML), supply a custom instance of Logger to
|
* (e.g. generate HTML), supply a custom instance of Logger to
|
||||||
* #DefaultLogger:set(). Usually you can *expect* that a log message
|
* #DefaultLogger:set(). Usually you can *expect* that a log message
|
||||||
* is exactly one line and terminated with a single \n character.
|
* is exactly one line and terminated with a single \n character.
|
||||||
* @param message Message to be written */
|
* @param message Message to be written */
|
||||||
virtual void write(const char* message) = 0;
|
virtual void write(const char* message) = 0;
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Creates a default log stream
|
/** @brief Creates a default log stream
|
||||||
* @param streams Type of the default stream
|
* @param streams Type of the default stream
|
||||||
* @param name For aiDefaultLogStream_FILE: name of the output file
|
* @param name For aiDefaultLogStream_FILE: name of the output file
|
||||||
* @param io For aiDefaultLogStream_FILE: IOSystem to be used to open the output
|
* @param io For aiDefaultLogStream_FILE: IOSystem to be used to open the output
|
||||||
* file. Pass NULL for the default implementation.
|
* file. Pass NULL for the default implementation.
|
||||||
* @return New LogStream instance. */
|
* @return New LogStream instance. */
|
||||||
static LogStream* createDefaultStream(aiDefaultLogStream stream,
|
static LogStream* createDefaultStream(aiDefaultLogStream stream,
|
||||||
const char* name = "AssimpLog.txt",
|
const char* name = "AssimpLog.txt",
|
||||||
IOSystem* io = NULL);
|
IOSystem* io = NULL);
|
||||||
|
|
||||||
}; // !class LogStream
|
}; // !class LogStream
|
||||||
// ------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -2,11 +2,11 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the
|
with or without modification, are permitted provided that the
|
||||||
following conditions are met:
|
following conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -23,239 +23,239 @@ following conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @file Logger.hpp
|
/** @file Logger.hpp
|
||||||
* @brief Abstract base class 'Logger', base of the logging system.
|
* @brief Abstract base class 'Logger', base of the logging system.
|
||||||
*/
|
*/
|
||||||
#ifndef INCLUDED_AI_LOGGER_H
|
#ifndef INCLUDED_AI_LOGGER_H
|
||||||
#define INCLUDED_AI_LOGGER_H
|
#define INCLUDED_AI_LOGGER_H
|
||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
class LogStream;
|
class LogStream;
|
||||||
|
|
||||||
// Maximum length of a log message. Longer messages are rejected.
|
// Maximum length of a log message. Longer messages are rejected.
|
||||||
#define MAX_LOG_MESSAGE_LENGTH 1024u
|
#define MAX_LOG_MESSAGE_LENGTH 1024u
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
/** @brief CPP-API: Abstract interface for logger implementations.
|
/** @brief CPP-API: Abstract interface for logger implementations.
|
||||||
* Assimp provides a default implementation and uses it for almost all
|
* Assimp provides a default implementation and uses it for almost all
|
||||||
* logging stuff ('DefaultLogger'). This class defines just basic logging
|
* logging stuff ('DefaultLogger'). This class defines just basic logging
|
||||||
* behaviour and is not of interest for you. Instead, take a look at #DefaultLogger. */
|
* behaviour and is not of interest for you. Instead, take a look at #DefaultLogger. */
|
||||||
class ASSIMP_API Logger
|
class ASSIMP_API Logger
|
||||||
#ifndef SWIG
|
#ifndef SWIG
|
||||||
: public Intern::AllocateFromAssimpHeap
|
: public Intern::AllocateFromAssimpHeap
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
/** @enum LogSeverity
|
/** @enum LogSeverity
|
||||||
* @brief Log severity to describe the granularity of logging.
|
* @brief Log severity to describe the granularity of logging.
|
||||||
*/
|
*/
|
||||||
enum LogSeverity
|
enum LogSeverity
|
||||||
{
|
{
|
||||||
NORMAL, //!< Normal granularity of logging
|
NORMAL, //!< Normal granularity of logging
|
||||||
VERBOSE //!< Debug infos will be logged, too
|
VERBOSE //!< Debug infos will be logged, too
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
/** @enum ErrorSeverity
|
/** @enum ErrorSeverity
|
||||||
* @brief Description for severity of a log message.
|
* @brief Description for severity of a log message.
|
||||||
*
|
*
|
||||||
* Every LogStream has a bitwise combination of these flags.
|
* Every LogStream has a bitwise combination of these flags.
|
||||||
* A LogStream doesn't receive any messages of a specific type
|
* A LogStream doesn't receive any messages of a specific type
|
||||||
* if it doesn't specify the corresponding ErrorSeverity flag.
|
* if it doesn't specify the corresponding ErrorSeverity flag.
|
||||||
*/
|
*/
|
||||||
enum ErrorSeverity
|
enum ErrorSeverity
|
||||||
{
|
{
|
||||||
Debugging = 1, //!< Debug log message
|
Debugging = 1, //!< Debug log message
|
||||||
Info = 2, //!< Info log message
|
Info = 2, //!< Info log message
|
||||||
Warn = 4, //!< Warn log message
|
Warn = 4, //!< Warn log message
|
||||||
Err = 8 //!< Error log message
|
Err = 8 //!< Error log message
|
||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/** @brief Virtual destructor */
|
/** @brief Virtual destructor */
|
||||||
virtual ~Logger();
|
virtual ~Logger();
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
/** @brief Writes a debug message
|
/** @brief Writes a debug message
|
||||||
* @param message Debug message*/
|
* @param message Debug message*/
|
||||||
void debug(const char* message);
|
void debug(const char* message);
|
||||||
inline void debug(const std::string &message);
|
inline void debug(const std::string &message);
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
/** @brief Writes a info message
|
/** @brief Writes a info message
|
||||||
* @param message Info message*/
|
* @param message Info message*/
|
||||||
void info(const char* message);
|
void info(const char* message);
|
||||||
inline void info(const std::string &message);
|
inline void info(const std::string &message);
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
/** @brief Writes a warning message
|
/** @brief Writes a warning message
|
||||||
* @param message Warn message*/
|
* @param message Warn message*/
|
||||||
void warn(const char* message);
|
void warn(const char* message);
|
||||||
inline void warn(const std::string &message);
|
inline void warn(const std::string &message);
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
/** @brief Writes an error message
|
/** @brief Writes an error message
|
||||||
* @param message Error message*/
|
* @param message Error message*/
|
||||||
void error(const char* message);
|
void error(const char* message);
|
||||||
inline void error(const std::string &message);
|
inline void error(const std::string &message);
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
/** @brief Set a new log severity.
|
/** @brief Set a new log severity.
|
||||||
* @param log_severity New severity for logging*/
|
* @param log_severity New severity for logging*/
|
||||||
void setLogSeverity(LogSeverity log_severity);
|
void setLogSeverity(LogSeverity log_severity);
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
/** @brief Get the current log severity*/
|
/** @brief Get the current log severity*/
|
||||||
LogSeverity getLogSeverity() const;
|
LogSeverity getLogSeverity() const;
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
/** @brief Attach a new log-stream
|
/** @brief Attach a new log-stream
|
||||||
*
|
*
|
||||||
* The logger takes ownership of the stream and is responsible
|
* The logger takes ownership of the stream and is responsible
|
||||||
* for its destruction (which is done using ::delete when the logger
|
* for its destruction (which is done using ::delete when the logger
|
||||||
* itself is destroyed). Call detachStream to detach a stream and to
|
* itself is destroyed). Call detachStream to detach a stream and to
|
||||||
* gain ownership of it again.
|
* gain ownership of it again.
|
||||||
* @param pStream Log-stream to attach
|
* @param pStream Log-stream to attach
|
||||||
* @param severity Message filter, specified which types of log
|
* @param severity Message filter, specified which types of log
|
||||||
* messages are dispatched to the stream. Provide a bitwise
|
* messages are dispatched to the stream. Provide a bitwise
|
||||||
* combination of the ErrorSeverity flags.
|
* combination of the ErrorSeverity flags.
|
||||||
* @return true if the stream has been attached, false otherwise.*/
|
* @return true if the stream has been attached, false otherwise.*/
|
||||||
virtual bool attachStream(LogStream *pStream,
|
virtual bool attachStream(LogStream *pStream,
|
||||||
unsigned int severity = Debugging | Err | Warn | Info) = 0;
|
unsigned int severity = Debugging | Err | Warn | Info) = 0;
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
/** @brief Detach a still attached stream from the logger (or
|
/** @brief Detach a still attached stream from the logger (or
|
||||||
* modify the filter flags bits)
|
* modify the filter flags bits)
|
||||||
* @param pStream Log-stream instance for detaching
|
* @param pStream Log-stream instance for detaching
|
||||||
* @param severity Provide a bitwise combination of the ErrorSeverity
|
* @param severity Provide a bitwise combination of the ErrorSeverity
|
||||||
* flags. This value is &~ed with the current flags of the stream,
|
* flags. This value is &~ed with the current flags of the stream,
|
||||||
* if the result is 0 the stream is detached from the Logger and
|
* if the result is 0 the stream is detached from the Logger and
|
||||||
* the caller retakes the possession of the stream.
|
* the caller retakes the possession of the stream.
|
||||||
* @return true if the stream has been detached, false otherwise.*/
|
* @return true if the stream has been detached, false otherwise.*/
|
||||||
virtual bool detatchStream(LogStream *pStream,
|
virtual bool detatchStream(LogStream *pStream,
|
||||||
unsigned int severity = Debugging | Err | Warn | Info) = 0;
|
unsigned int severity = Debugging | Err | Warn | Info) = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
/** Default constructor */
|
/** Default constructor */
|
||||||
Logger();
|
Logger();
|
||||||
|
|
||||||
/** Construction with a given log severity */
|
/** Construction with a given log severity */
|
||||||
Logger(LogSeverity severity);
|
explicit Logger(LogSeverity severity);
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
/** @brief Called as a request to write a specific debug message
|
/** @brief Called as a request to write a specific debug message
|
||||||
* @param message Debug message. Never longer than
|
* @param message Debug message. Never longer than
|
||||||
* MAX_LOG_MESSAGE_LENGTH characters (excluding the '0').
|
* MAX_LOG_MESSAGE_LENGTH characters (excluding the '0').
|
||||||
* @note The message string is only valid until the scope of
|
* @note The message string is only valid until the scope of
|
||||||
* the function is left.
|
* the function is left.
|
||||||
*/
|
*/
|
||||||
virtual void OnDebug(const char* message)= 0;
|
virtual void OnDebug(const char* message)= 0;
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
/** @brief Called as a request to write a specific info message
|
/** @brief Called as a request to write a specific info message
|
||||||
* @param message Info message. Never longer than
|
* @param message Info message. Never longer than
|
||||||
* MAX_LOG_MESSAGE_LENGTH characters (ecxluding the '0').
|
* MAX_LOG_MESSAGE_LENGTH characters (ecxluding the '0').
|
||||||
* @note The message string is only valid until the scope of
|
* @note The message string is only valid until the scope of
|
||||||
* the function is left.
|
* the function is left.
|
||||||
*/
|
*/
|
||||||
virtual void OnInfo(const char* message) = 0;
|
virtual void OnInfo(const char* message) = 0;
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
/** @brief Called as a request to write a specific warn message
|
/** @brief Called as a request to write a specific warn message
|
||||||
* @param message Warn message. Never longer than
|
* @param message Warn message. Never longer than
|
||||||
* MAX_LOG_MESSAGE_LENGTH characters (exluding the '0').
|
* MAX_LOG_MESSAGE_LENGTH characters (exluding the '0').
|
||||||
* @note The message string is only valid until the scope of
|
* @note The message string is only valid until the scope of
|
||||||
* the function is left.
|
* the function is left.
|
||||||
*/
|
*/
|
||||||
virtual void OnWarn(const char* essage) = 0;
|
virtual void OnWarn(const char* essage) = 0;
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
/** @brief Called as a request to write a specific error message
|
/** @brief Called as a request to write a specific error message
|
||||||
* @param message Error message. Never longer than
|
* @param message Error message. Never longer than
|
||||||
* MAX_LOG_MESSAGE_LENGTH characters (exluding the '0').
|
* MAX_LOG_MESSAGE_LENGTH characters (exluding the '0').
|
||||||
* @note The message string is only valid until the scope of
|
* @note The message string is only valid until the scope of
|
||||||
* the function is left.
|
* the function is left.
|
||||||
*/
|
*/
|
||||||
virtual void OnError(const char* message) = 0;
|
virtual void OnError(const char* message) = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
//! Logger severity
|
//! Logger severity
|
||||||
LogSeverity m_Severity;
|
LogSeverity m_Severity;
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
// Default constructor
|
// Default constructor
|
||||||
inline Logger::Logger() {
|
inline Logger::Logger() {
|
||||||
setLogSeverity(NORMAL);
|
setLogSeverity(NORMAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
// Virtual destructor
|
// Virtual destructor
|
||||||
inline Logger::~Logger()
|
inline Logger::~Logger()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
// Construction with given logging severity
|
// Construction with given logging severity
|
||||||
inline Logger::Logger(LogSeverity severity) {
|
inline Logger::Logger(LogSeverity severity) {
|
||||||
setLogSeverity(severity);
|
setLogSeverity(severity);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
// Log severity setter
|
// Log severity setter
|
||||||
inline void Logger::setLogSeverity(LogSeverity log_severity){
|
inline void Logger::setLogSeverity(LogSeverity log_severity){
|
||||||
m_Severity = log_severity;
|
m_Severity = log_severity;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
// Log severity getter
|
// Log severity getter
|
||||||
inline Logger::LogSeverity Logger::getLogSeverity() const {
|
inline Logger::LogSeverity Logger::getLogSeverity() const {
|
||||||
return m_Severity;
|
return m_Severity;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
inline void Logger::debug(const std::string &message)
|
inline void Logger::debug(const std::string &message)
|
||||||
{
|
{
|
||||||
return debug(message.c_str());
|
return debug(message.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
inline void Logger::error(const std::string &message)
|
inline void Logger::error(const std::string &message)
|
||||||
{
|
{
|
||||||
return error(message.c_str());
|
return error(message.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
inline void Logger::warn(const std::string &message)
|
inline void Logger::warn(const std::string &message)
|
||||||
{
|
{
|
||||||
return warn(message.c_str());
|
return warn(message.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
inline void Logger::info(const std::string &message)
|
inline void Logger::info(const std::string &message)
|
||||||
{
|
{
|
||||||
return info(message.c_str());
|
return info(message.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -2,11 +2,11 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the
|
with or without modification, are permitted provided that the
|
||||||
following conditions are met:
|
following conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -23,22 +23,22 @@ following conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @file NullLogger.h
|
/** @file NullLogger.hpp
|
||||||
* @brief Dummy logger
|
* @brief Dummy logger
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -46,48 +46,48 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#define INCLUDED_AI_NULLLOGGER_H
|
#define INCLUDED_AI_NULLLOGGER_H
|
||||||
|
|
||||||
#include "Logger.hpp"
|
#include "Logger.hpp"
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief CPP-API: Empty logging implementation.
|
/** @brief CPP-API: Empty logging implementation.
|
||||||
*
|
*
|
||||||
* Does nothing! Used by default if the application hasn't requested a
|
* Does nothing! Used by default if the application hasn't requested a
|
||||||
* custom logger via #DefaultLogger::set() or #DefaultLogger::create(); */
|
* custom logger via #DefaultLogger::set() or #DefaultLogger::create(); */
|
||||||
class ASSIMP_API NullLogger
|
class ASSIMP_API NullLogger
|
||||||
: public Logger {
|
: public Logger {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/** @brief Logs a debug message */
|
/** @brief Logs a debug message */
|
||||||
void OnDebug(const char* message) {
|
void OnDebug(const char* message) {
|
||||||
(void)message; //this avoids compiler warnings
|
(void)message; //this avoids compiler warnings
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @brief Logs an info message */
|
/** @brief Logs an info message */
|
||||||
void OnInfo(const char* message) {
|
void OnInfo(const char* message) {
|
||||||
(void)message; //this avoids compiler warnings
|
(void)message; //this avoids compiler warnings
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @brief Logs a warning message */
|
/** @brief Logs a warning message */
|
||||||
void OnWarn(const char* message) {
|
void OnWarn(const char* message) {
|
||||||
(void)message; //this avoids compiler warnings
|
(void)message; //this avoids compiler warnings
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @brief Logs an error message */
|
|
||||||
void OnError(const char* message) {
|
|
||||||
(void)message; //this avoids compiler warnings
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @brief Detach a still attached stream from logger */
|
/** @brief Logs an error message */
|
||||||
bool attachStream(LogStream *pStream, unsigned int severity) {
|
void OnError(const char* message) {
|
||||||
(void)pStream; (void)severity; //this avoids compiler warnings
|
(void)message; //this avoids compiler warnings
|
||||||
return false;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/** @brief Detach a still attached stream from logger */
|
/** @brief Detach a still attached stream from logger */
|
||||||
bool detatchStream(LogStream *pStream, unsigned int severity) {
|
bool attachStream(LogStream *pStream, unsigned int severity) {
|
||||||
(void)pStream; (void)severity; //this avoids compiler warnings
|
(void)pStream; (void)severity; //this avoids compiler warnings
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @brief Detach a still attached stream from logger */
|
||||||
|
bool detatchStream(LogStream *pStream, unsigned int severity) {
|
||||||
|
(void)pStream; (void)severity; //this avoids compiler warnings
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,11 +2,11 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the
|
with or without modification, are permitted provided that the
|
||||||
following conditions are met:
|
following conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -23,73 +23,99 @@ following conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @file ProgressHandler.h
|
/** @file ProgressHandler.hpp
|
||||||
* @brief Abstract base class 'ProgressHandler'.
|
* @brief Abstract base class 'ProgressHandler'.
|
||||||
*/
|
*/
|
||||||
#ifndef INCLUDED_AI_PROGRESSHANDLER_H
|
#ifndef INCLUDED_AI_PROGRESSHANDLER_H
|
||||||
#define INCLUDED_AI_PROGRESSHANDLER_H
|
#define INCLUDED_AI_PROGRESSHANDLER_H
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------
|
||||||
/** @brief CPP-API: Abstract interface for custom progress report receivers.
|
/** @brief CPP-API: Abstract interface for custom progress report receivers.
|
||||||
*
|
*
|
||||||
* Each #Importer instance maintains its own #ProgressHandler. The default
|
* Each #Importer instance maintains its own #ProgressHandler. The default
|
||||||
* implementation provided by Assimp doesn't do anything at all. */
|
* implementation provided by Assimp doesn't do anything at all. */
|
||||||
class ASSIMP_API ProgressHandler
|
class ASSIMP_API ProgressHandler
|
||||||
#ifndef SWIG
|
#ifndef SWIG
|
||||||
: public Intern::AllocateFromAssimpHeap
|
: public Intern::AllocateFromAssimpHeap
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
/** @brief Default constructor */
|
/** @brief Default constructor */
|
||||||
ProgressHandler () {
|
ProgressHandler () {
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
/** @brief Virtual destructor */
|
/** @brief Virtual destructor */
|
||||||
virtual ~ProgressHandler () {
|
virtual ~ProgressHandler () {
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Progress callback.
|
/** @brief Progress callback.
|
||||||
* @param percentage An estimate of the current loading progress,
|
* @param percentage An estimate of the current loading progress,
|
||||||
* in percent. Or -1.f if such an estimate is not available.
|
* in percent. Or -1.f if such an estimate is not available.
|
||||||
*
|
*
|
||||||
* There are restriction on what you may do from within your
|
* There are restriction on what you may do from within your
|
||||||
* implementation of this method: no exceptions may be thrown and no
|
* implementation of this method: no exceptions may be thrown and no
|
||||||
* non-const #Importer methods may be called. It is
|
* non-const #Importer methods may be called. It is
|
||||||
* not generally possible to predict the number of callbacks
|
* not generally possible to predict the number of callbacks
|
||||||
* fired during a single import.
|
* fired during a single import.
|
||||||
*
|
*
|
||||||
* @return Return false to abort loading at the next possible
|
* @return Return false to abort loading at the next possible
|
||||||
* occasion (loaders and Assimp are generally allowed to perform
|
* occasion (loaders and Assimp are generally allowed to perform
|
||||||
* all needed cleanup tasks prior to returning control to the
|
* all needed cleanup tasks prior to returning control to the
|
||||||
* caller). If the loading is aborted, #Importer::ReadFile()
|
* caller). If the loading is aborted, #Importer::ReadFile()
|
||||||
* returns always NULL.
|
* returns always NULL.
|
||||||
*
|
* */
|
||||||
* @note Currently, percentage is always -1.f because there is
|
virtual bool Update(float percentage = -1.f) = 0;
|
||||||
* no reliable way to compute it.
|
|
||||||
* */
|
|
||||||
virtual bool Update(float percentage = -1.f) = 0;
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** @brief Progress callback for file loading steps
|
||||||
|
* @param numberOfSteps The number of total post-processing
|
||||||
|
* steps
|
||||||
|
* @param currentStep The index of the current post-processing
|
||||||
|
* step that will run, or equal to numberOfSteps if all of
|
||||||
|
* them has finished. This number is always strictly monotone
|
||||||
|
* increasing, although not necessarily linearly.
|
||||||
|
*
|
||||||
|
* @note This is currently only used at the start and the end
|
||||||
|
* of the file parsing.
|
||||||
|
* */
|
||||||
|
virtual void UpdateFileRead(int currentStep /*= 0*/, int numberOfSteps /*= 0*/) {
|
||||||
|
float f = numberOfSteps ? currentStep / (float)numberOfSteps : 1.0f;
|
||||||
|
Update( f * 0.5f );
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** @brief Progress callback for post-processing steps
|
||||||
|
* @param numberOfSteps The number of total post-processing
|
||||||
|
* steps
|
||||||
|
* @param currentStep The index of the current post-processing
|
||||||
|
* step that will run, or equal to numberOfSteps if all of
|
||||||
|
* them has finished. This number is always strictly monotone
|
||||||
|
* increasing, although not necessarily linearly.
|
||||||
|
* */
|
||||||
|
virtual void UpdatePostProcess(int currentStep /*= 0*/, int numberOfSteps /*= 0*/) {
|
||||||
|
float f = numberOfSteps ? currentStep / (float)numberOfSteps : 1.0f;
|
||||||
|
Update( f * 0.5f + 0.5f );
|
||||||
|
}
|
||||||
|
|
||||||
}; // !class ProgressHandler
|
}; // !class ProgressHandler
|
||||||
// ------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------
|
||||||
} // Namespace Assimp
|
} // Namespace Assimp
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,51 @@
|
|||||||
/** @file assert.h
|
/*
|
||||||
*/
|
---------------------------------------------------------------------------
|
||||||
|
Open Asset Import Library (assimp)
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use of this software in source and binary forms,
|
||||||
|
with or without modification, are permitted provided that the following
|
||||||
|
conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
* Neither the name of the assimp team, nor the names of its
|
||||||
|
contributors may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior
|
||||||
|
written permission of the assimp team.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
#ifndef AI_DEBUG_H_INC
|
#ifndef AI_DEBUG_H_INC
|
||||||
#define AI_DEBUG_H_INC
|
#define AI_DEBUG_H_INC
|
||||||
|
|
||||||
#ifdef ASSIMP_BUILD_DEBUG
|
#ifdef ASSIMP_BUILD_DEBUG
|
||||||
# include <assert.h>
|
# include <assert.h>
|
||||||
# define ai_assert(expression) assert(expression)
|
# define ai_assert(expression) assert(expression)
|
||||||
#else
|
#else
|
||||||
# define ai_assert(expression)
|
# define ai_assert(expression)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,16 +25,16 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@@ -57,165 +57,165 @@ extern "C" {
|
|||||||
/** A time-value pair specifying a certain 3D vector for the given time. */
|
/** A time-value pair specifying a certain 3D vector for the given time. */
|
||||||
struct aiVectorKey
|
struct aiVectorKey
|
||||||
{
|
{
|
||||||
/** The time of this key */
|
/** The time of this key */
|
||||||
double mTime;
|
double mTime;
|
||||||
|
|
||||||
/** The value of this key */
|
/** The value of this key */
|
||||||
C_STRUCT aiVector3D mValue;
|
C_STRUCT aiVector3D mValue;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
||||||
//! Default constructor
|
//! Default constructor
|
||||||
aiVectorKey(){}
|
aiVectorKey(){}
|
||||||
|
|
||||||
//! Construction from a given time and key value
|
//! Construction from a given time and key value
|
||||||
aiVectorKey(double time, const aiVector3D& value)
|
aiVectorKey(double time, const aiVector3D& value)
|
||||||
: mTime (time)
|
: mTime (time)
|
||||||
, mValue (value)
|
, mValue (value)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
typedef aiVector3D elem_type;
|
typedef aiVector3D elem_type;
|
||||||
|
|
||||||
// Comparison operators. For use with std::find();
|
// Comparison operators. For use with std::find();
|
||||||
bool operator == (const aiVectorKey& o) const {
|
bool operator == (const aiVectorKey& o) const {
|
||||||
return o.mValue == this->mValue;
|
return o.mValue == this->mValue;
|
||||||
}
|
}
|
||||||
bool operator != (const aiVectorKey& o) const {
|
bool operator != (const aiVectorKey& o) const {
|
||||||
return o.mValue != this->mValue;
|
return o.mValue != this->mValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Relational operators. For use with std::sort();
|
// Relational operators. For use with std::sort();
|
||||||
bool operator < (const aiVectorKey& o) const {
|
bool operator < (const aiVectorKey& o) const {
|
||||||
return mTime < o.mTime;
|
return mTime < o.mTime;
|
||||||
}
|
}
|
||||||
bool operator > (const aiVectorKey& o) const {
|
bool operator > (const aiVectorKey& o) const {
|
||||||
return mTime > o.mTime;
|
return mTime > o.mTime;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** A time-value pair specifying a rotation for the given time.
|
/** A time-value pair specifying a rotation for the given time.
|
||||||
* Rotations are expressed with quaternions. */
|
* Rotations are expressed with quaternions. */
|
||||||
struct aiQuatKey
|
struct aiQuatKey
|
||||||
{
|
{
|
||||||
/** The time of this key */
|
/** The time of this key */
|
||||||
double mTime;
|
double mTime;
|
||||||
|
|
||||||
/** The value of this key */
|
/** The value of this key */
|
||||||
C_STRUCT aiQuaternion mValue;
|
C_STRUCT aiQuaternion mValue;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
aiQuatKey(){
|
aiQuatKey(){
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Construction from a given time and key value */
|
/** Construction from a given time and key value */
|
||||||
aiQuatKey(double time, const aiQuaternion& value)
|
aiQuatKey(double time, const aiQuaternion& value)
|
||||||
: mTime (time)
|
: mTime (time)
|
||||||
, mValue (value)
|
, mValue (value)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
typedef aiQuaternion elem_type;
|
typedef aiQuaternion elem_type;
|
||||||
|
|
||||||
// Comparison operators. For use with std::find();
|
// Comparison operators. For use with std::find();
|
||||||
bool operator == (const aiQuatKey& o) const {
|
bool operator == (const aiQuatKey& o) const {
|
||||||
return o.mValue == this->mValue;
|
return o.mValue == this->mValue;
|
||||||
}
|
}
|
||||||
bool operator != (const aiQuatKey& o) const {
|
bool operator != (const aiQuatKey& o) const {
|
||||||
return o.mValue != this->mValue;
|
return o.mValue != this->mValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Relational operators. For use with std::sort();
|
// Relational operators. For use with std::sort();
|
||||||
bool operator < (const aiQuatKey& o) const {
|
bool operator < (const aiQuatKey& o) const {
|
||||||
return mTime < o.mTime;
|
return mTime < o.mTime;
|
||||||
}
|
}
|
||||||
bool operator > (const aiQuatKey& o) const {
|
bool operator > (const aiQuatKey& o) const {
|
||||||
return mTime > o.mTime;
|
return mTime > o.mTime;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** Binds a anim mesh to a specific point in time. */
|
/** Binds a anim mesh to a specific point in time. */
|
||||||
struct aiMeshKey
|
struct aiMeshKey
|
||||||
{
|
{
|
||||||
/** The time of this key */
|
/** The time of this key */
|
||||||
double mTime;
|
double mTime;
|
||||||
|
|
||||||
/** Index into the aiMesh::mAnimMeshes array of the
|
/** Index into the aiMesh::mAnimMeshes array of the
|
||||||
* mesh coresponding to the #aiMeshAnim hosting this
|
* mesh coresponding to the #aiMeshAnim hosting this
|
||||||
* key frame. The referenced anim mesh is evaluated
|
* key frame. The referenced anim mesh is evaluated
|
||||||
* according to the rules defined in the docs for #aiAnimMesh.*/
|
* according to the rules defined in the docs for #aiAnimMesh.*/
|
||||||
unsigned int mValue;
|
unsigned int mValue;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
||||||
aiMeshKey() {
|
aiMeshKey() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Construction from a given time and key value */
|
/** Construction from a given time and key value */
|
||||||
aiMeshKey(double time, const unsigned int value)
|
aiMeshKey(double time, const unsigned int value)
|
||||||
: mTime (time)
|
: mTime (time)
|
||||||
, mValue (value)
|
, mValue (value)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
typedef unsigned int elem_type;
|
typedef unsigned int elem_type;
|
||||||
|
|
||||||
// Comparison operators. For use with std::find();
|
// Comparison operators. For use with std::find();
|
||||||
bool operator == (const aiMeshKey& o) const {
|
bool operator == (const aiMeshKey& o) const {
|
||||||
return o.mValue == this->mValue;
|
return o.mValue == this->mValue;
|
||||||
}
|
}
|
||||||
bool operator != (const aiMeshKey& o) const {
|
bool operator != (const aiMeshKey& o) const {
|
||||||
return o.mValue != this->mValue;
|
return o.mValue != this->mValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Relational operators. For use with std::sort();
|
// Relational operators. For use with std::sort();
|
||||||
bool operator < (const aiMeshKey& o) const {
|
bool operator < (const aiMeshKey& o) const {
|
||||||
return mTime < o.mTime;
|
return mTime < o.mTime;
|
||||||
}
|
}
|
||||||
bool operator > (const aiMeshKey& o) const {
|
bool operator > (const aiMeshKey& o) const {
|
||||||
return mTime > o.mTime;
|
return mTime > o.mTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** Defines how an animation channel behaves outside the defined time
|
/** Defines how an animation channel behaves outside the defined time
|
||||||
* range. This corresponds to aiNodeAnim::mPreState and
|
* range. This corresponds to aiNodeAnim::mPreState and
|
||||||
* aiNodeAnim::mPostState.*/
|
* aiNodeAnim::mPostState.*/
|
||||||
enum aiAnimBehaviour
|
enum aiAnimBehaviour
|
||||||
{
|
{
|
||||||
/** The value from the default node transformation is taken*/
|
/** The value from the default node transformation is taken*/
|
||||||
aiAnimBehaviour_DEFAULT = 0x0,
|
aiAnimBehaviour_DEFAULT = 0x0,
|
||||||
|
|
||||||
/** The nearest key value is used without interpolation */
|
/** The nearest key value is used without interpolation */
|
||||||
aiAnimBehaviour_CONSTANT = 0x1,
|
aiAnimBehaviour_CONSTANT = 0x1,
|
||||||
|
|
||||||
/** The value of the nearest two keys is linearly
|
/** The value of the nearest two keys is linearly
|
||||||
* extrapolated for the current time value.*/
|
* extrapolated for the current time value.*/
|
||||||
aiAnimBehaviour_LINEAR = 0x2,
|
aiAnimBehaviour_LINEAR = 0x2,
|
||||||
|
|
||||||
/** The animation is repeated.
|
/** The animation is repeated.
|
||||||
*
|
*
|
||||||
* If the animation key go from n to m and the current
|
* If the animation key go from n to m and the current
|
||||||
* time is t, use the value at (t-n) % (|m-n|).*/
|
* time is t, use the value at (t-n) % (|m-n|).*/
|
||||||
aiAnimBehaviour_REPEAT = 0x3,
|
aiAnimBehaviour_REPEAT = 0x3,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** This value is not used, it is just here to force the
|
/** This value is not used, it is just here to force the
|
||||||
* the compiler to map this enum to a 32 Bit integer */
|
* the compiler to map this enum to a 32 Bit integer */
|
||||||
#ifndef SWIG
|
#ifndef SWIG
|
||||||
_aiAnimBehaviour_Force32Bit = INT_MAX
|
_aiAnimBehaviour_Force32Bit = INT_MAX
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** Describes the animation of a single node. The name specifies the
|
/** Describes the animation of a single node. The name specifies the
|
||||||
* bone/node which is affected by this animation channel. The keyframes
|
* bone/node which is affected by this animation channel. The keyframes
|
||||||
* are given in three separate series of values, one each for position,
|
* are given in three separate series of values, one each for position,
|
||||||
* rotation and scaling. The transformation matrix computed from these
|
* rotation and scaling. The transformation matrix computed from these
|
||||||
* values replaces the node's original transformation matrix at a
|
* values replaces the node's original transformation matrix at a
|
||||||
* specific time.
|
* specific time.
|
||||||
@@ -225,177 +225,177 @@ enum aiAnimBehaviour
|
|||||||
*
|
*
|
||||||
* @note All keys are returned in their correct, chronological order.
|
* @note All keys are returned in their correct, chronological order.
|
||||||
* Duplicate keys don't pass the validation step. Most likely there
|
* Duplicate keys don't pass the validation step. Most likely there
|
||||||
* will be no negative time values, but they are not forbidden also ( so
|
* will be no negative time values, but they are not forbidden also ( so
|
||||||
* implementations need to cope with them! ) */
|
* implementations need to cope with them! ) */
|
||||||
struct aiNodeAnim
|
struct aiNodeAnim
|
||||||
{
|
{
|
||||||
/** The name of the node affected by this animation. The node
|
/** The name of the node affected by this animation. The node
|
||||||
* must exist and it must be unique.*/
|
* must exist and it must be unique.*/
|
||||||
C_STRUCT aiString mNodeName;
|
C_STRUCT aiString mNodeName;
|
||||||
|
|
||||||
/** The number of position keys */
|
/** The number of position keys */
|
||||||
unsigned int mNumPositionKeys;
|
unsigned int mNumPositionKeys;
|
||||||
|
|
||||||
/** The position keys of this animation channel. Positions are
|
/** The position keys of this animation channel. Positions are
|
||||||
* specified as 3D vector. The array is mNumPositionKeys in size.
|
* specified as 3D vector. The array is mNumPositionKeys in size.
|
||||||
*
|
*
|
||||||
* If there are position keys, there will also be at least one
|
* If there are position keys, there will also be at least one
|
||||||
* scaling and one rotation key.*/
|
* scaling and one rotation key.*/
|
||||||
C_STRUCT aiVectorKey* mPositionKeys;
|
C_STRUCT aiVectorKey* mPositionKeys;
|
||||||
|
|
||||||
/** The number of rotation keys */
|
/** The number of rotation keys */
|
||||||
unsigned int mNumRotationKeys;
|
unsigned int mNumRotationKeys;
|
||||||
|
|
||||||
/** The rotation keys of this animation channel. Rotations are
|
/** The rotation keys of this animation channel. Rotations are
|
||||||
* given as quaternions, which are 4D vectors. The array is
|
* given as quaternions, which are 4D vectors. The array is
|
||||||
* mNumRotationKeys in size.
|
* mNumRotationKeys in size.
|
||||||
*
|
*
|
||||||
* If there are rotation keys, there will also be at least one
|
* If there are rotation keys, there will also be at least one
|
||||||
* scaling and one position key. */
|
* scaling and one position key. */
|
||||||
C_STRUCT aiQuatKey* mRotationKeys;
|
C_STRUCT aiQuatKey* mRotationKeys;
|
||||||
|
|
||||||
|
|
||||||
/** The number of scaling keys */
|
/** The number of scaling keys */
|
||||||
unsigned int mNumScalingKeys;
|
unsigned int mNumScalingKeys;
|
||||||
|
|
||||||
/** The scaling keys of this animation channel. Scalings are
|
/** The scaling keys of this animation channel. Scalings are
|
||||||
* specified as 3D vector. The array is mNumScalingKeys in size.
|
* specified as 3D vector. The array is mNumScalingKeys in size.
|
||||||
*
|
*
|
||||||
* If there are scaling keys, there will also be at least one
|
* If there are scaling keys, there will also be at least one
|
||||||
* position and one rotation key.*/
|
* position and one rotation key.*/
|
||||||
C_STRUCT aiVectorKey* mScalingKeys;
|
C_STRUCT aiVectorKey* mScalingKeys;
|
||||||
|
|
||||||
|
|
||||||
/** Defines how the animation behaves before the first
|
/** Defines how the animation behaves before the first
|
||||||
* key is encountered.
|
* key is encountered.
|
||||||
*
|
*
|
||||||
* The default value is aiAnimBehaviour_DEFAULT (the original
|
* The default value is aiAnimBehaviour_DEFAULT (the original
|
||||||
* transformation matrix of the affected node is used).*/
|
* transformation matrix of the affected node is used).*/
|
||||||
C_ENUM aiAnimBehaviour mPreState;
|
C_ENUM aiAnimBehaviour mPreState;
|
||||||
|
|
||||||
/** Defines how the animation behaves after the last
|
/** Defines how the animation behaves after the last
|
||||||
* key was processed.
|
* key was processed.
|
||||||
*
|
*
|
||||||
* The default value is aiAnimBehaviour_DEFAULT (the original
|
* The default value is aiAnimBehaviour_DEFAULT (the original
|
||||||
* transformation matrix of the affected node is taken).*/
|
* transformation matrix of the affected node is taken).*/
|
||||||
C_ENUM aiAnimBehaviour mPostState;
|
C_ENUM aiAnimBehaviour mPostState;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
aiNodeAnim()
|
aiNodeAnim()
|
||||||
{
|
{
|
||||||
mNumPositionKeys = 0; mPositionKeys = NULL;
|
mNumPositionKeys = 0; mPositionKeys = NULL;
|
||||||
mNumRotationKeys = 0; mRotationKeys = NULL;
|
mNumRotationKeys = 0; mRotationKeys = NULL;
|
||||||
mNumScalingKeys = 0; mScalingKeys = NULL;
|
mNumScalingKeys = 0; mScalingKeys = NULL;
|
||||||
|
|
||||||
mPreState = mPostState = aiAnimBehaviour_DEFAULT;
|
mPreState = mPostState = aiAnimBehaviour_DEFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
~aiNodeAnim()
|
~aiNodeAnim()
|
||||||
{
|
{
|
||||||
delete [] mPositionKeys;
|
delete [] mPositionKeys;
|
||||||
delete [] mRotationKeys;
|
delete [] mRotationKeys;
|
||||||
delete [] mScalingKeys;
|
delete [] mScalingKeys;
|
||||||
}
|
}
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
};
|
};
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** Describes vertex-based animations for a single mesh or a group of
|
/** Describes vertex-based animations for a single mesh or a group of
|
||||||
* meshes. Meshes carry the animation data for each frame in their
|
* meshes. Meshes carry the animation data for each frame in their
|
||||||
* aiMesh::mAnimMeshes array. The purpose of aiMeshAnim is to
|
* aiMesh::mAnimMeshes array. The purpose of aiMeshAnim is to
|
||||||
* define keyframes linking each mesh attachment to a particular
|
* define keyframes linking each mesh attachment to a particular
|
||||||
* point in time. */
|
* point in time. */
|
||||||
struct aiMeshAnim
|
struct aiMeshAnim
|
||||||
{
|
{
|
||||||
/** Name of the mesh to be animated. An empty string is not allowed,
|
/** Name of the mesh to be animated. An empty string is not allowed,
|
||||||
* animated meshes need to be named (not necessarily uniquely,
|
* animated meshes need to be named (not necessarily uniquely,
|
||||||
* the name can basically serve as wildcard to select a group
|
* the name can basically serve as wildcard to select a group
|
||||||
* of meshes with similar animation setup)*/
|
* of meshes with similar animation setup)*/
|
||||||
C_STRUCT aiString mName;
|
C_STRUCT aiString mName;
|
||||||
|
|
||||||
/** Size of the #mKeys array. Must be 1, at least. */
|
/** Size of the #mKeys array. Must be 1, at least. */
|
||||||
unsigned int mNumKeys;
|
unsigned int mNumKeys;
|
||||||
|
|
||||||
/** Key frames of the animation. May not be NULL. */
|
/** Key frames of the animation. May not be NULL. */
|
||||||
C_STRUCT aiMeshKey* mKeys;
|
C_STRUCT aiMeshKey* mKeys;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
||||||
aiMeshAnim()
|
aiMeshAnim()
|
||||||
: mNumKeys()
|
: mNumKeys()
|
||||||
, mKeys()
|
, mKeys()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
~aiMeshAnim()
|
~aiMeshAnim()
|
||||||
{
|
{
|
||||||
delete[] mKeys;
|
delete[] mKeys;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** An animation consists of keyframe data for a number of nodes. For
|
/** An animation consists of keyframe data for a number of nodes. For
|
||||||
* each node affected by the animation a separate series of data is given.*/
|
* each node affected by the animation a separate series of data is given.*/
|
||||||
struct aiAnimation
|
struct aiAnimation
|
||||||
{
|
{
|
||||||
/** The name of the animation. If the modeling package this data was
|
/** The name of the animation. If the modeling package this data was
|
||||||
* exported from does support only a single animation channel, this
|
* exported from does support only a single animation channel, this
|
||||||
* name is usually empty (length is zero). */
|
* name is usually empty (length is zero). */
|
||||||
C_STRUCT aiString mName;
|
C_STRUCT aiString mName;
|
||||||
|
|
||||||
/** Duration of the animation in ticks. */
|
/** Duration of the animation in ticks. */
|
||||||
double mDuration;
|
double mDuration;
|
||||||
|
|
||||||
/** Ticks per second. 0 if not specified in the imported file */
|
/** Ticks per second. 0 if not specified in the imported file */
|
||||||
double mTicksPerSecond;
|
double mTicksPerSecond;
|
||||||
|
|
||||||
/** The number of bone animation channels. Each channel affects
|
/** The number of bone animation channels. Each channel affects
|
||||||
* a single node. */
|
* a single node. */
|
||||||
unsigned int mNumChannels;
|
unsigned int mNumChannels;
|
||||||
|
|
||||||
/** The node animation channels. Each channel affects a single node.
|
/** The node animation channels. Each channel affects a single node.
|
||||||
* The array is mNumChannels in size. */
|
* The array is mNumChannels in size. */
|
||||||
C_STRUCT aiNodeAnim** mChannels;
|
C_STRUCT aiNodeAnim** mChannels;
|
||||||
|
|
||||||
|
|
||||||
/** The number of mesh animation channels. Each channel affects
|
/** The number of mesh animation channels. Each channel affects
|
||||||
* a single mesh and defines vertex-based animation. */
|
* a single mesh and defines vertex-based animation. */
|
||||||
unsigned int mNumMeshChannels;
|
unsigned int mNumMeshChannels;
|
||||||
|
|
||||||
/** The mesh animation channels. Each channel affects a single mesh.
|
/** The mesh animation channels. Each channel affects a single mesh.
|
||||||
* The array is mNumMeshChannels in size. */
|
* The array is mNumMeshChannels in size. */
|
||||||
C_STRUCT aiMeshAnim** mMeshChannels;
|
C_STRUCT aiMeshAnim** mMeshChannels;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
aiAnimation()
|
aiAnimation()
|
||||||
: mDuration(-1.)
|
: mDuration(-1.)
|
||||||
, mTicksPerSecond()
|
, mTicksPerSecond()
|
||||||
, mNumChannels()
|
, mNumChannels()
|
||||||
, mChannels()
|
, mChannels()
|
||||||
, mNumMeshChannels()
|
, mNumMeshChannels()
|
||||||
, mMeshChannels()
|
, mMeshChannels()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
~aiAnimation()
|
~aiAnimation()
|
||||||
{
|
{
|
||||||
// DO NOT REMOVE THIS ADDITIONAL CHECK
|
// DO NOT REMOVE THIS ADDITIONAL CHECK
|
||||||
if (mNumChannels && mChannels) {
|
if (mNumChannels && mChannels) {
|
||||||
for( unsigned int a = 0; a < mNumChannels; a++) {
|
for( unsigned int a = 0; a < mNumChannels; a++) {
|
||||||
delete mChannels[a];
|
delete mChannels[a];
|
||||||
}
|
}
|
||||||
|
|
||||||
delete [] mChannels;
|
delete [] mChannels;
|
||||||
}
|
}
|
||||||
if (mNumMeshChannels && mMeshChannels) {
|
if (mNumMeshChannels && mMeshChannels) {
|
||||||
for( unsigned int a = 0; a < mNumMeshChannels; a++) {
|
for( unsigned int a = 0; a < mNumMeshChannels; a++) {
|
||||||
delete mMeshChannels[a];
|
delete mMeshChannels[a];
|
||||||
}
|
}
|
||||||
|
|
||||||
delete [] mMeshChannels;
|
delete [] mMeshChannels;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -409,70 +409,70 @@ namespace Assimp {
|
|||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief CPP-API: Utility class to simplify interpolations of various data types.
|
/** @brief CPP-API: Utility class to simplify interpolations of various data types.
|
||||||
*
|
*
|
||||||
* The type of interpolation is choosen automatically depending on the
|
* The type of interpolation is chosen automatically depending on the
|
||||||
* types of the arguments. */
|
* types of the arguments. */
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct Interpolator
|
struct Interpolator
|
||||||
{
|
{
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
/** @brief Get the result of the interpolation between a,b.
|
/** @brief Get the result of the interpolation between a,b.
|
||||||
*
|
*
|
||||||
* The interpolation algorithm depends on the type of the operands.
|
* The interpolation algorithm depends on the type of the operands.
|
||||||
* aiQuaternion's and aiQuatKey's SLERP, the rest does a simple
|
* aiQuaternion's and aiQuatKey's SLERP, the rest does a simple
|
||||||
* linear interpolation. */
|
* linear interpolation. */
|
||||||
void operator () (T& out,const T& a, const T& b, float d) const {
|
void operator () (T& out,const T& a, const T& b, float d) const {
|
||||||
out = a + (b-a)*d;
|
out = a + (b-a)*d;
|
||||||
}
|
}
|
||||||
}; // ! Interpolator <T>
|
}; // ! Interpolator <T>
|
||||||
|
|
||||||
//! @cond Never
|
//! @cond Never
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct Interpolator <aiQuaternion> {
|
struct Interpolator <aiQuaternion> {
|
||||||
void operator () (aiQuaternion& out,const aiQuaternion& a,
|
void operator () (aiQuaternion& out,const aiQuaternion& a,
|
||||||
const aiQuaternion& b, float d) const
|
const aiQuaternion& b, float d) const
|
||||||
{
|
{
|
||||||
aiQuaternion::Interpolate(out,a,b,d);
|
aiQuaternion::Interpolate(out,a,b,d);
|
||||||
}
|
}
|
||||||
}; // ! Interpolator <aiQuaternion>
|
}; // ! Interpolator <aiQuaternion>
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct Interpolator <unsigned int> {
|
struct Interpolator <unsigned int> {
|
||||||
void operator () (unsigned int& out,unsigned int a,
|
void operator () (unsigned int& out,unsigned int a,
|
||||||
unsigned int b, float d) const
|
unsigned int b, float d) const
|
||||||
{
|
{
|
||||||
out = d>0.5f ? b : a;
|
out = d>0.5f ? b : a;
|
||||||
}
|
}
|
||||||
}; // ! Interpolator <aiQuaternion>
|
}; // ! Interpolator <aiQuaternion>
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct Interpolator <aiVectorKey> {
|
struct Interpolator <aiVectorKey> {
|
||||||
void operator () (aiVector3D& out,const aiVectorKey& a,
|
void operator () (aiVector3D& out,const aiVectorKey& a,
|
||||||
const aiVectorKey& b, float d) const
|
const aiVectorKey& b, float d) const
|
||||||
{
|
{
|
||||||
Interpolator<aiVector3D> ipl;
|
Interpolator<aiVector3D> ipl;
|
||||||
ipl(out,a.mValue,b.mValue,d);
|
ipl(out,a.mValue,b.mValue,d);
|
||||||
}
|
}
|
||||||
}; // ! Interpolator <aiVectorKey>
|
}; // ! Interpolator <aiVectorKey>
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct Interpolator <aiQuatKey> {
|
struct Interpolator <aiQuatKey> {
|
||||||
void operator () (aiQuaternion& out, const aiQuatKey& a,
|
void operator () (aiQuaternion& out, const aiQuatKey& a,
|
||||||
const aiQuatKey& b, float d) const
|
const aiQuatKey& b, float d) const
|
||||||
{
|
{
|
||||||
Interpolator<aiQuaternion> ipl;
|
Interpolator<aiQuaternion> ipl;
|
||||||
ipl(out,a.mValue,b.mValue,d);
|
ipl(out,a.mValue,b.mValue,d);
|
||||||
}
|
}
|
||||||
}; // ! Interpolator <aiQuatKey>
|
}; // ! Interpolator <aiQuatKey>
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct Interpolator <aiMeshKey> {
|
struct Interpolator <aiMeshKey> {
|
||||||
void operator () (unsigned int& out, const aiMeshKey& a,
|
void operator () (unsigned int& out, const aiMeshKey& a,
|
||||||
const aiMeshKey& b, float d) const
|
const aiMeshKey& b, float d) const
|
||||||
{
|
{
|
||||||
Interpolator<unsigned int> ipl;
|
Interpolator<unsigned int> ipl;
|
||||||
ipl(out,a.mValue,b.mValue,d);
|
ipl(out,a.mValue,b.mValue,d);
|
||||||
}
|
}
|
||||||
}; // ! Interpolator <aiQuatKey>
|
}; // ! Interpolator <aiQuatKey>
|
||||||
|
|
||||||
//! @endcond
|
//! @endcond
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,16 +25,16 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@@ -53,16 +53,16 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** Helper structure to describe a virtual camera.
|
/** Helper structure to describe a virtual camera.
|
||||||
*
|
*
|
||||||
* Cameras have a representation in the node graph and can be animated.
|
* Cameras have a representation in the node graph and can be animated.
|
||||||
* An important aspect is that the camera itself is also part of the
|
* An important aspect is that the camera itself is also part of the
|
||||||
* scenegraph. This means, any values such as the look-at vector are not
|
* scenegraph. This means, any values such as the look-at vector are not
|
||||||
* *absolute*, they're <b>relative</b> to the coordinate system defined
|
* *absolute*, they're <b>relative</b> to the coordinate system defined
|
||||||
* by the node which corresponds to the camera. This allows for camera
|
* by the node which corresponds to the camera. This allows for camera
|
||||||
* animations. For static cameras parameters like the 'look-at' or 'up' vectors
|
* animations. For static cameras parameters like the 'look-at' or 'up' vectors
|
||||||
* are usually specified directly in aiCamera, but beware, they could also
|
* are usually specified directly in aiCamera, but beware, they could also
|
||||||
* be encoded in the node transformation. The following (pseudo)code sample
|
* be encoded in the node transformation. The following (pseudo)code sample
|
||||||
* shows how to do it: <br><br>
|
* shows how to do it: <br><br>
|
||||||
* @code
|
* @code
|
||||||
* // Get the camera matrix for a camera at a specific time
|
* // Get the camera matrix for a camera at a specific time
|
||||||
@@ -93,124 +93,124 @@ extern "C" {
|
|||||||
* called "<camName>.Target". However this is just additional information
|
* called "<camName>.Target". However this is just additional information
|
||||||
* then the transformation tracks of the camera main node make the
|
* then the transformation tracks of the camera main node make the
|
||||||
* camera already look in the right direction.
|
* camera already look in the right direction.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
struct aiCamera
|
struct aiCamera
|
||||||
{
|
{
|
||||||
/** The name of the camera.
|
/** The name of the camera.
|
||||||
*
|
*
|
||||||
* There must be a node in the scenegraph with the same name.
|
* There must be a node in the scenegraph with the same name.
|
||||||
* This node specifies the position of the camera in the scene
|
* This node specifies the position of the camera in the scene
|
||||||
* hierarchy and can be animated.
|
* hierarchy and can be animated.
|
||||||
*/
|
*/
|
||||||
C_STRUCT aiString mName;
|
C_STRUCT aiString mName;
|
||||||
|
|
||||||
/** Position of the camera relative to the coordinate space
|
/** Position of the camera relative to the coordinate space
|
||||||
* defined by the corresponding node.
|
* defined by the corresponding node.
|
||||||
*
|
*
|
||||||
* The default value is 0|0|0.
|
* The default value is 0|0|0.
|
||||||
*/
|
*/
|
||||||
C_STRUCT aiVector3D mPosition;
|
C_STRUCT aiVector3D mPosition;
|
||||||
|
|
||||||
|
|
||||||
/** 'Up' - vector of the camera coordinate system relative to
|
/** 'Up' - vector of the camera coordinate system relative to
|
||||||
* the coordinate space defined by the corresponding node.
|
* the coordinate space defined by the corresponding node.
|
||||||
*
|
*
|
||||||
* The 'right' vector of the camera coordinate system is
|
* The 'right' vector of the camera coordinate system is
|
||||||
* the cross product of the up and lookAt vectors.
|
* the cross product of the up and lookAt vectors.
|
||||||
* The default value is 0|1|0. The vector
|
* The default value is 0|1|0. The vector
|
||||||
* may be normalized, but it needn't.
|
* may be normalized, but it needn't.
|
||||||
*/
|
*/
|
||||||
C_STRUCT aiVector3D mUp;
|
C_STRUCT aiVector3D mUp;
|
||||||
|
|
||||||
|
|
||||||
/** 'LookAt' - vector of the camera coordinate system relative to
|
/** 'LookAt' - vector of the camera coordinate system relative to
|
||||||
* the coordinate space defined by the corresponding node.
|
* the coordinate space defined by the corresponding node.
|
||||||
*
|
*
|
||||||
* This is the viewing direction of the user.
|
* This is the viewing direction of the user.
|
||||||
* The default value is 0|0|1. The vector
|
* The default value is 0|0|1. The vector
|
||||||
* may be normalized, but it needn't.
|
* may be normalized, but it needn't.
|
||||||
*/
|
*/
|
||||||
C_STRUCT aiVector3D mLookAt;
|
C_STRUCT aiVector3D mLookAt;
|
||||||
|
|
||||||
|
|
||||||
/** Half horizontal field of view angle, in radians.
|
/** Half horizontal field of view angle, in radians.
|
||||||
*
|
*
|
||||||
* The field of view angle is the angle between the center
|
* The field of view angle is the angle between the center
|
||||||
* line of the screen and the left or right border.
|
* line of the screen and the left or right border.
|
||||||
* The default value is 1/4PI.
|
* The default value is 1/4PI.
|
||||||
*/
|
*/
|
||||||
float mHorizontalFOV;
|
float mHorizontalFOV;
|
||||||
|
|
||||||
/** Distance of the near clipping plane from the camera.
|
/** Distance of the near clipping plane from the camera.
|
||||||
*
|
*
|
||||||
* The value may not be 0.f (for arithmetic reasons to prevent
|
* The value may not be 0.f (for arithmetic reasons to prevent
|
||||||
* a division through zero). The default value is 0.1f.
|
* a division through zero). The default value is 0.1f.
|
||||||
*/
|
*/
|
||||||
float mClipPlaneNear;
|
float mClipPlaneNear;
|
||||||
|
|
||||||
/** Distance of the far clipping plane from the camera.
|
/** Distance of the far clipping plane from the camera.
|
||||||
*
|
*
|
||||||
* The far clipping plane must, of course, be further away than the
|
* The far clipping plane must, of course, be further away than the
|
||||||
* near clipping plane. The default value is 1000.f. The ratio
|
* near clipping plane. The default value is 1000.f. The ratio
|
||||||
* between the near and the far plane should not be too
|
* between the near and the far plane should not be too
|
||||||
* large (between 1000-10000 should be ok) to avoid floating-point
|
* large (between 1000-10000 should be ok) to avoid floating-point
|
||||||
* inaccuracies which could lead to z-fighting.
|
* inaccuracies which could lead to z-fighting.
|
||||||
*/
|
*/
|
||||||
float mClipPlaneFar;
|
float mClipPlaneFar;
|
||||||
|
|
||||||
|
|
||||||
/** Screen aspect ratio.
|
/** Screen aspect ratio.
|
||||||
*
|
*
|
||||||
* This is the ration between the width and the height of the
|
* This is the ration between the width and the height of the
|
||||||
* screen. Typical values are 4/3, 1/2 or 1/1. This value is
|
* screen. Typical values are 4/3, 1/2 or 1/1. This value is
|
||||||
* 0 if the aspect ratio is not defined in the source file.
|
* 0 if the aspect ratio is not defined in the source file.
|
||||||
* 0 is also the default value.
|
* 0 is also the default value.
|
||||||
*/
|
*/
|
||||||
float mAspect;
|
float mAspect;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
||||||
aiCamera()
|
aiCamera()
|
||||||
: mUp (0.f,1.f,0.f)
|
: mUp (0.f,1.f,0.f)
|
||||||
, mLookAt (0.f,0.f,1.f)
|
, mLookAt (0.f,0.f,1.f)
|
||||||
, mHorizontalFOV (0.25f * (float)AI_MATH_PI)
|
, mHorizontalFOV (0.25f * (float)AI_MATH_PI)
|
||||||
, mClipPlaneNear (0.1f)
|
, mClipPlaneNear (0.1f)
|
||||||
, mClipPlaneFar (1000.f)
|
, mClipPlaneFar (1000.f)
|
||||||
, mAspect (0.f)
|
, mAspect (0.f)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
/** @brief Get a *right-handed* camera matrix from me
|
/** @brief Get a *right-handed* camera matrix from me
|
||||||
* @param out Camera matrix to be filled
|
* @param out Camera matrix to be filled
|
||||||
*/
|
*/
|
||||||
void GetCameraMatrix (aiMatrix4x4& out) const
|
void GetCameraMatrix (aiMatrix4x4& out) const
|
||||||
{
|
{
|
||||||
/** todo: test ... should work, but i'm not absolutely sure */
|
/** todo: test ... should work, but i'm not absolutely sure */
|
||||||
|
|
||||||
/** We don't know whether these vectors are already normalized ...*/
|
/** We don't know whether these vectors are already normalized ...*/
|
||||||
aiVector3D zaxis = mLookAt; zaxis.Normalize();
|
aiVector3D zaxis = mLookAt; zaxis.Normalize();
|
||||||
aiVector3D yaxis = mUp; yaxis.Normalize();
|
aiVector3D yaxis = mUp; yaxis.Normalize();
|
||||||
aiVector3D xaxis = mUp^mLookAt; xaxis.Normalize();
|
aiVector3D xaxis = mUp^mLookAt; xaxis.Normalize();
|
||||||
|
|
||||||
out.a4 = -(xaxis * mPosition);
|
out.a4 = -(xaxis * mPosition);
|
||||||
out.b4 = -(yaxis * mPosition);
|
out.b4 = -(yaxis * mPosition);
|
||||||
out.c4 = -(zaxis * mPosition);
|
out.c4 = -(zaxis * mPosition);
|
||||||
|
|
||||||
out.a1 = xaxis.x;
|
out.a1 = xaxis.x;
|
||||||
out.a2 = xaxis.y;
|
out.a2 = xaxis.y;
|
||||||
out.a3 = xaxis.z;
|
out.a3 = xaxis.z;
|
||||||
|
|
||||||
out.b1 = yaxis.x;
|
|
||||||
out.b2 = yaxis.y;
|
|
||||||
out.b3 = yaxis.z;
|
|
||||||
|
|
||||||
out.c1 = zaxis.x;
|
out.b1 = yaxis.x;
|
||||||
out.c2 = zaxis.y;
|
out.b2 = yaxis.y;
|
||||||
out.c3 = zaxis.z;
|
out.b3 = yaxis.z;
|
||||||
|
|
||||||
out.d1 = out.d2 = out.d3 = 0.f;
|
out.c1 = zaxis.x;
|
||||||
out.d4 = 1.f;
|
out.c2 = zaxis.y;
|
||||||
}
|
out.c3 = zaxis.z;
|
||||||
|
|
||||||
|
out.d1 = out.d2 = out.d3 = 0.f;
|
||||||
|
out.d4 = 1.f;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ Copyright (c) 2006-2011, assimp team
|
|||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,16 +25,16 @@ contributors may be used to endorse or promote products
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@@ -57,23 +57,23 @@ struct aiScene; // aiScene.h
|
|||||||
struct aiFileIO; // aiFileIO.h
|
struct aiFileIO; // aiFileIO.h
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Describes an file format which Assimp can export to. Use #aiGetExportFormatCount() to
|
/** Describes an file format which Assimp can export to. Use #aiGetExportFormatCount() to
|
||||||
* learn how many export formats the current Assimp build supports and #aiGetExportFormatDescription()
|
* learn how many export formats the current Assimp build supports and #aiGetExportFormatDescription()
|
||||||
* to retrieve a description of an export format option.
|
* to retrieve a description of an export format option.
|
||||||
*/
|
*/
|
||||||
struct aiExportFormatDesc
|
struct aiExportFormatDesc
|
||||||
{
|
{
|
||||||
/// a short string ID to uniquely identify the export format. Use this ID string to
|
/// a short string ID to uniquely identify the export format. Use this ID string to
|
||||||
/// specify which file format you want to export to when calling #aiExportScene().
|
/// specify which file format you want to export to when calling #aiExportScene().
|
||||||
/// Example: "dae" or "obj"
|
/// Example: "dae" or "obj"
|
||||||
const char* id;
|
const char* id;
|
||||||
|
|
||||||
/// A short description of the file format to present to users. Useful if you want
|
/// A short description of the file format to present to users. Useful if you want
|
||||||
/// to allow the user to select an export format.
|
/// to allow the user to select an export format.
|
||||||
const char* description;
|
const char* description;
|
||||||
|
|
||||||
/// Recommended file extension for the exported file in lower case.
|
/// Recommended file extension for the exported file in lower case.
|
||||||
const char* fileExtension;
|
const char* fileExtension;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -86,25 +86,32 @@ ASSIMP_API size_t aiGetExportFormatCount(void);
|
|||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Returns a description of the nth export file format. Use #aiGetExportFormatCount()
|
/** Returns a description of the nth export file format. Use #aiGetExportFormatCount()
|
||||||
* to learn how many export formats are supported.
|
* to learn how many export formats are supported. The description must be released by
|
||||||
|
* calling aiReleaseExportFormatDescription afterwards.
|
||||||
* @param pIndex Index of the export format to retrieve information for. Valid range is
|
* @param pIndex Index of the export format to retrieve information for. Valid range is
|
||||||
* 0 to #aiGetExportFormatCount()
|
* 0 to #aiGetExportFormatCount()
|
||||||
* @return A description of that specific export format. NULL if pIndex is out of range.
|
* @return A description of that specific export format. NULL if pIndex is out of range.
|
||||||
*/
|
*/
|
||||||
ASSIMP_API const C_STRUCT aiExportFormatDesc* aiGetExportFormatDescription( size_t pIndex);
|
ASSIMP_API const C_STRUCT aiExportFormatDesc* aiGetExportFormatDescription( size_t pIndex);
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------------
|
||||||
|
/** Release a description of the nth export file format. Must be returned by
|
||||||
|
* aiGetExportFormatDescription
|
||||||
|
* @param desc Pointer to the description
|
||||||
|
*/
|
||||||
|
ASSIMP_API void aiReleaseExportFormatDescription( const C_STRUCT aiExportFormatDesc *desc );
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Create a modifiable copy of a scene.
|
/** Create a modifiable copy of a scene.
|
||||||
* This is useful to import files via Assimp, change their topology and
|
* This is useful to import files via Assimp, change their topology and
|
||||||
* export them again. Since the scene returned by the various importer functions
|
* export them again. Since the scene returned by the various importer functions
|
||||||
* is const, a modifiable copy is needed.
|
* is const, a modifiable copy is needed.
|
||||||
* @param pIn Valid scene to be copied
|
* @param pIn Valid scene to be copied
|
||||||
* @param pOut Receives a modifyable copy of the scene. Use aiFreeScene() to
|
* @param pOut Receives a modifyable copy of the scene. Use aiFreeScene() to
|
||||||
* delete it again.
|
* delete it again.
|
||||||
*/
|
*/
|
||||||
ASSIMP_API void aiCopyScene(const C_STRUCT aiScene* pIn,
|
ASSIMP_API void aiCopyScene(const C_STRUCT aiScene* pIn,
|
||||||
C_STRUCT aiScene** pOut);
|
C_STRUCT aiScene** pOut);
|
||||||
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
@@ -119,19 +126,16 @@ ASSIMP_API void aiFreeScene(const C_STRUCT aiScene* pIn);
|
|||||||
* should use a right-handed coordinate systems, face winding should be counter-clockwise
|
* should use a right-handed coordinate systems, face winding should be counter-clockwise
|
||||||
* and the UV coordinate origin is assumed to be in the upper left. If your input data
|
* and the UV coordinate origin is assumed to be in the upper left. If your input data
|
||||||
* uses different conventions, have a look at the last parameter.
|
* uses different conventions, have a look at the last parameter.
|
||||||
* @param pFormatId ID string to specify to which format you want to export to. Use
|
* @param pFormatId ID string to specify to which format you want to export to. Use
|
||||||
* aiGetExportFormatCount() / aiGetExportFormatDescription() to learn which export formats are available.
|
* aiGetExportFormatCount() / aiGetExportFormatDescription() to learn which export formats are available.
|
||||||
* @param pFileName Output file to write
|
* @param pFileName Output file to write
|
||||||
* @param pIO custom IO implementation to be used. Use this if you use your own storage methods.
|
* @param pPreprocessing Accepts any choice of the #aiPostProcessSteps enumerated
|
||||||
* If none is supplied, a default implementation using standard file IO is used. Note that
|
|
||||||
* #aiExportSceneToBlob is provided as convenience function to export to memory buffers.
|
|
||||||
* @param pPreprocessing Accepts any choice of the #aiPostProcessing enumerated
|
|
||||||
* flags, but in reality only a subset of them makes sense here. Specifying
|
* flags, but in reality only a subset of them makes sense here. Specifying
|
||||||
* 'preprocessing' flags is useful if the input scene does not conform to
|
* 'preprocessing' flags is useful if the input scene does not conform to
|
||||||
* Assimp's default conventions as specified in the @link data Data Structures Page @endlink.
|
* Assimp's default conventions as specified in the @link data Data Structures Page @endlink.
|
||||||
* In short, this means the geometry data should use a right-handed coordinate systems, face
|
* In short, this means the geometry data should use a right-handed coordinate systems, face
|
||||||
* winding should be counter-clockwise and the UV coordinate origin is assumed to be in
|
* winding should be counter-clockwise and the UV coordinate origin is assumed to be in
|
||||||
* the upper left. The #aiProcess_MakeLeftHanded, #aiProcess_FlipUVs and
|
* the upper left. The #aiProcess_MakeLeftHanded, #aiProcess_FlipUVs and
|
||||||
* #aiProcess_FlipWindingOrder flags are used in the import side to allow users
|
* #aiProcess_FlipWindingOrder flags are used in the import side to allow users
|
||||||
* to have those defaults automatically adapted to their conventions. Specifying those flags
|
* to have those defaults automatically adapted to their conventions. Specifying those flags
|
||||||
* for exporting has the opposite effect, respectively. Some other of the
|
* for exporting has the opposite effect, respectively. Some other of the
|
||||||
@@ -139,30 +143,30 @@ ASSIMP_API void aiFreeScene(const C_STRUCT aiScene* pIn);
|
|||||||
* to try out what their effect on the exported file is. Many formats impose
|
* to try out what their effect on the exported file is. Many formats impose
|
||||||
* their own restrictions on the structure of the geometry stored therein,
|
* their own restrictions on the structure of the geometry stored therein,
|
||||||
* so some preprocessing may have little or no effect at all, or may be
|
* so some preprocessing may have little or no effect at all, or may be
|
||||||
* redundant as exporters would apply them anyhow. A good example
|
* redundant as exporters would apply them anyhow. A good example
|
||||||
* is triangulation - whilst you can enforce it by specifying
|
* is triangulation - whilst you can enforce it by specifying
|
||||||
* the #aiProcess_Triangulate flag, most export formats support only
|
* the #aiProcess_Triangulate flag, most export formats support only
|
||||||
* triangulate data so they would run the step anyway.
|
* triangulate data so they would run the step anyway.
|
||||||
*
|
*
|
||||||
* If assimp detects that the input scene was directly taken from the importer side of
|
* If assimp detects that the input scene was directly taken from the importer side of
|
||||||
* the library (i.e. not copied using aiCopyScene and potetially modified afterwards),
|
* the library (i.e. not copied using aiCopyScene and potetially modified afterwards),
|
||||||
* any postprocessing steps already applied to the scene will not be applied again, unless
|
* any postprocessing steps already applied to the scene will not be applied again, unless
|
||||||
* they show non-idempotent behaviour (#aiProcess_MakeLeftHanded, #aiProcess_FlipUVs and
|
* they show non-idempotent behaviour (#aiProcess_MakeLeftHanded, #aiProcess_FlipUVs and
|
||||||
* #aiProcess_FlipWindingOrder).
|
* #aiProcess_FlipWindingOrder).
|
||||||
* @return a status code indicating the result of the export
|
* @return a status code indicating the result of the export
|
||||||
* @note Use aiCopyScene() to get a modifiable copy of a previously
|
* @note Use aiCopyScene() to get a modifiable copy of a previously
|
||||||
* imported scene.
|
* imported scene.
|
||||||
*/
|
*/
|
||||||
ASSIMP_API aiReturn aiExportScene( const C_STRUCT aiScene* pScene,
|
ASSIMP_API aiReturn aiExportScene( const C_STRUCT aiScene* pScene,
|
||||||
const char* pFormatId,
|
const char* pFormatId,
|
||||||
const char* pFileName,
|
const char* pFileName,
|
||||||
unsigned int pPreprocessing);
|
unsigned int pPreprocessing);
|
||||||
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Exports the given scene to a chosen file format using custom IO logic supplied by you.
|
/** Exports the given scene to a chosen file format using custom IO logic supplied by you.
|
||||||
* @param pScene The scene to export. Stays in possession of the caller, is not changed by the function.
|
* @param pScene The scene to export. Stays in possession of the caller, is not changed by the function.
|
||||||
* @param pFormatId ID string to specify to which format you want to export to. Use
|
* @param pFormatId ID string to specify to which format you want to export to. Use
|
||||||
* aiGetExportFormatCount() / aiGetExportFormatDescription() to learn which export formats are available.
|
* aiGetExportFormatCount() / aiGetExportFormatDescription() to learn which export formats are available.
|
||||||
* @param pFileName Output file to write
|
* @param pFileName Output file to write
|
||||||
* @param pIO custom IO implementation to be used. Use this if you use your own storage methods.
|
* @param pIO custom IO implementation to be used. Use this if you use your own storage methods.
|
||||||
@@ -174,16 +178,16 @@ ASSIMP_API aiReturn aiExportScene( const C_STRUCT aiScene* pScene,
|
|||||||
* @note Use aiCopyScene() to get a modifiable copy of a previously
|
* @note Use aiCopyScene() to get a modifiable copy of a previously
|
||||||
* imported scene.
|
* imported scene.
|
||||||
*/
|
*/
|
||||||
ASSIMP_API aiReturn aiExportSceneEx( const C_STRUCT aiScene* pScene,
|
ASSIMP_API aiReturn aiExportSceneEx( const C_STRUCT aiScene* pScene,
|
||||||
const char* pFormatId,
|
const char* pFormatId,
|
||||||
const char* pFileName,
|
const char* pFileName,
|
||||||
C_STRUCT aiFileIO* pIO,
|
C_STRUCT aiFileIO* pIO,
|
||||||
unsigned int pPreprocessing );
|
unsigned int pPreprocessing );
|
||||||
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Describes a blob of exported scene data. Use #aiExportSceneToBlob() to create a blob containing an
|
/** Describes a blob of exported scene data. Use #aiExportSceneToBlob() to create a blob containing an
|
||||||
* exported scene. The memory referred by this structure is owned by Assimp. Use #aiReleaseExportedFile()
|
* exported scene. The memory referred by this structure is owned by Assimp.
|
||||||
* to free its resources. Don't try to free the memory on your side - it will crash for most build configurations
|
* to free its resources. Don't try to free the memory on your side - it will crash for most build configurations
|
||||||
* due to conflicting heaps.
|
* due to conflicting heaps.
|
||||||
*
|
*
|
||||||
@@ -191,50 +195,50 @@ ASSIMP_API aiReturn aiExportSceneEx( const C_STRUCT aiScene* pScene,
|
|||||||
* This is used when exporters write more than one output file for a given #aiScene. See the remarks for
|
* This is used when exporters write more than one output file for a given #aiScene. See the remarks for
|
||||||
* #aiExportDataBlob::name for more information.
|
* #aiExportDataBlob::name for more information.
|
||||||
*/
|
*/
|
||||||
struct aiExportDataBlob
|
struct aiExportDataBlob
|
||||||
{
|
{
|
||||||
/// Size of the data in bytes
|
/// Size of the data in bytes
|
||||||
size_t size;
|
size_t size;
|
||||||
|
|
||||||
/// The data.
|
/// The data.
|
||||||
void* data;
|
void* data;
|
||||||
|
|
||||||
/** Name of the blob. An empty string always
|
/** Name of the blob. An empty string always
|
||||||
indicates the first (and primary) blob,
|
indicates the first (and primary) blob,
|
||||||
which contains the actual file data.
|
which contains the actual file data.
|
||||||
Any other blobs are auxiliary files produced
|
Any other blobs are auxiliary files produced
|
||||||
by exporters (i.e. material files). Existence
|
by exporters (i.e. material files). Existence
|
||||||
of such files depends on the file format. Most
|
of such files depends on the file format. Most
|
||||||
formats don't split assets across multiple files.
|
formats don't split assets across multiple files.
|
||||||
|
|
||||||
If used, blob names usually contain the file
|
If used, blob names usually contain the file
|
||||||
extension that should be used when writing
|
extension that should be used when writing
|
||||||
the data to disc.
|
the data to disc.
|
||||||
*/
|
*/
|
||||||
C_STRUCT aiString name;
|
C_STRUCT aiString name;
|
||||||
|
|
||||||
/** Pointer to the next blob in the chain or NULL if there is none. */
|
/** Pointer to the next blob in the chain or NULL if there is none. */
|
||||||
C_STRUCT aiExportDataBlob * next;
|
C_STRUCT aiExportDataBlob * next;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
/// Default constructor
|
/// Default constructor
|
||||||
aiExportDataBlob() { size = 0; data = next = NULL; }
|
aiExportDataBlob() { size = 0; data = next = NULL; }
|
||||||
/// Releases the data
|
/// Releases the data
|
||||||
~aiExportDataBlob() { delete [] static_cast<unsigned char*>( data ); delete next; }
|
~aiExportDataBlob() { delete [] static_cast<unsigned char*>( data ); delete next; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// no copying
|
// no copying
|
||||||
aiExportDataBlob(const aiExportDataBlob& );
|
aiExportDataBlob(const aiExportDataBlob& );
|
||||||
aiExportDataBlob& operator= (const aiExportDataBlob& );
|
aiExportDataBlob& operator= (const aiExportDataBlob& );
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
};
|
};
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Exports the given scene to a chosen file format. Returns the exported data as a binary blob which
|
/** Exports the given scene to a chosen file format. Returns the exported data as a binary blob which
|
||||||
* you can write into a file or something. When you're done with the data, use #aiReleaseExportBlob()
|
* you can write into a file or something. When you're done with the data, use #aiReleaseExportBlob()
|
||||||
* to free the resources associated with the export.
|
* to free the resources associated with the export.
|
||||||
* @param pScene The scene to export. Stays in possession of the caller, is not changed by the function.
|
* @param pScene The scene to export. Stays in possession of the caller, is not changed by the function.
|
||||||
* @param pFormatId ID string to specify to which format you want to export to. Use
|
* @param pFormatId ID string to specify to which format you want to export to. Use
|
||||||
* #aiGetExportFormatCount() / #aiGetExportFormatDescription() to learn which export formats are available.
|
* #aiGetExportFormatCount() / #aiGetExportFormatDescription() to learn which export formats are available.
|
||||||
* @param pPreprocessing Please see the documentation for #aiExportScene
|
* @param pPreprocessing Please see the documentation for #aiExportScene
|
||||||
* @return the exported data or NULL in case of error
|
* @return the exported data or NULL in case of error
|
||||||
@@ -244,7 +248,7 @@ ASSIMP_API const C_STRUCT aiExportDataBlob* aiExportSceneToBlob( const C_STRUCT
|
|||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Releases the memory associated with the given exported data. Use this function to free a data blob
|
/** Releases the memory associated with the given exported data. Use this function to free a data blob
|
||||||
* returned by aiExportScene().
|
* returned by aiExportScene().
|
||||||
* @param pData the data blob returned by #aiExportSceneToBlob
|
* @param pData the data blob returned by #aiExportSceneToBlob
|
||||||
*/
|
*/
|
||||||
ASSIMP_API void aiReleaseExportBlob( const C_STRUCT aiExportDataBlob* pData );
|
ASSIMP_API void aiReleaseExportBlob( const C_STRUCT aiExportDataBlob* pData );
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,21 +25,21 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @file aiFileIO.h
|
/** @file cfileio.h
|
||||||
* @brief Defines generic C routines to access memory-mapped files
|
* @brief Defines generic C routines to access memory-mapped files
|
||||||
*/
|
*/
|
||||||
#ifndef AI_FILEIO_H_INC
|
#ifndef AI_FILEIO_H_INC
|
||||||
@@ -71,62 +71,62 @@ typedef char* aiUserData;
|
|||||||
*
|
*
|
||||||
* Provided are functions to open and close files. Supply a custom structure to
|
* Provided are functions to open and close files. Supply a custom structure to
|
||||||
* the import function. If you don't, a default implementation is used. Use custom
|
* the import function. If you don't, a default implementation is used. Use custom
|
||||||
* file systems to enable reading from other sources, such as ZIPs
|
* file systems to enable reading from other sources, such as ZIPs
|
||||||
* or memory locations. */
|
* or memory locations. */
|
||||||
struct aiFileIO
|
struct aiFileIO
|
||||||
{
|
{
|
||||||
/** Function used to open a new file
|
/** Function used to open a new file
|
||||||
*/
|
*/
|
||||||
aiFileOpenProc OpenProc;
|
aiFileOpenProc OpenProc;
|
||||||
|
|
||||||
/** Function used to close an existing file
|
/** Function used to close an existing file
|
||||||
*/
|
*/
|
||||||
aiFileCloseProc CloseProc;
|
aiFileCloseProc CloseProc;
|
||||||
|
|
||||||
/** User-defined, opaque data */
|
/** User-defined, opaque data */
|
||||||
aiUserData UserData;
|
aiUserData UserData;
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
/** @brief C-API: File callbacks
|
/** @brief C-API: File callbacks
|
||||||
*
|
*
|
||||||
* Actually, it's a data structure to wrap a set of fXXXX (e.g fopen)
|
* Actually, it's a data structure to wrap a set of fXXXX (e.g fopen)
|
||||||
* replacement functions.
|
* replacement functions.
|
||||||
*
|
*
|
||||||
* The default implementation of the functions utilizes the fXXX functions from
|
* The default implementation of the functions utilizes the fXXX functions from
|
||||||
* the CRT. However, you can supply a custom implementation to Assimp by
|
* the CRT. However, you can supply a custom implementation to Assimp by
|
||||||
* delivering a custom aiFileIO. Use this to enable reading from other sources,
|
* delivering a custom aiFileIO. Use this to enable reading from other sources,
|
||||||
* such as ZIP archives or memory locations. */
|
* such as ZIP archives or memory locations. */
|
||||||
struct aiFile
|
struct aiFile
|
||||||
{
|
{
|
||||||
/** Callback to read from a file */
|
/** Callback to read from a file */
|
||||||
aiFileReadProc ReadProc;
|
aiFileReadProc ReadProc;
|
||||||
|
|
||||||
/** Callback to write to a file */
|
/** Callback to write to a file */
|
||||||
aiFileWriteProc WriteProc;
|
aiFileWriteProc WriteProc;
|
||||||
|
|
||||||
/** Callback to retrieve the current position of
|
/** Callback to retrieve the current position of
|
||||||
* the file cursor (ftell())
|
* the file cursor (ftell())
|
||||||
*/
|
*/
|
||||||
aiFileTellProc TellProc;
|
aiFileTellProc TellProc;
|
||||||
|
|
||||||
/** Callback to retrieve the size of the file,
|
/** Callback to retrieve the size of the file,
|
||||||
* in bytes
|
* in bytes
|
||||||
*/
|
*/
|
||||||
aiFileTellProc FileSizeProc;
|
aiFileTellProc FileSizeProc;
|
||||||
|
|
||||||
/** Callback to set the current position
|
/** Callback to set the current position
|
||||||
* of the file cursor (fseek())
|
* of the file cursor (fseek())
|
||||||
*/
|
*/
|
||||||
aiFileSeek SeekProc;
|
aiFileSeek SeekProc;
|
||||||
|
|
||||||
/** Callback to flush the file contents
|
/** Callback to flush the file contents
|
||||||
*/
|
*/
|
||||||
aiFileFlushProc FlushProc;
|
aiFileFlushProc FlushProc;
|
||||||
|
|
||||||
/** User-defined, opaque data
|
/** User-defined, opaque data
|
||||||
*/
|
*/
|
||||||
aiUserData UserData;
|
aiUserData UserData;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,26 +25,27 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @file assimp.h
|
/** @file cimport.h
|
||||||
* @brief Defines the C-API to the Open Asset Import Library.
|
* @brief Defines the C-API to the Open Asset Import Library.
|
||||||
*/
|
*/
|
||||||
#ifndef AI_ASSIMP_H_INC
|
#ifndef AI_ASSIMP_H_INC
|
||||||
#define AI_ASSIMP_H_INC
|
#define AI_ASSIMP_H_INC
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
#include "importerdesc.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@@ -63,11 +64,11 @@ typedef void (*aiLogStreamCallback)(const char* /* message */, char* /* user */)
|
|||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
struct aiLogStream
|
struct aiLogStream
|
||||||
{
|
{
|
||||||
/** callback to be called */
|
/** callback to be called */
|
||||||
aiLogStreamCallback callback;
|
aiLogStreamCallback callback;
|
||||||
|
|
||||||
/** user data to be passed to the callback */
|
/** user data to be passed to the callback */
|
||||||
char* user;
|
char* user;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -92,135 +93,167 @@ typedef int aiBool;
|
|||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Reads the given file and returns its content.
|
/** Reads the given file and returns its content.
|
||||||
*
|
*
|
||||||
* If the call succeeds, the imported data is returned in an aiScene structure.
|
* If the call succeeds, the imported data is returned in an aiScene structure.
|
||||||
* The data is intended to be read-only, it stays property of the ASSIMP
|
* The data is intended to be read-only, it stays property of the ASSIMP
|
||||||
* library and will be stable until aiReleaseImport() is called. After you're
|
* library and will be stable until aiReleaseImport() is called. After you're
|
||||||
* done with it, call aiReleaseImport() to free the resources associated with
|
* done with it, call aiReleaseImport() to free the resources associated with
|
||||||
* this file. If the import fails, NULL is returned instead. Call
|
* this file. If the import fails, NULL is returned instead. Call
|
||||||
* aiGetErrorString() to retrieve a human-readable error text.
|
* aiGetErrorString() to retrieve a human-readable error text.
|
||||||
* @param pFile Path and filename of the file to be imported,
|
* @param pFile Path and filename of the file to be imported,
|
||||||
* expected to be a null-terminated c-string. NULL is not a valid value.
|
* expected to be a null-terminated c-string. NULL is not a valid value.
|
||||||
* @param pFlags Optional post processing steps to be executed after
|
* @param pFlags Optional post processing steps to be executed after
|
||||||
* a successful import. Provide a bitwise combination of the
|
* a successful import. Provide a bitwise combination of the
|
||||||
* #aiPostProcessSteps flags.
|
* #aiPostProcessSteps flags.
|
||||||
* @return Pointer to the imported data or NULL if the import failed.
|
* @return Pointer to the imported data or NULL if the import failed.
|
||||||
*/
|
*/
|
||||||
ASSIMP_API const C_STRUCT aiScene* aiImportFile(
|
ASSIMP_API const C_STRUCT aiScene* aiImportFile(
|
||||||
const char* pFile,
|
const char* pFile,
|
||||||
unsigned int pFlags);
|
unsigned int pFlags);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Reads the given file using user-defined I/O functions and returns
|
/** Reads the given file using user-defined I/O functions and returns
|
||||||
* its content.
|
* its content.
|
||||||
*
|
*
|
||||||
* If the call succeeds, the imported data is returned in an aiScene structure.
|
* If the call succeeds, the imported data is returned in an aiScene structure.
|
||||||
* The data is intended to be read-only, it stays property of the ASSIMP
|
* The data is intended to be read-only, it stays property of the ASSIMP
|
||||||
* library and will be stable until aiReleaseImport() is called. After you're
|
* library and will be stable until aiReleaseImport() is called. After you're
|
||||||
* done with it, call aiReleaseImport() to free the resources associated with
|
* done with it, call aiReleaseImport() to free the resources associated with
|
||||||
* this file. If the import fails, NULL is returned instead. Call
|
* this file. If the import fails, NULL is returned instead. Call
|
||||||
* aiGetErrorString() to retrieve a human-readable error text.
|
* aiGetErrorString() to retrieve a human-readable error text.
|
||||||
* @param pFile Path and filename of the file to be imported,
|
* @param pFile Path and filename of the file to be imported,
|
||||||
* expected to be a null-terminated c-string. NULL is not a valid value.
|
* expected to be a null-terminated c-string. NULL is not a valid value.
|
||||||
* @param pFlags Optional post processing steps to be executed after
|
* @param pFlags Optional post processing steps to be executed after
|
||||||
* a successful import. Provide a bitwise combination of the
|
* a successful import. Provide a bitwise combination of the
|
||||||
* #aiPostProcessSteps flags.
|
* #aiPostProcessSteps flags.
|
||||||
* @param pFS aiFileIO structure. Will be used to open the model file itself
|
* @param pFS aiFileIO structure. Will be used to open the model file itself
|
||||||
* and any other files the loader needs to open. Pass NULL to use the default
|
* and any other files the loader needs to open. Pass NULL to use the default
|
||||||
* implementation.
|
* implementation.
|
||||||
* @return Pointer to the imported data or NULL if the import failed.
|
* @return Pointer to the imported data or NULL if the import failed.
|
||||||
* @note Include <aiFileIO.h> for the definition of #aiFileIO.
|
* @note Include <aiFileIO.h> for the definition of #aiFileIO.
|
||||||
*/
|
*/
|
||||||
ASSIMP_API const C_STRUCT aiScene* aiImportFileEx(
|
ASSIMP_API const C_STRUCT aiScene* aiImportFileEx(
|
||||||
const char* pFile,
|
const char* pFile,
|
||||||
unsigned int pFlags,
|
unsigned int pFlags,
|
||||||
C_STRUCT aiFileIO* pFS);
|
C_STRUCT aiFileIO* pFS);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Same as #aiImportFileEx, but adds an extra parameter containing importer settings.
|
/** Same as #aiImportFileEx, but adds an extra parameter containing importer settings.
|
||||||
*
|
*
|
||||||
* @param pProps #aiPropertyStore instance containing import settings.
|
* @param pFile Path and filename of the file to be imported,
|
||||||
|
* expected to be a null-terminated c-string. NULL is not a valid value.
|
||||||
|
* @param pFlags Optional post processing steps to be executed after
|
||||||
|
* a successful import. Provide a bitwise combination of the
|
||||||
|
* #aiPostProcessSteps flags.
|
||||||
|
* @param pFS aiFileIO structure. Will be used to open the model file itself
|
||||||
|
* and any other files the loader needs to open. Pass NULL to use the default
|
||||||
|
* implementation.
|
||||||
|
* @param pProps #aiPropertyStore instance containing import settings.
|
||||||
|
* @return Pointer to the imported data or NULL if the import failed.
|
||||||
|
* @note Include <aiFileIO.h> for the definition of #aiFileIO.
|
||||||
* @see aiImportFileEx
|
* @see aiImportFileEx
|
||||||
*/
|
*/
|
||||||
ASSIMP_API const C_STRUCT aiScene* aiImportFileExWithProperties(
|
ASSIMP_API const C_STRUCT aiScene* aiImportFileExWithProperties(
|
||||||
const char* pFile,
|
const char* pFile,
|
||||||
unsigned int pFlags,
|
unsigned int pFlags,
|
||||||
C_STRUCT aiFileIO* pFS,
|
C_STRUCT aiFileIO* pFS,
|
||||||
const C_STRUCT aiPropertyStore* pProps);
|
const C_STRUCT aiPropertyStore* pProps);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Reads the given file from a given memory buffer,
|
/** Reads the given file from a given memory buffer,
|
||||||
*
|
*
|
||||||
* If the call succeeds, the contents of the file are returned as a pointer to an
|
* If the call succeeds, the contents of the file are returned as a pointer to an
|
||||||
* aiScene object. The returned data is intended to be read-only, the importer keeps
|
* aiScene object. The returned data is intended to be read-only, the importer keeps
|
||||||
* ownership of the data and will destroy it upon destruction. If the import fails,
|
* ownership of the data and will destroy it upon destruction. If the import fails,
|
||||||
* NULL is returned.
|
* NULL is returned.
|
||||||
* A human-readable error description can be retrieved by calling aiGetErrorString().
|
* A human-readable error description can be retrieved by calling aiGetErrorString().
|
||||||
* @param pBuffer Pointer to the file data
|
* @param pBuffer Pointer to the file data
|
||||||
* @param pLength Length of pBuffer, in bytes
|
* @param pLength Length of pBuffer, in bytes
|
||||||
* @param pFlags Optional post processing steps to be executed after
|
* @param pFlags Optional post processing steps to be executed after
|
||||||
* a successful import. Provide a bitwise combination of the
|
* a successful import. Provide a bitwise combination of the
|
||||||
* #aiPostProcessSteps flags. If you wish to inspect the imported
|
* #aiPostProcessSteps flags. If you wish to inspect the imported
|
||||||
* scene first in order to fine-tune your post-processing setup,
|
* scene first in order to fine-tune your post-processing setup,
|
||||||
* consider to use #aiApplyPostProcessing().
|
* consider to use #aiApplyPostProcessing().
|
||||||
* @param pHint An additional hint to the library. If this is a non empty string,
|
* @param pHint An additional hint to the library. If this is a non empty string,
|
||||||
* the library looks for a loader to support the file extension specified by pHint
|
* the library looks for a loader to support the file extension specified by pHint
|
||||||
* and passes the file to the first matching loader. If this loader is unable to
|
* and passes the file to the first matching loader. If this loader is unable to
|
||||||
* completely the request, the library continues and tries to determine the file
|
* completely the request, the library continues and tries to determine the file
|
||||||
* format on its own, a task that may or may not be successful.
|
* format on its own, a task that may or may not be successful.
|
||||||
* Check the return value, and you'll know ...
|
* Check the return value, and you'll know ...
|
||||||
* @return A pointer to the imported data, NULL if the import failed.
|
* @return A pointer to the imported data, NULL if the import failed.
|
||||||
*
|
*
|
||||||
* @note This is a straightforward way to decode models from memory
|
* @note This is a straightforward way to decode models from memory
|
||||||
* buffers, but it doesn't handle model formats that spread their
|
* buffers, but it doesn't handle model formats that spread their
|
||||||
* data across multiple files or even directories. Examples include
|
* data across multiple files or even directories. Examples include
|
||||||
* OBJ or MD3, which outsource parts of their material info into
|
* OBJ or MD3, which outsource parts of their material info into
|
||||||
* external scripts. If you need full functionality, provide
|
* external scripts. If you need full functionality, provide
|
||||||
* a custom IOSystem to make Assimp find these files and use
|
* a custom IOSystem to make Assimp find these files and use
|
||||||
* the regular aiImportFileEx()/aiImportFileExWithProperties() API.
|
* the regular aiImportFileEx()/aiImportFileExWithProperties() API.
|
||||||
*/
|
*/
|
||||||
ASSIMP_API const C_STRUCT aiScene* aiImportFileFromMemory(
|
ASSIMP_API const C_STRUCT aiScene* aiImportFileFromMemory(
|
||||||
const char* pBuffer,
|
const char* pBuffer,
|
||||||
unsigned int pLength,
|
unsigned int pLength,
|
||||||
unsigned int pFlags,
|
unsigned int pFlags,
|
||||||
const char* pHint);
|
const char* pHint);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Same as #aiImportFileFromMemory, but adds an extra parameter containing importer settings.
|
/** Same as #aiImportFileFromMemory, but adds an extra parameter containing importer settings.
|
||||||
*
|
*
|
||||||
* @param pProps #aiPropertyStore instance containing import settings.
|
* @param pBuffer Pointer to the file data
|
||||||
|
* @param pLength Length of pBuffer, in bytes
|
||||||
|
* @param pFlags Optional post processing steps to be executed after
|
||||||
|
* a successful import. Provide a bitwise combination of the
|
||||||
|
* #aiPostProcessSteps flags. If you wish to inspect the imported
|
||||||
|
* scene first in order to fine-tune your post-processing setup,
|
||||||
|
* consider to use #aiApplyPostProcessing().
|
||||||
|
* @param pHint An additional hint to the library. If this is a non empty string,
|
||||||
|
* the library looks for a loader to support the file extension specified by pHint
|
||||||
|
* and passes the file to the first matching loader. If this loader is unable to
|
||||||
|
* completely the request, the library continues and tries to determine the file
|
||||||
|
* format on its own, a task that may or may not be successful.
|
||||||
|
* Check the return value, and you'll know ...
|
||||||
|
* @param pProps #aiPropertyStore instance containing import settings.
|
||||||
|
* @return A pointer to the imported data, NULL if the import failed.
|
||||||
|
*
|
||||||
|
* @note This is a straightforward way to decode models from memory
|
||||||
|
* buffers, but it doesn't handle model formats that spread their
|
||||||
|
* data across multiple files or even directories. Examples include
|
||||||
|
* OBJ or MD3, which outsource parts of their material info into
|
||||||
|
* external scripts. If you need full functionality, provide
|
||||||
|
* a custom IOSystem to make Assimp find these files and use
|
||||||
|
* the regular aiImportFileEx()/aiImportFileExWithProperties() API.
|
||||||
* @see aiImportFileFromMemory
|
* @see aiImportFileFromMemory
|
||||||
*/
|
*/
|
||||||
ASSIMP_API const C_STRUCT aiScene* aiImportFileFromMemoryWithProperties(
|
ASSIMP_API const C_STRUCT aiScene* aiImportFileFromMemoryWithProperties(
|
||||||
const char* pBuffer,
|
const char* pBuffer,
|
||||||
unsigned int pLength,
|
unsigned int pLength,
|
||||||
unsigned int pFlags,
|
unsigned int pFlags,
|
||||||
const char* pHint,
|
const char* pHint,
|
||||||
const C_STRUCT aiPropertyStore* pProps);
|
const C_STRUCT aiPropertyStore* pProps);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Apply post-processing to an already-imported scene.
|
/** Apply post-processing to an already-imported scene.
|
||||||
*
|
*
|
||||||
* This is strictly equivalent to calling #aiImportFile()/#aiImportFileEx with the
|
* This is strictly equivalent to calling #aiImportFile()/#aiImportFileEx with the
|
||||||
* same flags. However, you can use this separate function to inspect the imported
|
* same flags. However, you can use this separate function to inspect the imported
|
||||||
* scene first to fine-tune your post-processing setup.
|
* scene first to fine-tune your post-processing setup.
|
||||||
* @param pScene Scene to work on.
|
* @param pScene Scene to work on.
|
||||||
* @param pFlags Provide a bitwise combination of the #aiPostProcessSteps flags.
|
* @param pFlags Provide a bitwise combination of the #aiPostProcessSteps flags.
|
||||||
* @return A pointer to the post-processed data. Post processing is done in-place,
|
* @return A pointer to the post-processed data. Post processing is done in-place,
|
||||||
* meaning this is still the same #aiScene which you passed for pScene. However,
|
* meaning this is still the same #aiScene which you passed for pScene. However,
|
||||||
* _if_ post-processing failed, the scene could now be NULL. That's quite a rare
|
* _if_ post-processing failed, the scene could now be NULL. That's quite a rare
|
||||||
* case, post processing steps are not really designed to 'fail'. To be exact,
|
* case, post processing steps are not really designed to 'fail'. To be exact,
|
||||||
* the #aiProcess_ValidateDS flag is currently the only post processing step
|
* the #aiProcess_ValidateDataStructure flag is currently the only post processing step
|
||||||
* which can actually cause the scene to be reset to NULL.
|
* which can actually cause the scene to be reset to NULL.
|
||||||
*/
|
*/
|
||||||
ASSIMP_API const C_STRUCT aiScene* aiApplyPostProcessing(
|
ASSIMP_API const C_STRUCT aiScene* aiApplyPostProcessing(
|
||||||
const C_STRUCT aiScene* pScene,
|
const C_STRUCT aiScene* pScene,
|
||||||
unsigned int pFlags);
|
unsigned int pFlags);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Get one of the predefine log streams. This is the quick'n'easy solution to
|
/** Get one of the predefine log streams. This is the quick'n'easy solution to
|
||||||
* access Assimp's log system. Attaching a log stream can slightly reduce Assimp's
|
* access Assimp's log system. Attaching a log stream can slightly reduce Assimp's
|
||||||
* overall import performance.
|
* overall import performance.
|
||||||
*
|
*
|
||||||
* Usage is rather simple (this will stream the log to a file, named log.txt, and
|
* Usage is rather simple (this will stream the log to a file, named log.txt, and
|
||||||
* the stdout stream of the process:
|
* the stdout stream of the process:
|
||||||
@@ -232,27 +265,27 @@ ASSIMP_API const C_STRUCT aiScene* aiApplyPostProcessing(
|
|||||||
* aiAttachLogStream(&c);
|
* aiAttachLogStream(&c);
|
||||||
* @endcode
|
* @endcode
|
||||||
*
|
*
|
||||||
* @param pStreams One of the #aiDefaultLogStream enumerated values.
|
* @param pStreams One of the #aiDefaultLogStream enumerated values.
|
||||||
* @param file Solely for the #aiDefaultLogStream_FILE flag: specifies the file to write to.
|
* @param file Solely for the #aiDefaultLogStream_FILE flag: specifies the file to write to.
|
||||||
* Pass NULL for all other flags.
|
* Pass NULL for all other flags.
|
||||||
* @return The log stream. callback is set to NULL if something went wrong.
|
* @return The log stream. callback is set to NULL if something went wrong.
|
||||||
*/
|
*/
|
||||||
ASSIMP_API C_STRUCT aiLogStream aiGetPredefinedLogStream(
|
ASSIMP_API C_STRUCT aiLogStream aiGetPredefinedLogStream(
|
||||||
C_ENUM aiDefaultLogStream pStreams,
|
C_ENUM aiDefaultLogStream pStreams,
|
||||||
const char* file);
|
const char* file);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Attach a custom log stream to the libraries' logging system.
|
/** Attach a custom log stream to the libraries' logging system.
|
||||||
*
|
*
|
||||||
* Attaching a log stream can slightly reduce Assimp's overall import
|
* Attaching a log stream can slightly reduce Assimp's overall import
|
||||||
* performance. Multiple log-streams can be attached.
|
* performance. Multiple log-streams can be attached.
|
||||||
* @param stream Describes the new log stream.
|
* @param stream Describes the new log stream.
|
||||||
* @note To ensure proepr destruction of the logging system, you need to manually
|
* @note To ensure proper destruction of the logging system, you need to manually
|
||||||
* call aiDetachLogStream() on every single log stream you attach.
|
* call aiDetachLogStream() on every single log stream you attach.
|
||||||
* Alternatively (for the lazy folks) #aiDetachAllLogStreams is provided.
|
* Alternatively (for the lazy folks) #aiDetachAllLogStreams is provided.
|
||||||
*/
|
*/
|
||||||
ASSIMP_API void aiAttachLogStream(
|
ASSIMP_API void aiAttachLogStream(
|
||||||
const C_STRUCT aiLogStream* stream);
|
const C_STRUCT aiLogStream* stream);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Enable verbose logging. Verbose logging includes debug-related stuff and
|
/** Enable verbose logging. Verbose logging includes debug-related stuff and
|
||||||
@@ -266,14 +299,14 @@ ASSIMP_API void aiEnableVerboseLogging(aiBool d);
|
|||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Detach a custom log stream from the libraries' logging system.
|
/** Detach a custom log stream from the libraries' logging system.
|
||||||
*
|
*
|
||||||
* This is the counterpart of #aiAttachPredefinedLogStream. If you attached a stream,
|
* This is the counterpart of #aiAttachLogStream. If you attached a stream,
|
||||||
* don't forget to detach it again.
|
* don't forget to detach it again.
|
||||||
* @param stream The log stream to be detached.
|
* @param stream The log stream to be detached.
|
||||||
* @return AI_SUCCESS if the log stream has been detached successfully.
|
* @return AI_SUCCESS if the log stream has been detached successfully.
|
||||||
* @see aiDetachAllLogStreams
|
* @see aiDetachAllLogStreams
|
||||||
*/
|
*/
|
||||||
ASSIMP_API C_ENUM aiReturn aiDetachLogStream(
|
ASSIMP_API C_ENUM aiReturn aiDetachLogStream(
|
||||||
const C_STRUCT aiLogStream* stream);
|
const C_STRUCT aiLogStream* stream);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Detach all active log streams from the libraries' logging system.
|
/** Detach all active log streams from the libraries' logging system.
|
||||||
@@ -291,11 +324,11 @@ ASSIMP_API void aiDetachAllLogStreams(void);
|
|||||||
* Call this function after you're done with the imported data.
|
* Call this function after you're done with the imported data.
|
||||||
* @param pScene The imported data to release. NULL is a valid value.
|
* @param pScene The imported data to release. NULL is a valid value.
|
||||||
*/
|
*/
|
||||||
ASSIMP_API void aiReleaseImport(
|
ASSIMP_API void aiReleaseImport(
|
||||||
const C_STRUCT aiScene* pScene);
|
const C_STRUCT aiScene* pScene);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Returns the error text of the last failed import process.
|
/** Returns the error text of the last failed import process.
|
||||||
*
|
*
|
||||||
* @return A textual description of the error that occurred at the last
|
* @return A textual description of the error that occurred at the last
|
||||||
* import process. NULL if there was no error. There can't be an error if you
|
* import process. NULL if there was no error. There can't be an error if you
|
||||||
@@ -311,7 +344,7 @@ ASSIMP_API const char* aiGetErrorString();
|
|||||||
* @return AI_TRUE if the file extension is supported.
|
* @return AI_TRUE if the file extension is supported.
|
||||||
*/
|
*/
|
||||||
ASSIMP_API aiBool aiIsExtensionSupported(
|
ASSIMP_API aiBool aiIsExtensionSupported(
|
||||||
const char* szExtension);
|
const char* szExtension);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Get a list of all file extensions supported by ASSIMP.
|
/** Get a list of all file extensions supported by ASSIMP.
|
||||||
@@ -322,16 +355,16 @@ ASSIMP_API aiBool aiIsExtensionSupported(
|
|||||||
* Format of the list: "*.3ds;*.obj;*.dae". NULL is not a valid parameter.
|
* Format of the list: "*.3ds;*.obj;*.dae". NULL is not a valid parameter.
|
||||||
*/
|
*/
|
||||||
ASSIMP_API void aiGetExtensionList(
|
ASSIMP_API void aiGetExtensionList(
|
||||||
C_STRUCT aiString* szOut);
|
C_STRUCT aiString* szOut);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Get the approximated storage required by an imported asset
|
/** Get the approximated storage required by an imported asset
|
||||||
* @param pIn Input asset.
|
* @param pIn Input asset.
|
||||||
* @param in Data structure to be filled.
|
* @param in Data structure to be filled.
|
||||||
*/
|
*/
|
||||||
ASSIMP_API void aiGetMemoryRequirements(
|
ASSIMP_API void aiGetMemoryRequirements(
|
||||||
const C_STRUCT aiScene* pIn,
|
const C_STRUCT aiScene* pIn,
|
||||||
C_STRUCT aiMemoryInfo* in);
|
C_STRUCT aiMemoryInfo* in);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -350,70 +383,72 @@ ASSIMP_API C_STRUCT aiPropertyStore* aiCreatePropertyStore(void);
|
|||||||
ASSIMP_API void aiReleasePropertyStore(C_STRUCT aiPropertyStore* p);
|
ASSIMP_API void aiReleasePropertyStore(C_STRUCT aiPropertyStore* p);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Set an integer property.
|
/** Set an integer property.
|
||||||
*
|
*
|
||||||
* This is the C-version of #Assimp::Importer::SetPropertyInteger(). In the C
|
* This is the C-version of #Assimp::Importer::SetPropertyInteger(). In the C
|
||||||
* interface, properties are always shared by all imports. It is not possible to
|
* interface, properties are always shared by all imports. It is not possible to
|
||||||
* specify them per import.
|
* specify them per import.
|
||||||
*
|
*
|
||||||
* @param szName Name of the configuration property to be set. All supported
|
* @param store Store to modify. Use #aiCreatePropertyStore to obtain a store.
|
||||||
* public properties are defined in the config.h header file (#AI_CONFIG_XXX).
|
* @param szName Name of the configuration property to be set. All supported
|
||||||
|
* public properties are defined in the config.h header file (AI_CONFIG_XXX).
|
||||||
* @param value New value for the property
|
* @param value New value for the property
|
||||||
*/
|
*/
|
||||||
ASSIMP_API void aiSetImportPropertyInteger(
|
ASSIMP_API void aiSetImportPropertyInteger(
|
||||||
C_STRUCT aiPropertyStore* store,
|
C_STRUCT aiPropertyStore* store,
|
||||||
const char* szName,
|
const char* szName,
|
||||||
int value);
|
int value);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Set a floating-point property.
|
/** Set a floating-point property.
|
||||||
*
|
*
|
||||||
* This is the C-version of #Assimp::Importer::SetPropertyFloat(). In the C
|
* This is the C-version of #Assimp::Importer::SetPropertyFloat(). In the C
|
||||||
* interface, properties are always shared by all imports. It is not possible to
|
* interface, properties are always shared by all imports. It is not possible to
|
||||||
* specify them per import.
|
* specify them per import.
|
||||||
*
|
*
|
||||||
* @param szName Name of the configuration property to be set. All supported
|
* @param store Store to modify. Use #aiCreatePropertyStore to obtain a store.
|
||||||
* public properties are defined in the config.h header file (#AI_CONFIG_XXX).
|
* @param szName Name of the configuration property to be set. All supported
|
||||||
|
* public properties are defined in the config.h header file (AI_CONFIG_XXX).
|
||||||
* @param value New value for the property
|
* @param value New value for the property
|
||||||
*/
|
*/
|
||||||
ASSIMP_API void aiSetImportPropertyFloat(
|
ASSIMP_API void aiSetImportPropertyFloat(
|
||||||
C_STRUCT aiPropertyStore* store,
|
C_STRUCT aiPropertyStore* store,
|
||||||
const char* szName,
|
const char* szName,
|
||||||
float value);
|
float value);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Set a string property.
|
/** Set a string property.
|
||||||
*
|
*
|
||||||
* This is the C-version of #Assimp::Importer::SetPropertyString(). In the C
|
* This is the C-version of #Assimp::Importer::SetPropertyString(). In the C
|
||||||
* interface, properties are always shared by all imports. It is not possible to
|
* interface, properties are always shared by all imports. It is not possible to
|
||||||
* specify them per import.
|
* specify them per import.
|
||||||
*
|
*
|
||||||
* @param property store to modify. Use #aiCreatePropertyStore to obtain a store.
|
* @param store Store to modify. Use #aiCreatePropertyStore to obtain a store.
|
||||||
* @param szName Name of the configuration property to be set. All supported
|
* @param szName Name of the configuration property to be set. All supported
|
||||||
* public properties are defined in the config.h header file (#AI_CONFIG_XXX).
|
* public properties are defined in the config.h header file (AI_CONFIG_XXX).
|
||||||
* @param value New value for the property
|
* @param st New value for the property
|
||||||
*/
|
*/
|
||||||
ASSIMP_API void aiSetImportPropertyString(
|
ASSIMP_API void aiSetImportPropertyString(
|
||||||
C_STRUCT aiPropertyStore* store,
|
C_STRUCT aiPropertyStore* store,
|
||||||
const char* szName,
|
const char* szName,
|
||||||
const C_STRUCT aiString* st);
|
const C_STRUCT aiString* st);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Set a matrix property.
|
/** Set a matrix property.
|
||||||
*
|
*
|
||||||
* This is the C-version of #Assimp::Importer::SetPropertyMatrix(). In the C
|
* This is the C-version of #Assimp::Importer::SetPropertyMatrix(). In the C
|
||||||
* interface, properties are always shared by all imports. It is not possible to
|
* interface, properties are always shared by all imports. It is not possible to
|
||||||
* specify them per import.
|
* specify them per import.
|
||||||
*
|
*
|
||||||
* @param property store to modify. Use #aiCreatePropertyStore to obtain a store.
|
* @param store Store to modify. Use #aiCreatePropertyStore to obtain a store.
|
||||||
* @param szName Name of the configuration property to be set. All supported
|
* @param szName Name of the configuration property to be set. All supported
|
||||||
* public properties are defined in the config.h header file (#AI_CONFIG_XXX).
|
* public properties are defined in the config.h header file (AI_CONFIG_XXX).
|
||||||
* @param value New value for the property
|
* @param mat New value for the property
|
||||||
*/
|
*/
|
||||||
ASSIMP_API void aiSetImportPropertyMatrix(
|
ASSIMP_API void aiSetImportPropertyMatrix(
|
||||||
C_STRUCT aiPropertyStore* store,
|
C_STRUCT aiPropertyStore* store,
|
||||||
const char* szName,
|
const char* szName,
|
||||||
const C_STRUCT aiMatrix4x4* mat);
|
const C_STRUCT aiMatrix4x4* mat);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Construct a quaternion from a 3x3 rotation matrix.
|
/** Construct a quaternion from a 3x3 rotation matrix.
|
||||||
@@ -422,13 +457,13 @@ ASSIMP_API void aiSetImportPropertyMatrix(
|
|||||||
* @see aiQuaternion(const aiMatrix3x3& pRotMatrix)
|
* @see aiQuaternion(const aiMatrix3x3& pRotMatrix)
|
||||||
*/
|
*/
|
||||||
ASSIMP_API void aiCreateQuaternionFromMatrix(
|
ASSIMP_API void aiCreateQuaternionFromMatrix(
|
||||||
C_STRUCT aiQuaternion* quat,
|
C_STRUCT aiQuaternion* quat,
|
||||||
const C_STRUCT aiMatrix3x3* mat);
|
const C_STRUCT aiMatrix3x3* mat);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Decompose a transformation matrix into its rotational, translational and
|
/** Decompose a transformation matrix into its rotational, translational and
|
||||||
* scaling components.
|
* scaling components.
|
||||||
*
|
*
|
||||||
* @param mat Matrix to decompose
|
* @param mat Matrix to decompose
|
||||||
* @param scaling Receives the scaling component
|
* @param scaling Receives the scaling component
|
||||||
* @param rotation Receives the rotational component
|
* @param rotation Receives the rotational component
|
||||||
@@ -436,24 +471,24 @@ ASSIMP_API void aiCreateQuaternionFromMatrix(
|
|||||||
* @see aiMatrix4x4::Decompose (aiVector3D&, aiQuaternion&, aiVector3D&) const;
|
* @see aiMatrix4x4::Decompose (aiVector3D&, aiQuaternion&, aiVector3D&) const;
|
||||||
*/
|
*/
|
||||||
ASSIMP_API void aiDecomposeMatrix(
|
ASSIMP_API void aiDecomposeMatrix(
|
||||||
const C_STRUCT aiMatrix4x4* mat,
|
const C_STRUCT aiMatrix4x4* mat,
|
||||||
C_STRUCT aiVector3D* scaling,
|
C_STRUCT aiVector3D* scaling,
|
||||||
C_STRUCT aiQuaternion* rotation,
|
C_STRUCT aiQuaternion* rotation,
|
||||||
C_STRUCT aiVector3D* position);
|
C_STRUCT aiVector3D* position);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Transpose a 4x4 matrix.
|
/** Transpose a 4x4 matrix.
|
||||||
* @param mat Pointer to the matrix to be transposed
|
* @param mat Pointer to the matrix to be transposed
|
||||||
*/
|
*/
|
||||||
ASSIMP_API void aiTransposeMatrix4(
|
ASSIMP_API void aiTransposeMatrix4(
|
||||||
C_STRUCT aiMatrix4x4* mat);
|
C_STRUCT aiMatrix4x4* mat);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Transpose a 3x3 matrix.
|
/** Transpose a 3x3 matrix.
|
||||||
* @param mat Pointer to the matrix to be transposed
|
* @param mat Pointer to the matrix to be transposed
|
||||||
*/
|
*/
|
||||||
ASSIMP_API void aiTransposeMatrix3(
|
ASSIMP_API void aiTransposeMatrix3(
|
||||||
C_STRUCT aiMatrix3x3* mat);
|
C_STRUCT aiMatrix3x3* mat);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Transform a vector by a 3x3 matrix
|
/** Transform a vector by a 3x3 matrix
|
||||||
@@ -461,8 +496,8 @@ ASSIMP_API void aiTransposeMatrix3(
|
|||||||
* @param mat Matrix to transform the vector with.
|
* @param mat Matrix to transform the vector with.
|
||||||
*/
|
*/
|
||||||
ASSIMP_API void aiTransformVecByMatrix3(
|
ASSIMP_API void aiTransformVecByMatrix3(
|
||||||
C_STRUCT aiVector3D* vec,
|
C_STRUCT aiVector3D* vec,
|
||||||
const C_STRUCT aiMatrix3x3* mat);
|
const C_STRUCT aiMatrix3x3* mat);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Transform a vector by a 4x4 matrix
|
/** Transform a vector by a 4x4 matrix
|
||||||
@@ -470,8 +505,8 @@ ASSIMP_API void aiTransformVecByMatrix3(
|
|||||||
* @param mat Matrix to transform the vector with.
|
* @param mat Matrix to transform the vector with.
|
||||||
*/
|
*/
|
||||||
ASSIMP_API void aiTransformVecByMatrix4(
|
ASSIMP_API void aiTransformVecByMatrix4(
|
||||||
C_STRUCT aiVector3D* vec,
|
C_STRUCT aiVector3D* vec,
|
||||||
const C_STRUCT aiMatrix4x4* mat);
|
const C_STRUCT aiMatrix4x4* mat);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Multiply two 4x4 matrices.
|
/** Multiply two 4x4 matrices.
|
||||||
@@ -479,8 +514,8 @@ ASSIMP_API void aiTransformVecByMatrix4(
|
|||||||
* @param src Matrix to be multiplied with 'dst'.
|
* @param src Matrix to be multiplied with 'dst'.
|
||||||
*/
|
*/
|
||||||
ASSIMP_API void aiMultiplyMatrix4(
|
ASSIMP_API void aiMultiplyMatrix4(
|
||||||
C_STRUCT aiMatrix4x4* dst,
|
C_STRUCT aiMatrix4x4* dst,
|
||||||
const C_STRUCT aiMatrix4x4* src);
|
const C_STRUCT aiMatrix4x4* src);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Multiply two 3x3 matrices.
|
/** Multiply two 3x3 matrices.
|
||||||
@@ -488,24 +523,37 @@ ASSIMP_API void aiMultiplyMatrix4(
|
|||||||
* @param src Matrix to be multiplied with 'dst'.
|
* @param src Matrix to be multiplied with 'dst'.
|
||||||
*/
|
*/
|
||||||
ASSIMP_API void aiMultiplyMatrix3(
|
ASSIMP_API void aiMultiplyMatrix3(
|
||||||
C_STRUCT aiMatrix3x3* dst,
|
C_STRUCT aiMatrix3x3* dst,
|
||||||
const C_STRUCT aiMatrix3x3* src);
|
const C_STRUCT aiMatrix3x3* src);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Get a 3x3 identity matrix.
|
/** Get a 3x3 identity matrix.
|
||||||
* @param mat Matrix to receive its personal identity
|
* @param mat Matrix to receive its personal identity
|
||||||
*/
|
*/
|
||||||
ASSIMP_API void aiIdentityMatrix3(
|
ASSIMP_API void aiIdentityMatrix3(
|
||||||
C_STRUCT aiMatrix3x3* mat);
|
C_STRUCT aiMatrix3x3* mat);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Get a 4x4 identity matrix.
|
/** Get a 4x4 identity matrix.
|
||||||
* @param mat Matrix to receive its personal identity
|
* @param mat Matrix to receive its personal identity
|
||||||
*/
|
*/
|
||||||
ASSIMP_API void aiIdentityMatrix4(
|
ASSIMP_API void aiIdentityMatrix4(
|
||||||
C_STRUCT aiMatrix4x4* mat);
|
C_STRUCT aiMatrix4x4* mat);
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------------
|
||||||
|
/** Returns the number of import file formats available in the current Assimp build.
|
||||||
|
* Use aiGetImportFormatDescription() to retrieve infos of a specific import format.
|
||||||
|
*/
|
||||||
|
ASSIMP_API size_t aiGetImportFormatCount(void);
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------------
|
||||||
|
/** Returns a description of the nth import file format. Use #aiGetImportFormatCount()
|
||||||
|
* to learn how many import formats are supported.
|
||||||
|
* @param pIndex Index of the import format to retrieve information for. Valid range is
|
||||||
|
* 0 to #aiGetImportFormatCount()
|
||||||
|
* @return A description of that specific import format. NULL if pIndex is out of range.
|
||||||
|
*/
|
||||||
|
ASSIMP_API const C_STRUCT aiImporterDesc* aiGetImportFormatDescription( size_t pIndex);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,20 +25,20 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
/** @file aiColor4D.h
|
/** @file color4.h
|
||||||
* @brief RGBA color structure, including operators when compiling in C++
|
* @brief RGBA color structure, including operators when compiling in C++
|
||||||
*/
|
*/
|
||||||
#ifndef AI_COLOR4D_H_INC
|
#ifndef AI_COLOR4D_H_INC
|
||||||
@@ -49,44 +49,44 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
/** Represents a color in Red-Green-Blue space including an
|
/** Represents a color in Red-Green-Blue space including an
|
||||||
* alpha component. Color values range from 0 to 1. */
|
* alpha component. Color values range from 0 to 1. */
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
class aiColor4t
|
class aiColor4t
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
aiColor4t () : r(), g(), b(), a() {}
|
aiColor4t () : r(), g(), b(), a() {}
|
||||||
aiColor4t (TReal _r, TReal _g, TReal _b, TReal _a)
|
aiColor4t (TReal _r, TReal _g, TReal _b, TReal _a)
|
||||||
: r(_r), g(_g), b(_b), a(_a) {}
|
: r(_r), g(_g), b(_b), a(_a) {}
|
||||||
aiColor4t (TReal _r) : r(_r), g(_r), b(_r), a(_r) {}
|
explicit aiColor4t (TReal _r) : r(_r), g(_r), b(_r), a(_r) {}
|
||||||
aiColor4t (const aiColor4t& o)
|
aiColor4t (const aiColor4t& o)
|
||||||
: r(o.r), g(o.g), b(o.b), a(o.a) {}
|
: r(o.r), g(o.g), b(o.b), a(o.a) {}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// combined operators
|
// combined operators
|
||||||
const aiColor4t& operator += (const aiColor4t& o);
|
const aiColor4t& operator += (const aiColor4t& o);
|
||||||
const aiColor4t& operator -= (const aiColor4t& o);
|
const aiColor4t& operator -= (const aiColor4t& o);
|
||||||
const aiColor4t& operator *= (TReal f);
|
const aiColor4t& operator *= (TReal f);
|
||||||
const aiColor4t& operator /= (TReal f);
|
const aiColor4t& operator /= (TReal f);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// comparison
|
// comparison
|
||||||
bool operator == (const aiColor4t& other) const;
|
bool operator == (const aiColor4t& other) const;
|
||||||
bool operator != (const aiColor4t& other) const;
|
bool operator != (const aiColor4t& other) const;
|
||||||
bool operator < (const aiColor4t& other) const;
|
bool operator < (const aiColor4t& other) const;
|
||||||
|
|
||||||
// color tuple access, rgba order
|
// color tuple access, rgba order
|
||||||
inline TReal operator[](unsigned int i) const;
|
inline TReal operator[](unsigned int i) const;
|
||||||
inline TReal& operator[](unsigned int i);
|
inline TReal& operator[](unsigned int i);
|
||||||
|
|
||||||
/** check whether a color is (close to) black */
|
/** check whether a color is (close to) black */
|
||||||
inline bool IsBlack() const;
|
inline bool IsBlack() const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// Red, green, blue and alpha color values
|
// Red, green, blue and alpha color values
|
||||||
TReal r, g, b, a;
|
TReal r, g, b, a;
|
||||||
} PACK_STRUCT; // !struct aiColor4D
|
} PACK_STRUCT; // !struct aiColor4D
|
||||||
|
|
||||||
typedef aiColor4t<float> aiColor4D;
|
typedef aiColor4t<float> aiColor4D;
|
||||||
@@ -94,7 +94,7 @@ typedef aiColor4t<float> aiColor4D;
|
|||||||
#else
|
#else
|
||||||
|
|
||||||
struct aiColor4D {
|
struct aiColor4D {
|
||||||
float r, g, b, a;
|
float r, g, b, a;
|
||||||
} PACK_STRUCT;
|
} PACK_STRUCT;
|
||||||
|
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,21 +25,21 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @file aiColor4D.inl
|
/** @file color4.inl
|
||||||
* @brief Inline implementation of aiColor4t<TReal> operators
|
* @brief Inline implementation of aiColor4t<TReal> operators
|
||||||
*/
|
*/
|
||||||
#ifndef AI_COLOR4D_INL_INC
|
#ifndef AI_COLOR4D_INL_INC
|
||||||
@@ -51,131 +51,131 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE const aiColor4t<TReal>& aiColor4t<TReal>::operator += (const aiColor4t<TReal>& o) {
|
AI_FORCE_INLINE const aiColor4t<TReal>& aiColor4t<TReal>::operator += (const aiColor4t<TReal>& o) {
|
||||||
r += o.r; g += o.g; b += o.b; a += o.a;
|
r += o.r; g += o.g; b += o.b; a += o.a;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE const aiColor4t<TReal>& aiColor4t<TReal>::operator -= (const aiColor4t<TReal>& o) {
|
AI_FORCE_INLINE const aiColor4t<TReal>& aiColor4t<TReal>::operator -= (const aiColor4t<TReal>& o) {
|
||||||
r -= o.r; g -= o.g; b -= o.b; a -= o.a;
|
r -= o.r; g -= o.g; b -= o.b; a -= o.a;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE const aiColor4t<TReal>& aiColor4t<TReal>::operator *= (TReal f) {
|
AI_FORCE_INLINE const aiColor4t<TReal>& aiColor4t<TReal>::operator *= (TReal f) {
|
||||||
r *= f; g *= f; b *= f; a *= f;
|
r *= f; g *= f; b *= f; a *= f;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE const aiColor4t<TReal>& aiColor4t<TReal>::operator /= (TReal f) {
|
AI_FORCE_INLINE const aiColor4t<TReal>& aiColor4t<TReal>::operator /= (TReal f) {
|
||||||
r /= f; g /= f; b /= f; a /= f;
|
r /= f; g /= f; b /= f; a /= f;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE TReal aiColor4t<TReal>::operator[](unsigned int i) const {
|
AI_FORCE_INLINE TReal aiColor4t<TReal>::operator[](unsigned int i) const {
|
||||||
return *(&r + i);
|
return *(&r + i);
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE TReal& aiColor4t<TReal>::operator[](unsigned int i) {
|
AI_FORCE_INLINE TReal& aiColor4t<TReal>::operator[](unsigned int i) {
|
||||||
return *(&r + i);
|
return *(&r + i);
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE bool aiColor4t<TReal>::operator== (const aiColor4t<TReal>& other) const {
|
AI_FORCE_INLINE bool aiColor4t<TReal>::operator== (const aiColor4t<TReal>& other) const {
|
||||||
return r == other.r && g == other.g && b == other.b && a == other.a;
|
return r == other.r && g == other.g && b == other.b && a == other.a;
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE bool aiColor4t<TReal>::operator!= (const aiColor4t<TReal>& other) const {
|
AI_FORCE_INLINE bool aiColor4t<TReal>::operator!= (const aiColor4t<TReal>& other) const {
|
||||||
return r != other.r || g != other.g || b != other.b || a != other.a;
|
return r != other.r || g != other.g || b != other.b || a != other.a;
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE bool aiColor4t<TReal>::operator< (const aiColor4t<TReal>& other) const {
|
AI_FORCE_INLINE bool aiColor4t<TReal>::operator< (const aiColor4t<TReal>& other) const {
|
||||||
return r < other.r || (
|
return r < other.r || (
|
||||||
r == other.r && (
|
r == other.r && (
|
||||||
g < other.g || (
|
g < other.g || (
|
||||||
g == other.g && (
|
g == other.g && (
|
||||||
b < other.b || (
|
b < other.b || (
|
||||||
b == other.b && (
|
b == other.b && (
|
||||||
a < other.a
|
a < other.a
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE aiColor4t<TReal> operator + (const aiColor4t<TReal>& v1, const aiColor4t<TReal>& v2) {
|
AI_FORCE_INLINE aiColor4t<TReal> operator + (const aiColor4t<TReal>& v1, const aiColor4t<TReal>& v2) {
|
||||||
return aiColor4t<TReal>( v1.r + v2.r, v1.g + v2.g, v1.b + v2.b, v1.a + v2.a);
|
return aiColor4t<TReal>( v1.r + v2.r, v1.g + v2.g, v1.b + v2.b, v1.a + v2.a);
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE aiColor4t<TReal> operator - (const aiColor4t<TReal>& v1, const aiColor4t<TReal>& v2) {
|
AI_FORCE_INLINE aiColor4t<TReal> operator - (const aiColor4t<TReal>& v1, const aiColor4t<TReal>& v2) {
|
||||||
return aiColor4t<TReal>( v1.r - v2.r, v1.g - v2.g, v1.b - v2.b, v1.a - v2.a);
|
return aiColor4t<TReal>( v1.r - v2.r, v1.g - v2.g, v1.b - v2.b, v1.a - v2.a);
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE aiColor4t<TReal> operator * (const aiColor4t<TReal>& v1, const aiColor4t<TReal>& v2) {
|
AI_FORCE_INLINE aiColor4t<TReal> operator * (const aiColor4t<TReal>& v1, const aiColor4t<TReal>& v2) {
|
||||||
return aiColor4t<TReal>( v1.r * v2.r, v1.g * v2.g, v1.b * v2.b, v1.a * v2.a);
|
return aiColor4t<TReal>( v1.r * v2.r, v1.g * v2.g, v1.b * v2.b, v1.a * v2.a);
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE aiColor4t<TReal> operator / (const aiColor4t<TReal>& v1, const aiColor4t<TReal>& v2) {
|
AI_FORCE_INLINE aiColor4t<TReal> operator / (const aiColor4t<TReal>& v1, const aiColor4t<TReal>& v2) {
|
||||||
return aiColor4t<TReal>( v1.r / v2.r, v1.g / v2.g, v1.b / v2.b, v1.a / v2.a);
|
return aiColor4t<TReal>( v1.r / v2.r, v1.g / v2.g, v1.b / v2.b, v1.a / v2.a);
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE aiColor4t<TReal> operator * ( TReal f, const aiColor4t<TReal>& v) {
|
AI_FORCE_INLINE aiColor4t<TReal> operator * ( TReal f, const aiColor4t<TReal>& v) {
|
||||||
return aiColor4t<TReal>( f*v.r, f*v.g, f*v.b, f*v.a);
|
return aiColor4t<TReal>( f*v.r, f*v.g, f*v.b, f*v.a);
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE aiColor4t<TReal> operator * ( const aiColor4t<TReal>& v, TReal f) {
|
AI_FORCE_INLINE aiColor4t<TReal> operator * ( const aiColor4t<TReal>& v, TReal f) {
|
||||||
return aiColor4t<TReal>( f*v.r, f*v.g, f*v.b, f*v.a);
|
return aiColor4t<TReal>( f*v.r, f*v.g, f*v.b, f*v.a);
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE aiColor4t<TReal> operator / ( const aiColor4t<TReal>& v, TReal f) {
|
AI_FORCE_INLINE aiColor4t<TReal> operator / ( const aiColor4t<TReal>& v, TReal f) {
|
||||||
return v * (1/f);
|
return v * (1/f);
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE aiColor4t<TReal> operator / ( TReal f,const aiColor4t<TReal>& v) {
|
AI_FORCE_INLINE aiColor4t<TReal> operator / ( TReal f,const aiColor4t<TReal>& v) {
|
||||||
return aiColor4t<TReal>(f,f,f,f)/v;
|
return aiColor4t<TReal>(f,f,f,f)/v;
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE aiColor4t<TReal> operator + ( const aiColor4t<TReal>& v, TReal f) {
|
AI_FORCE_INLINE aiColor4t<TReal> operator + ( const aiColor4t<TReal>& v, TReal f) {
|
||||||
return aiColor4t<TReal>( f+v.r, f+v.g, f+v.b, f+v.a);
|
return aiColor4t<TReal>( f+v.r, f+v.g, f+v.b, f+v.a);
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE aiColor4t<TReal> operator - ( const aiColor4t<TReal>& v, TReal f) {
|
AI_FORCE_INLINE aiColor4t<TReal> operator - ( const aiColor4t<TReal>& v, TReal f) {
|
||||||
return aiColor4t<TReal>( v.r-f, v.g-f, v.b-f, v.a-f);
|
return aiColor4t<TReal>( v.r-f, v.g-f, v.b-f, v.a-f);
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE aiColor4t<TReal> operator + ( TReal f, const aiColor4t<TReal>& v) {
|
AI_FORCE_INLINE aiColor4t<TReal> operator + ( TReal f, const aiColor4t<TReal>& v) {
|
||||||
return aiColor4t<TReal>( f+v.r, f+v.g, f+v.b, f+v.a);
|
return aiColor4t<TReal>( f+v.r, f+v.g, f+v.b, f+v.a);
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE aiColor4t<TReal> operator - ( TReal f, const aiColor4t<TReal>& v) {
|
AI_FORCE_INLINE aiColor4t<TReal> operator - ( TReal f, const aiColor4t<TReal>& v) {
|
||||||
return aiColor4t<TReal>( f-v.r, f-v.g, f-v.b, f-v.a);
|
return aiColor4t<TReal>( f-v.r, f-v.g, f-v.b, f-v.a);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline bool aiColor4t<TReal> :: IsBlack() const {
|
inline bool aiColor4t<TReal> :: IsBlack() const {
|
||||||
// The alpha component doesn't care here. black is black.
|
// The alpha component doesn't care here. black is black.
|
||||||
static const TReal epsilon = 10e-3f;
|
static const TReal epsilon = 10e-3f;
|
||||||
return fabs( r ) < epsilon && fabs( g ) < epsilon && fabs( b ) < epsilon;
|
return std::fabs( r ) < epsilon && std::fabs( g ) < epsilon && std::fabs( b ) < epsilon;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,16 +25,16 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@@ -42,11 +42,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
/** @file config.h
|
/** @file config.h
|
||||||
* @brief Defines constants for configurable properties for the library
|
* @brief Defines constants for configurable properties for the library
|
||||||
*
|
*
|
||||||
* Typically these properties are set via
|
* Typically these properties are set via
|
||||||
* #Assimp::Importer::SetPropertyFloat,
|
* #Assimp::Importer::SetPropertyFloat,
|
||||||
* #Assimp::Importer::SetPropertyInteger or
|
* #Assimp::Importer::SetPropertyInteger or
|
||||||
* #Assimp::Importer::SetPropertyString,
|
* #Assimp::Importer::SetPropertyString,
|
||||||
* depending on the data type of a property. All properties have a
|
* depending on the data type of a property. All properties have a
|
||||||
* default value. See the doc for the mentioned methods for more details.
|
* default value. See the doc for the mentioned methods for more details.
|
||||||
*
|
*
|
||||||
* <br><br>
|
* <br><br>
|
||||||
@@ -71,11 +71,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
* process (i.e. IO time, importing, postprocessing, ..) and dumps
|
* process (i.e. IO time, importing, postprocessing, ..) and dumps
|
||||||
* these timings to the DefaultLogger. See the @link perf Performance
|
* these timings to the DefaultLogger. See the @link perf Performance
|
||||||
* Page@endlink for more information on this topic.
|
* Page@endlink for more information on this topic.
|
||||||
*
|
*
|
||||||
* Property type: bool. Default value: false.
|
* Property type: bool. Default value: false.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_GLOB_MEASURE_TIME \
|
#define AI_CONFIG_GLOB_MEASURE_TIME \
|
||||||
"GLOB_MEASURE_TIME"
|
"GLOB_MEASURE_TIME"
|
||||||
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@@ -87,7 +87,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
*/
|
*/
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
#define AI_CONFIG_IMPORT_NO_SKELETON_MESHES \
|
#define AI_CONFIG_IMPORT_NO_SKELETON_MESHES \
|
||||||
"IMPORT_NO_SKELETON_MESHES"
|
"IMPORT_NO_SKELETON_MESHES"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -108,7 +108,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
* Property type: int, default value: -1.
|
* Property type: int, default value: -1.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_GLOB_MULTITHREADING \
|
#define AI_CONFIG_GLOB_MULTITHREADING \
|
||||||
"GLOB_MULTITHREADING"
|
"GLOB_MULTITHREADING"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// ###########################################################################
|
// ###########################################################################
|
||||||
@@ -127,12 +127,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
*/
|
*/
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
#define AI_CONFIG_PP_SBBC_MAX_BONES \
|
#define AI_CONFIG_PP_SBBC_MAX_BONES \
|
||||||
"PP_SBBC_MAX_BONES"
|
"PP_SBBC_MAX_BONES"
|
||||||
|
|
||||||
|
|
||||||
// default limit for bone count
|
// default limit for bone count
|
||||||
#if (!defined AI_SBBC_DEFAULT_MAX_BONES)
|
#if (!defined AI_SBBC_DEFAULT_MAX_BONES)
|
||||||
# define AI_SBBC_DEFAULT_MAX_BONES 60
|
# define AI_SBBC_DEFAULT_MAX_BONES 60
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@@ -145,17 +145,17 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
* Property type: float. Default value: 45 degrees
|
* Property type: float. Default value: 45 degrees
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE \
|
#define AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE \
|
||||||
"PP_CT_MAX_SMOOTHING_ANGLE"
|
"PP_CT_MAX_SMOOTHING_ANGLE"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Source UV channel for tangent space computation.
|
/** @brief Source UV channel for tangent space computation.
|
||||||
*
|
*
|
||||||
* The specified channel must exist or an error will be raised.
|
* The specified channel must exist or an error will be raised.
|
||||||
* Property type: integer. Default value: 0
|
* Property type: integer. Default value: 0
|
||||||
*/
|
*/
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
#define AI_CONFIG_PP_CT_TEXTURE_CHANNEL_INDEX \
|
#define AI_CONFIG_PP_CT_TEXTURE_CHANNEL_INDEX \
|
||||||
"PP_CT_TEXTURE_CHANNEL_INDEX"
|
"PP_CT_TEXTURE_CHANNEL_INDEX"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Specifies the maximum angle that may be between two face normals
|
/** @brief Specifies the maximum angle that may be between two face normals
|
||||||
@@ -163,14 +163,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
*
|
*
|
||||||
* Sometimes referred to as 'crease angle'.
|
* Sometimes referred to as 'crease angle'.
|
||||||
* This applies to the GenSmoothNormals-Step. The angle is specified
|
* This applies to the GenSmoothNormals-Step. The angle is specified
|
||||||
* in degrees, so 180 is PI. The default value is 175 degrees (all vertex
|
* in degrees, so 180 is PI. The default value is 175 degrees (all vertex
|
||||||
* normals are smoothed). The maximum value is 175, too. Property type: float.
|
* normals are smoothed). The maximum value is 175, too. Property type: float.
|
||||||
* Warning: setting this option may cause a severe loss of performance. The
|
* Warning: setting this option may cause a severe loss of performance. The
|
||||||
* performance is unaffected if the #AI_CONFIG_FAVOUR_SPEED flag is set but
|
* performance is unaffected if the #AI_CONFIG_FAVOUR_SPEED flag is set but
|
||||||
* the output quality may be reduced.
|
* the output quality may be reduced.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE \
|
#define AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE \
|
||||||
"PP_GSN_MAX_SMOOTHING_ANGLE"
|
"PP_GSN_MAX_SMOOTHING_ANGLE"
|
||||||
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@@ -180,14 +180,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
* This must be a valid path to a file. The file is 768 (256*3) bytes
|
* This must be a valid path to a file. The file is 768 (256*3) bytes
|
||||||
* large and contains RGB triplets for each of the 256 palette entries.
|
* large and contains RGB triplets for each of the 256 palette entries.
|
||||||
* The default value is colormap.lmp. If the file is not found,
|
* The default value is colormap.lmp. If the file is not found,
|
||||||
* a default palette (from Quake 1) is used.
|
* a default palette (from Quake 1) is used.
|
||||||
* Property type: string.
|
* Property type: string.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_MDL_COLORMAP \
|
#define AI_CONFIG_IMPORT_MDL_COLORMAP \
|
||||||
"IMPORT_MDL_COLORMAP"
|
"IMPORT_MDL_COLORMAP"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Configures the #aiProcess_RemoveRedundantMaterials step to
|
/** @brief Configures the #aiProcess_RemoveRedundantMaterials step to
|
||||||
* keep materials matching a name in a given list.
|
* keep materials matching a name in a given list.
|
||||||
*
|
*
|
||||||
* This is a list of 1 to n strings, ' ' serves as delimiter character.
|
* This is a list of 1 to n strings, ' ' serves as delimiter character.
|
||||||
@@ -196,61 +196,61 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
* "keep-me and_me_to anotherMaterialToBeKept \'name with whitespace\'"</tt>.
|
* "keep-me and_me_to anotherMaterialToBeKept \'name with whitespace\'"</tt>.
|
||||||
* If a material matches on of these names, it will not be modified or
|
* If a material matches on of these names, it will not be modified or
|
||||||
* removed by the postprocessing step nor will other materials be replaced
|
* removed by the postprocessing step nor will other materials be replaced
|
||||||
* by a reference to it. <br>
|
* by a reference to it. <br>
|
||||||
* This option might be useful if you are using some magic material names
|
* This option might be useful if you are using some magic material names
|
||||||
* to pass additional semantics through the content pipeline. This ensures
|
* to pass additional semantics through the content pipeline. This ensures
|
||||||
* they won't be optimized away, but a general optimization is still
|
* they won't be optimized away, but a general optimization is still
|
||||||
* performed for materials not contained in the list.
|
* performed for materials not contained in the list.
|
||||||
* Property type: String. Default value: n/a
|
* Property type: String. Default value: n/a
|
||||||
* @note Linefeeds, tabs or carriage returns are treated as whitespace.
|
* @note Linefeeds, tabs or carriage returns are treated as whitespace.
|
||||||
* Material names are case sensitive.
|
* Material names are case sensitive.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_PP_RRM_EXCLUDE_LIST \
|
#define AI_CONFIG_PP_RRM_EXCLUDE_LIST \
|
||||||
"PP_RRM_EXCLUDE_LIST"
|
"PP_RRM_EXCLUDE_LIST"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Configures the #aiProcess_PretransformVertices step to
|
/** @brief Configures the #aiProcess_PreTransformVertices step to
|
||||||
* keep the scene hierarchy. Meshes are moved to worldspace, but
|
* keep the scene hierarchy. Meshes are moved to worldspace, but
|
||||||
* no optimization is performed (read: meshes with equal materials are not
|
* no optimization is performed (read: meshes with equal materials are not
|
||||||
* joined. The total number of meshes won't change).
|
* joined. The total number of meshes won't change).
|
||||||
*
|
*
|
||||||
* This option could be of use for you if the scene hierarchy contains
|
* This option could be of use for you if the scene hierarchy contains
|
||||||
* important additional information which you intend to parse.
|
* important additional information which you intend to parse.
|
||||||
* For rendering, you can still render all meshes in the scene without
|
* For rendering, you can still render all meshes in the scene without
|
||||||
* any transformations.
|
* any transformations.
|
||||||
* Property type: bool. Default value: false.
|
* Property type: bool. Default value: false.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_PP_PTV_KEEP_HIERARCHY \
|
#define AI_CONFIG_PP_PTV_KEEP_HIERARCHY \
|
||||||
"PP_PTV_KEEP_HIERARCHY"
|
"PP_PTV_KEEP_HIERARCHY"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Configures the #aiProcess_PretransformVertices step to normalize
|
/** @brief Configures the #aiProcess_PreTransformVertices step to normalize
|
||||||
* all vertex components into the [-1,1] range. That is, a bounding box
|
* all vertex components into the [-1,1] range. That is, a bounding box
|
||||||
* for the whole scene is computed, the maximum component is taken and all
|
* for the whole scene is computed, the maximum component is taken and all
|
||||||
* meshes are scaled appropriately (uniformly of course!).
|
* meshes are scaled appropriately (uniformly of course!).
|
||||||
* This might be useful if you don't know the spatial dimension of the input
|
* This might be useful if you don't know the spatial dimension of the input
|
||||||
* data*/
|
* data*/
|
||||||
#define AI_CONFIG_PP_PTV_NORMALIZE \
|
#define AI_CONFIG_PP_PTV_NORMALIZE \
|
||||||
"PP_PTV_NORMALIZE"
|
"PP_PTV_NORMALIZE"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Configures the #aiProcess_PretransformVertices step to use
|
/** @brief Configures the #aiProcess_PreTransformVertices step to use
|
||||||
* a users defined matrix as the scene root node transformation before
|
* a users defined matrix as the scene root node transformation before
|
||||||
* transforming vertices.
|
* transforming vertices.
|
||||||
* Property type: bool. Default value: false.
|
* Property type: bool. Default value: false.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_PP_PTV_ADD_ROOT_TRANSFORMATION \
|
#define AI_CONFIG_PP_PTV_ADD_ROOT_TRANSFORMATION \
|
||||||
"PP_PTV_ADD_ROOT_TRANSFORMATION"
|
"PP_PTV_ADD_ROOT_TRANSFORMATION"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Configures the #aiProcess_PretransformVertices step to use
|
/** @brief Configures the #aiProcess_PreTransformVertices step to use
|
||||||
* a users defined matrix as the scene root node transformation before
|
* a users defined matrix as the scene root node transformation before
|
||||||
* transforming vertices. This property correspond to the 'a1' component
|
* transforming vertices. This property correspond to the 'a1' component
|
||||||
* of the transformation matrix.
|
* of the transformation matrix.
|
||||||
* Property type: aiMatrix4x4.
|
* Property type: aiMatrix4x4.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_PP_PTV_ROOT_TRANSFORMATION \
|
#define AI_CONFIG_PP_PTV_ROOT_TRANSFORMATION \
|
||||||
"PP_PTV_ROOT_TRANSFORMATION"
|
"PP_PTV_ROOT_TRANSFORMATION"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Configures the #aiProcess_FindDegenerates step to
|
/** @brief Configures the #aiProcess_FindDegenerates step to
|
||||||
@@ -263,7 +263,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
* Property type: bool. Default value: false.
|
* Property type: bool. Default value: false.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_PP_FD_REMOVE \
|
#define AI_CONFIG_PP_FD_REMOVE \
|
||||||
"PP_FD_REMOVE"
|
"PP_FD_REMOVE"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Configures the #aiProcess_OptimizeGraph step to preserve nodes
|
/** @brief Configures the #aiProcess_OptimizeGraph step to preserve nodes
|
||||||
@@ -274,17 +274,17 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
* quotation marks. For example:<tt>
|
* quotation marks. For example:<tt>
|
||||||
* "keep-me and_me_to anotherNodeToBeKept \'name with whitespace\'"</tt>.
|
* "keep-me and_me_to anotherNodeToBeKept \'name with whitespace\'"</tt>.
|
||||||
* If a node matches on of these names, it will not be modified or
|
* If a node matches on of these names, it will not be modified or
|
||||||
* removed by the postprocessing step.<br>
|
* removed by the postprocessing step.<br>
|
||||||
* This option might be useful if you are using some magic node names
|
* This option might be useful if you are using some magic node names
|
||||||
* to pass additional semantics through the content pipeline. This ensures
|
* to pass additional semantics through the content pipeline. This ensures
|
||||||
* they won't be optimized away, but a general optimization is still
|
* they won't be optimized away, but a general optimization is still
|
||||||
* performed for nodes not contained in the list.
|
* performed for nodes not contained in the list.
|
||||||
* Property type: String. Default value: n/a
|
* Property type: String. Default value: n/a
|
||||||
* @note Linefeeds, tabs or carriage returns are treated as whitespace.
|
* @note Linefeeds, tabs or carriage returns are treated as whitespace.
|
||||||
* Node names are case sensitive.
|
* Node names are case sensitive.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_PP_OG_EXCLUDE_LIST \
|
#define AI_CONFIG_PP_OG_EXCLUDE_LIST \
|
||||||
"PP_OG_EXCLUDE_LIST"
|
"PP_OG_EXCLUDE_LIST"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Set the maximum number of triangles in a mesh.
|
/** @brief Set the maximum number of triangles in a mesh.
|
||||||
@@ -294,12 +294,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
* @note The default value is AI_SLM_DEFAULT_MAX_TRIANGLES
|
* @note The default value is AI_SLM_DEFAULT_MAX_TRIANGLES
|
||||||
* Property type: integer.
|
* Property type: integer.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_PP_SLM_TRIANGLE_LIMIT \
|
#define AI_CONFIG_PP_SLM_TRIANGLE_LIMIT \
|
||||||
"PP_SLM_TRIANGLE_LIMIT"
|
"PP_SLM_TRIANGLE_LIMIT"
|
||||||
|
|
||||||
// default value for AI_CONFIG_PP_SLM_TRIANGLE_LIMIT
|
// default value for AI_CONFIG_PP_SLM_TRIANGLE_LIMIT
|
||||||
#if (!defined AI_SLM_DEFAULT_MAX_TRIANGLES)
|
#if (!defined AI_SLM_DEFAULT_MAX_TRIANGLES)
|
||||||
# define AI_SLM_DEFAULT_MAX_TRIANGLES 1000000
|
# define AI_SLM_DEFAULT_MAX_TRIANGLES 1000000
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@@ -308,14 +308,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
* This is used by the "SplitLargeMeshes" PostProcess-Step to determine
|
* This is used by the "SplitLargeMeshes" PostProcess-Step to determine
|
||||||
* whether a mesh must be split or not.
|
* whether a mesh must be split or not.
|
||||||
* @note The default value is AI_SLM_DEFAULT_MAX_VERTICES
|
* @note The default value is AI_SLM_DEFAULT_MAX_VERTICES
|
||||||
* Property type: integer.
|
* Property type: integer.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_PP_SLM_VERTEX_LIMIT \
|
#define AI_CONFIG_PP_SLM_VERTEX_LIMIT \
|
||||||
"PP_SLM_VERTEX_LIMIT"
|
"PP_SLM_VERTEX_LIMIT"
|
||||||
|
|
||||||
// default value for AI_CONFIG_PP_SLM_VERTEX_LIMIT
|
// default value for AI_CONFIG_PP_SLM_VERTEX_LIMIT
|
||||||
#if (!defined AI_SLM_DEFAULT_MAX_VERTICES)
|
#if (!defined AI_SLM_DEFAULT_MAX_VERTICES)
|
||||||
# define AI_SLM_DEFAULT_MAX_VERTICES 1000000
|
# define AI_SLM_DEFAULT_MAX_VERTICES 1000000
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@@ -324,12 +324,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
* This is used by the #aiProcess_LimitBoneWeights PostProcess-Step.
|
* This is used by the #aiProcess_LimitBoneWeights PostProcess-Step.
|
||||||
* @note The default value is AI_LBW_MAX_WEIGHTS
|
* @note The default value is AI_LBW_MAX_WEIGHTS
|
||||||
* Property type: integer.*/
|
* Property type: integer.*/
|
||||||
#define AI_CONFIG_PP_LBW_MAX_WEIGHTS \
|
#define AI_CONFIG_PP_LBW_MAX_WEIGHTS \
|
||||||
"PP_LBW_MAX_WEIGHTS"
|
"PP_LBW_MAX_WEIGHTS"
|
||||||
|
|
||||||
// default value for AI_CONFIG_PP_LBW_MAX_WEIGHTS
|
// default value for AI_CONFIG_PP_LBW_MAX_WEIGHTS
|
||||||
#if (!defined AI_LMW_MAX_WEIGHTS)
|
#if (!defined AI_LMW_MAX_WEIGHTS)
|
||||||
# define AI_LMW_MAX_WEIGHTS 0x4
|
# define AI_LMW_MAX_WEIGHTS 0x4
|
||||||
#endif // !! AI_LMW_MAX_WEIGHTS
|
#endif // !! AI_LMW_MAX_WEIGHTS
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@@ -339,11 +339,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
* @note The default value is AI_DEBONE_THRESHOLD
|
* @note The default value is AI_DEBONE_THRESHOLD
|
||||||
* Property type: float.*/
|
* Property type: float.*/
|
||||||
#define AI_CONFIG_PP_DB_THRESHOLD \
|
#define AI_CONFIG_PP_DB_THRESHOLD \
|
||||||
"PP_DB_THRESHOLD"
|
"PP_DB_THRESHOLD"
|
||||||
|
|
||||||
// default value for AI_CONFIG_PP_LBW_MAX_WEIGHTS
|
// default value for AI_CONFIG_PP_LBW_MAX_WEIGHTS
|
||||||
#if (!defined AI_DEBONE_THRESHOLD)
|
#if (!defined AI_DEBONE_THRESHOLD)
|
||||||
# define AI_DEBONE_THRESHOLD 1.0f
|
# define AI_DEBONE_THRESHOLD 1.0f
|
||||||
#endif // !! AI_DEBONE_THRESHOLD
|
#endif // !! AI_DEBONE_THRESHOLD
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@@ -353,12 +353,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
* @note The default value is 0
|
* @note The default value is 0
|
||||||
* Property type: bool.*/
|
* Property type: bool.*/
|
||||||
#define AI_CONFIG_PP_DB_ALL_OR_NONE \
|
#define AI_CONFIG_PP_DB_ALL_OR_NONE \
|
||||||
"PP_DB_ALL_OR_NONE"
|
"PP_DB_ALL_OR_NONE"
|
||||||
|
|
||||||
/** @brief Default value for the #AI_CONFIG_PP_ICL_PTCACHE_SIZE property
|
/** @brief Default value for the #AI_CONFIG_PP_ICL_PTCACHE_SIZE property
|
||||||
*/
|
*/
|
||||||
#ifndef PP_ICL_PTCACHE_SIZE
|
#ifndef PP_ICL_PTCACHE_SIZE
|
||||||
# define PP_ICL_PTCACHE_SIZE 12
|
# define PP_ICL_PTCACHE_SIZE 12
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@@ -372,73 +372,73 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
* performance improvements for most nVidia/AMD cards since 2002.
|
* performance improvements for most nVidia/AMD cards since 2002.
|
||||||
* Property type: integer.
|
* Property type: integer.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_PP_ICL_PTCACHE_SIZE "PP_ICL_PTCACHE_SIZE"
|
#define AI_CONFIG_PP_ICL_PTCACHE_SIZE "PP_ICL_PTCACHE_SIZE"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Enumerates components of the aiScene and aiMesh data structures
|
/** @brief Enumerates components of the aiScene and aiMesh data structures
|
||||||
* that can be excluded from the import using the #aiPrpcess_RemoveComponent step.
|
* that can be excluded from the import using the #aiProcess_RemoveComponent step.
|
||||||
*
|
*
|
||||||
* See the documentation to #aiProcess_RemoveComponent for more details.
|
* See the documentation to #aiProcess_RemoveComponent for more details.
|
||||||
*/
|
*/
|
||||||
enum aiComponent
|
enum aiComponent
|
||||||
{
|
{
|
||||||
/** Normal vectors */
|
/** Normal vectors */
|
||||||
#ifdef SWIG
|
#ifdef SWIG
|
||||||
aiComponent_NORMALS = 0x2,
|
aiComponent_NORMALS = 0x2,
|
||||||
#else
|
#else
|
||||||
aiComponent_NORMALS = 0x2u,
|
aiComponent_NORMALS = 0x2u,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** Tangents and bitangents go always together ... */
|
/** Tangents and bitangents go always together ... */
|
||||||
#ifdef SWIG
|
#ifdef SWIG
|
||||||
aiComponent_TANGENTS_AND_BITANGENTS = 0x4,
|
aiComponent_TANGENTS_AND_BITANGENTS = 0x4,
|
||||||
#else
|
#else
|
||||||
aiComponent_TANGENTS_AND_BITANGENTS = 0x4u,
|
aiComponent_TANGENTS_AND_BITANGENTS = 0x4u,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** ALL color sets
|
/** ALL color sets
|
||||||
* Use aiComponent_COLORn(N) to specify the N'th set */
|
* Use aiComponent_COLORn(N) to specify the N'th set */
|
||||||
aiComponent_COLORS = 0x8,
|
aiComponent_COLORS = 0x8,
|
||||||
|
|
||||||
/** ALL texture UV sets
|
/** ALL texture UV sets
|
||||||
* aiComponent_TEXCOORDn(N) to specify the N'th set */
|
* aiComponent_TEXCOORDn(N) to specify the N'th set */
|
||||||
aiComponent_TEXCOORDS = 0x10,
|
aiComponent_TEXCOORDS = 0x10,
|
||||||
|
|
||||||
/** Removes all bone weights from all meshes.
|
/** Removes all bone weights from all meshes.
|
||||||
* The scenegraph nodes corresponding to the bones are NOT removed.
|
* The scenegraph nodes corresponding to the bones are NOT removed.
|
||||||
* use the #aiProcess_OptimizeGraph step to do this */
|
* use the #aiProcess_OptimizeGraph step to do this */
|
||||||
aiComponent_BONEWEIGHTS = 0x20,
|
aiComponent_BONEWEIGHTS = 0x20,
|
||||||
|
|
||||||
/** Removes all node animations (aiScene::mAnimations).
|
/** Removes all node animations (aiScene::mAnimations).
|
||||||
* The corresponding scenegraph nodes are NOT removed.
|
* The corresponding scenegraph nodes are NOT removed.
|
||||||
* use the #aiProcess_OptimizeGraph step to do this */
|
* use the #aiProcess_OptimizeGraph step to do this */
|
||||||
aiComponent_ANIMATIONS = 0x40,
|
aiComponent_ANIMATIONS = 0x40,
|
||||||
|
|
||||||
/** Removes all embedded textures (aiScene::mTextures) */
|
/** Removes all embedded textures (aiScene::mTextures) */
|
||||||
aiComponent_TEXTURES = 0x80,
|
aiComponent_TEXTURES = 0x80,
|
||||||
|
|
||||||
/** Removes all light sources (aiScene::mLights).
|
/** Removes all light sources (aiScene::mLights).
|
||||||
* The corresponding scenegraph nodes are NOT removed.
|
* The corresponding scenegraph nodes are NOT removed.
|
||||||
* use the #aiProcess_OptimizeGraph step to do this */
|
* use the #aiProcess_OptimizeGraph step to do this */
|
||||||
aiComponent_LIGHTS = 0x100,
|
aiComponent_LIGHTS = 0x100,
|
||||||
|
|
||||||
/** Removes all cameras (aiScene::mCameras).
|
/** Removes all cameras (aiScene::mCameras).
|
||||||
* The corresponding scenegraph nodes are NOT removed.
|
* The corresponding scenegraph nodes are NOT removed.
|
||||||
* use the #aiProcess_OptimizeGraph step to do this */
|
* use the #aiProcess_OptimizeGraph step to do this */
|
||||||
aiComponent_CAMERAS = 0x200,
|
aiComponent_CAMERAS = 0x200,
|
||||||
|
|
||||||
/** Removes all meshes (aiScene::mMeshes). */
|
/** Removes all meshes (aiScene::mMeshes). */
|
||||||
aiComponent_MESHES = 0x400,
|
aiComponent_MESHES = 0x400,
|
||||||
|
|
||||||
/** Removes all materials. One default material will
|
/** Removes all materials. One default material will
|
||||||
* be generated, so aiScene::mNumMaterials will be 1. */
|
* be generated, so aiScene::mNumMaterials will be 1. */
|
||||||
aiComponent_MATERIALS = 0x800,
|
aiComponent_MATERIALS = 0x800,
|
||||||
|
|
||||||
|
|
||||||
/** This value is not used. It is just there to force the
|
/** This value is not used. It is just there to force the
|
||||||
* compiler to map this enum to a 32 Bit integer. */
|
* compiler to map this enum to a 32 Bit integer. */
|
||||||
#ifndef SWIG
|
#ifndef SWIG
|
||||||
_aiComponent_Force32Bit = 0x9fffffff
|
_aiComponent_Force32Bit = 0x9fffffff
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -460,8 +460,8 @@ enum aiComponent
|
|||||||
* of the flags defined above) the import FAILS. Mainly because there is
|
* of the flags defined above) the import FAILS. Mainly because there is
|
||||||
* no data to work on anymore ...
|
* no data to work on anymore ...
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_PP_RVC_FLAGS \
|
#define AI_CONFIG_PP_RVC_FLAGS \
|
||||||
"PP_RVC_FLAGS"
|
"PP_RVC_FLAGS"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Input parameter to the #aiProcess_SortByPType step:
|
/** @brief Input parameter to the #aiProcess_SortByPType step:
|
||||||
@@ -472,20 +472,20 @@ enum aiComponent
|
|||||||
* be to exclude all line and point meshes from the import. This
|
* be to exclude all line and point meshes from the import. This
|
||||||
* is an integer property, its default value is 0.
|
* is an integer property, its default value is 0.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_PP_SBP_REMOVE \
|
#define AI_CONFIG_PP_SBP_REMOVE \
|
||||||
"PP_SBP_REMOVE"
|
"PP_SBP_REMOVE"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Input parameter to the #aiProcess_FindInvalidData step:
|
/** @brief Input parameter to the #aiProcess_FindInvalidData step:
|
||||||
* Specifies the floating-point accuracy for animation values. The step
|
* Specifies the floating-point accuracy for animation values. The step
|
||||||
* checks for animation tracks where all frame values are absolutely equal
|
* checks for animation tracks where all frame values are absolutely equal
|
||||||
* and removes them. This tweakable controls the epsilon for floating-point
|
* and removes them. This tweakable controls the epsilon for floating-point
|
||||||
* comparisons - two keys are considered equal if the invariant
|
* comparisons - two keys are considered equal if the invariant
|
||||||
* abs(n0-n1)>epsilon holds true for all vector respectively quaternion
|
* abs(n0-n1)>epsilon holds true for all vector respectively quaternion
|
||||||
* components. The default value is 0.f - comparisons are exact then.
|
* components. The default value is 0.f - comparisons are exact then.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_PP_FID_ANIM_ACCURACY \
|
#define AI_CONFIG_PP_FID_ANIM_ACCURACY \
|
||||||
"PP_FID_ANIM_ACCURACY"
|
"PP_FID_ANIM_ACCURACY"
|
||||||
|
|
||||||
|
|
||||||
// TransformUVCoords evaluates UV scalings
|
// TransformUVCoords evaluates UV scalings
|
||||||
@@ -505,22 +505,22 @@ enum aiComponent
|
|||||||
* Specifies which UV transformations are evaluated.
|
* Specifies which UV transformations are evaluated.
|
||||||
*
|
*
|
||||||
* This is a bitwise combination of the AI_UVTRAFO_XXX flags (integer
|
* This is a bitwise combination of the AI_UVTRAFO_XXX flags (integer
|
||||||
* property, of course). By default all transformations are enabled
|
* property, of course). By default all transformations are enabled
|
||||||
* (AI_UVTRAFO_ALL).
|
* (AI_UVTRAFO_ALL).
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_PP_TUV_EVALUATE \
|
#define AI_CONFIG_PP_TUV_EVALUATE \
|
||||||
"PP_TUV_EVALUATE"
|
"PP_TUV_EVALUATE"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief A hint to assimp to favour speed against import quality.
|
/** @brief A hint to assimp to favour speed against import quality.
|
||||||
*
|
*
|
||||||
* Enabling this option may result in faster loading, but it needn't.
|
* Enabling this option may result in faster loading, but it needn't.
|
||||||
* It represents just a hint to loaders and post-processing steps to use
|
* It represents just a hint to loaders and post-processing steps to use
|
||||||
* faster code paths, if possible.
|
* faster code paths, if possible.
|
||||||
* This property is expected to be an integer, != 0 stands for true.
|
* This property is expected to be an integer, != 0 stands for true.
|
||||||
* The default value is 0.
|
* The default value is 0.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_FAVOUR_SPEED \
|
#define AI_CONFIG_FAVOUR_SPEED \
|
||||||
"FAVOUR_SPEED"
|
"FAVOUR_SPEED"
|
||||||
|
|
||||||
|
|
||||||
@@ -538,7 +538,7 @@ enum aiComponent
|
|||||||
* Property type: bool
|
* Property type: bool
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_FBX_READ_ALL_GEOMETRY_LAYERS \
|
#define AI_CONFIG_IMPORT_FBX_READ_ALL_GEOMETRY_LAYERS \
|
||||||
"IMPORT_FBX_READ_ALL_GEOMETRY_LAYERS"
|
"IMPORT_FBX_READ_ALL_GEOMETRY_LAYERS"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Set whether the fbx importer will read all materials present in the
|
/** @brief Set whether the fbx importer will read all materials present in the
|
||||||
@@ -550,7 +550,7 @@ enum aiComponent
|
|||||||
* Property type: bool
|
* Property type: bool
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_FBX_READ_ALL_MATERIALS \
|
#define AI_CONFIG_IMPORT_FBX_READ_ALL_MATERIALS \
|
||||||
"IMPORT_FBX_READ_ALL_MATERIALS"
|
"IMPORT_FBX_READ_ALL_MATERIALS"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Set whether the fbx importer will read materials.
|
/** @brief Set whether the fbx importer will read materials.
|
||||||
@@ -559,7 +559,16 @@ enum aiComponent
|
|||||||
* Property type: bool
|
* Property type: bool
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_FBX_READ_MATERIALS \
|
#define AI_CONFIG_IMPORT_FBX_READ_MATERIALS \
|
||||||
"IMPORT_FBX_READ_MATERIALS"
|
"IMPORT_FBX_READ_MATERIALS"
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
/** @brief Set whether the fbx importer will read embedded textures.
|
||||||
|
*
|
||||||
|
* The default value is true (1)
|
||||||
|
* Property type: bool
|
||||||
|
*/
|
||||||
|
#define AI_CONFIG_IMPORT_FBX_READ_TEXTURES \
|
||||||
|
"IMPORT_FBX_READ_TEXTURES"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Set whether the fbx importer will read cameras.
|
/** @brief Set whether the fbx importer will read cameras.
|
||||||
@@ -568,7 +577,7 @@ enum aiComponent
|
|||||||
* Property type: bool
|
* Property type: bool
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_FBX_READ_CAMERAS \
|
#define AI_CONFIG_IMPORT_FBX_READ_CAMERAS \
|
||||||
"IMPORT_FBX_READ_CAMERAS"
|
"IMPORT_FBX_READ_CAMERAS"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Set whether the fbx importer will read light sources.
|
/** @brief Set whether the fbx importer will read light sources.
|
||||||
@@ -577,7 +586,7 @@ enum aiComponent
|
|||||||
* Property type: bool
|
* Property type: bool
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_FBX_READ_LIGHTS \
|
#define AI_CONFIG_IMPORT_FBX_READ_LIGHTS \
|
||||||
"IMPORT_FBX_READ_LIGHTS"
|
"IMPORT_FBX_READ_LIGHTS"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Set whether the fbx importer will read animations.
|
/** @brief Set whether the fbx importer will read animations.
|
||||||
@@ -586,7 +595,7 @@ enum aiComponent
|
|||||||
* Property type: bool
|
* Property type: bool
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_FBX_READ_ANIMATIONS \
|
#define AI_CONFIG_IMPORT_FBX_READ_ANIMATIONS \
|
||||||
"IMPORT_FBX_READ_ANIMATIONS"
|
"IMPORT_FBX_READ_ANIMATIONS"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Set whether the fbx importer will act in strict mode in which only
|
/** @brief Set whether the fbx importer will act in strict mode in which only
|
||||||
@@ -598,7 +607,7 @@ enum aiComponent
|
|||||||
* Property type: bool
|
* Property type: bool
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_FBX_STRICT_MODE \
|
#define AI_CONFIG_IMPORT_FBX_STRICT_MODE \
|
||||||
"IMPORT_FBX_STRICT_MODE"
|
"IMPORT_FBX_STRICT_MODE"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Set whether the fbx importer will preserve pivot points for
|
/** @brief Set whether the fbx importer will preserve pivot points for
|
||||||
@@ -609,7 +618,7 @@ enum aiComponent
|
|||||||
* Property type: bool
|
* Property type: bool
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_FBX_PRESERVE_PIVOTS \
|
#define AI_CONFIG_IMPORT_FBX_PRESERVE_PIVOTS \
|
||||||
"IMPORT_FBX_PRESERVE_PIVOTS"
|
"IMPORT_FBX_PRESERVE_PIVOTS"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Specifies whether the importer will drop empty animation curves or
|
/** @brief Specifies whether the importer will drop empty animation curves or
|
||||||
@@ -620,7 +629,7 @@ enum aiComponent
|
|||||||
* Property type: bool
|
* Property type: bool
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_FBX_OPTIMIZE_EMPTY_ANIMATION_CURVES \
|
#define AI_CONFIG_IMPORT_FBX_OPTIMIZE_EMPTY_ANIMATION_CURVES \
|
||||||
"IMPORT_FBX_OPTIMIZE_EMPTY_ANIMATION_CURVES"
|
"IMPORT_FBX_OPTIMIZE_EMPTY_ANIMATION_CURVES"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -637,35 +646,35 @@ enum aiComponent
|
|||||||
* want to override the global setting).
|
* want to override the global setting).
|
||||||
* Property type: integer.
|
* Property type: integer.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_GLOBAL_KEYFRAME "IMPORT_GLOBAL_KEYFRAME"
|
#define AI_CONFIG_IMPORT_GLOBAL_KEYFRAME "IMPORT_GLOBAL_KEYFRAME"
|
||||||
|
|
||||||
#define AI_CONFIG_IMPORT_MD3_KEYFRAME "IMPORT_MD3_KEYFRAME"
|
#define AI_CONFIG_IMPORT_MD3_KEYFRAME "IMPORT_MD3_KEYFRAME"
|
||||||
#define AI_CONFIG_IMPORT_MD2_KEYFRAME "IMPORT_MD2_KEYFRAME"
|
#define AI_CONFIG_IMPORT_MD2_KEYFRAME "IMPORT_MD2_KEYFRAME"
|
||||||
#define AI_CONFIG_IMPORT_MDL_KEYFRAME "IMPORT_MDL_KEYFRAME"
|
#define AI_CONFIG_IMPORT_MDL_KEYFRAME "IMPORT_MDL_KEYFRAME"
|
||||||
#define AI_CONFIG_IMPORT_MDC_KEYFRAME "IMPORT_MDC_KEYFRAME"
|
#define AI_CONFIG_IMPORT_MDC_KEYFRAME "IMPORT_MDC_KEYFRAME"
|
||||||
#define AI_CONFIG_IMPORT_SMD_KEYFRAME "IMPORT_SMD_KEYFRAME"
|
#define AI_CONFIG_IMPORT_SMD_KEYFRAME "IMPORT_SMD_KEYFRAME"
|
||||||
#define AI_CONFIG_IMPORT_UNREAL_KEYFRAME "IMPORT_UNREAL_KEYFRAME"
|
#define AI_CONFIG_IMPORT_UNREAL_KEYFRAME "IMPORT_UNREAL_KEYFRAME"
|
||||||
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Configures the AC loader to collect all surfaces which have the
|
/** @brief Configures the AC loader to collect all surfaces which have the
|
||||||
* "Backface cull" flag set in separate meshes.
|
* "Backface cull" flag set in separate meshes.
|
||||||
*
|
*
|
||||||
* Property type: bool. Default value: true.
|
* Property type: bool. Default value: true.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_AC_SEPARATE_BFCULL \
|
#define AI_CONFIG_IMPORT_AC_SEPARATE_BFCULL \
|
||||||
"IMPORT_AC_SEPARATE_BFCULL"
|
"IMPORT_AC_SEPARATE_BFCULL"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Configures whether the AC loader evaluates subdivision surfaces (
|
/** @brief Configures whether the AC loader evaluates subdivision surfaces (
|
||||||
* indicated by the presence of the 'subdiv' attribute in the file). By
|
* indicated by the presence of the 'subdiv' attribute in the file). By
|
||||||
* default, Assimp performs the subdivision using the standard
|
* default, Assimp performs the subdivision using the standard
|
||||||
* Catmull-Clark algorithm
|
* Catmull-Clark algorithm
|
||||||
*
|
*
|
||||||
* * Property type: bool. Default value: true.
|
* * Property type: bool. Default value: true.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_AC_EVAL_SUBDIVISION \
|
#define AI_CONFIG_IMPORT_AC_EVAL_SUBDIVISION \
|
||||||
"IMPORT_AC_EVAL_SUBDIVISION"
|
"IMPORT_AC_EVAL_SUBDIVISION"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Configures the UNREAL 3D loader to separate faces with different
|
/** @brief Configures the UNREAL 3D loader to separate faces with different
|
||||||
@@ -674,10 +683,10 @@ enum aiComponent
|
|||||||
* * Property type: bool. Default value: true.
|
* * Property type: bool. Default value: true.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_UNREAL_HANDLE_FLAGS \
|
#define AI_CONFIG_IMPORT_UNREAL_HANDLE_FLAGS \
|
||||||
"UNREAL_HANDLE_FLAGS"
|
"UNREAL_HANDLE_FLAGS"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Configures the terragen import plugin to compute uv's for
|
/** @brief Configures the terragen import plugin to compute uv's for
|
||||||
* terrains, if not given. Furthermore a default texture is assigned.
|
* terrains, if not given. Furthermore a default texture is assigned.
|
||||||
*
|
*
|
||||||
* UV coordinates for terrains are so simple to compute that you'll usually
|
* UV coordinates for terrains are so simple to compute that you'll usually
|
||||||
@@ -687,63 +696,63 @@ enum aiComponent
|
|||||||
* * Property type: bool. Default value: false.
|
* * Property type: bool. Default value: false.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_TER_MAKE_UVS \
|
#define AI_CONFIG_IMPORT_TER_MAKE_UVS \
|
||||||
"IMPORT_TER_MAKE_UVS"
|
"IMPORT_TER_MAKE_UVS"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Configures the ASE loader to always reconstruct normal vectors
|
/** @brief Configures the ASE loader to always reconstruct normal vectors
|
||||||
* basing on the smoothing groups loaded from the file.
|
* basing on the smoothing groups loaded from the file.
|
||||||
*
|
*
|
||||||
* Some ASE files have carry invalid normals, other don't.
|
* Some ASE files have carry invalid normals, other don't.
|
||||||
* * Property type: bool. Default value: true.
|
* * Property type: bool. Default value: true.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_ASE_RECONSTRUCT_NORMALS \
|
#define AI_CONFIG_IMPORT_ASE_RECONSTRUCT_NORMALS \
|
||||||
"IMPORT_ASE_RECONSTRUCT_NORMALS"
|
"IMPORT_ASE_RECONSTRUCT_NORMALS"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Configures the M3D loader to detect and process multi-part
|
/** @brief Configures the M3D loader to detect and process multi-part
|
||||||
* Quake player models.
|
* Quake player models.
|
||||||
*
|
*
|
||||||
* These models usually consist of 3 files, lower.md3, upper.md3 and
|
* These models usually consist of 3 files, lower.md3, upper.md3 and
|
||||||
* head.md3. If this property is set to true, Assimp will try to load and
|
* head.md3. If this property is set to true, Assimp will try to load and
|
||||||
* combine all three files if one of them is loaded.
|
* combine all three files if one of them is loaded.
|
||||||
* Property type: bool. Default value: true.
|
* Property type: bool. Default value: true.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_MD3_HANDLE_MULTIPART \
|
#define AI_CONFIG_IMPORT_MD3_HANDLE_MULTIPART \
|
||||||
"IMPORT_MD3_HANDLE_MULTIPART"
|
"IMPORT_MD3_HANDLE_MULTIPART"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Tells the MD3 loader which skin files to load.
|
/** @brief Tells the MD3 loader which skin files to load.
|
||||||
*
|
*
|
||||||
* When loading MD3 files, Assimp checks whether a file
|
* When loading MD3 files, Assimp checks whether a file
|
||||||
* <md3_file_name>_<skin_name>.skin is existing. These files are used by
|
* [md3_file_name]_[skin_name].skin is existing. These files are used by
|
||||||
* Quake III to be able to assign different skins (e.g. red and blue team)
|
* Quake III to be able to assign different skins (e.g. red and blue team)
|
||||||
* to models. 'default', 'red', 'blue' are typical skin names.
|
* to models. 'default', 'red', 'blue' are typical skin names.
|
||||||
* Property type: String. Default value: "default".
|
* Property type: String. Default value: "default".
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_MD3_SKIN_NAME \
|
#define AI_CONFIG_IMPORT_MD3_SKIN_NAME \
|
||||||
"IMPORT_MD3_SKIN_NAME"
|
"IMPORT_MD3_SKIN_NAME"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Specify the Quake 3 shader file to be used for a particular
|
/** @brief Specify the Quake 3 shader file to be used for a particular
|
||||||
* MD3 file. This can also be a search path.
|
* MD3 file. This can also be a search path.
|
||||||
*
|
*
|
||||||
* By default Assimp's behaviour is as follows: If a MD3 file
|
* By default Assimp's behaviour is as follows: If a MD3 file
|
||||||
* <tt><any_path>/models/<any_q3_subdir>/<model_name>/<file_name>.md3</tt> is
|
* <tt>any_path/models/any_q3_subdir/model_name/file_name.md3</tt> is
|
||||||
* loaded, the library tries to locate the corresponding shader file in
|
* loaded, the library tries to locate the corresponding shader file in
|
||||||
* <tt><any_path>/scripts/<model_name>.shader</tt>. This property overrides this
|
* <tt>any_path/scripts/model_name.shader</tt>. This property overrides this
|
||||||
* behaviour. It can either specify a full path to the shader to be loaded
|
* behaviour. It can either specify a full path to the shader to be loaded
|
||||||
* or alternatively the path (relative or absolute) to the directory where
|
* or alternatively the path (relative or absolute) to the directory where
|
||||||
* the shaders for all MD3s to be loaded reside. Assimp attempts to open
|
* the shaders for all MD3s to be loaded reside. Assimp attempts to open
|
||||||
* <tt><dir>/<model_name>.shader</tt> first, <tt><dir>/<file_name>.shader</tt>
|
* <tt>IMPORT_MD3_SHADER_SRC/model_name.shader</tt> first, <tt>IMPORT_MD3_SHADER_SRC/file_name.shader</tt>
|
||||||
* is the fallback file. Note that <dir> should have a terminal (back)slash.
|
* is the fallback file. Note that IMPORT_MD3_SHADER_SRC should have a terminal (back)slash.
|
||||||
* Property type: String. Default value: n/a.
|
* Property type: String. Default value: n/a.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_MD3_SHADER_SRC \
|
#define AI_CONFIG_IMPORT_MD3_SHADER_SRC \
|
||||||
"IMPORT_MD3_SHADER_SRC"
|
"IMPORT_MD3_SHADER_SRC"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Configures the LWO loader to load just one layer from the model.
|
/** @brief Configures the LWO loader to load just one layer from the model.
|
||||||
*
|
*
|
||||||
* LWO files consist of layers and in some cases it could be useful to load
|
* LWO files consist of layers and in some cases it could be useful to load
|
||||||
* only one of them. This property can be either a string - which specifies
|
* only one of them. This property can be either a string - which specifies
|
||||||
* the name of the layer - or an integer - the index of the layer. If the
|
* the name of the layer - or an integer - the index of the layer. If the
|
||||||
@@ -752,27 +761,27 @@ enum aiComponent
|
|||||||
* layer name may not be empty.<br>
|
* layer name may not be empty.<br>
|
||||||
* Property type: Integer. Default value: all layers are loaded.
|
* Property type: Integer. Default value: all layers are loaded.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_LWO_ONE_LAYER_ONLY \
|
#define AI_CONFIG_IMPORT_LWO_ONE_LAYER_ONLY \
|
||||||
"IMPORT_LWO_ONE_LAYER_ONLY"
|
"IMPORT_LWO_ONE_LAYER_ONLY"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Configures the MD5 loader to not load the MD5ANIM file for
|
/** @brief Configures the MD5 loader to not load the MD5ANIM file for
|
||||||
* a MD5MESH file automatically.
|
* a MD5MESH file automatically.
|
||||||
*
|
*
|
||||||
* The default strategy is to look for a file with the same name but the
|
* The default strategy is to look for a file with the same name but the
|
||||||
* MD5ANIM extension in the same directory. If it is found, it is loaded
|
* MD5ANIM extension in the same directory. If it is found, it is loaded
|
||||||
* and combined with the MD5MESH file. This configuration option can be
|
* and combined with the MD5MESH file. This configuration option can be
|
||||||
* used to disable this behaviour.
|
* used to disable this behaviour.
|
||||||
*
|
*
|
||||||
* * Property type: bool. Default value: false.
|
* * Property type: bool. Default value: false.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_MD5_NO_ANIM_AUTOLOAD \
|
#define AI_CONFIG_IMPORT_MD5_NO_ANIM_AUTOLOAD \
|
||||||
"IMPORT_MD5_NO_ANIM_AUTOLOAD"
|
"IMPORT_MD5_NO_ANIM_AUTOLOAD"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Defines the begin of the time range for which the LWS loader
|
/** @brief Defines the begin of the time range for which the LWS loader
|
||||||
* evaluates animations and computes aiNodeAnim's.
|
* evaluates animations and computes aiNodeAnim's.
|
||||||
*
|
*
|
||||||
* Assimp provides full conversion of LightWave's envelope system, including
|
* Assimp provides full conversion of LightWave's envelope system, including
|
||||||
* pre and post conditions. The loader computes linearly subsampled animation
|
* pre and post conditions. The loader computes linearly subsampled animation
|
||||||
* chanels with the frame rate given in the LWS file. This property defines
|
* chanels with the frame rate given in the LWS file. This property defines
|
||||||
@@ -785,53 +794,54 @@ enum aiComponent
|
|||||||
*
|
*
|
||||||
* @see AI_CONFIG_IMPORT_LWS_ANIM_END - end of the imported time range
|
* @see AI_CONFIG_IMPORT_LWS_ANIM_END - end of the imported time range
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_LWS_ANIM_START \
|
#define AI_CONFIG_IMPORT_LWS_ANIM_START \
|
||||||
"IMPORT_LWS_ANIM_START"
|
"IMPORT_LWS_ANIM_START"
|
||||||
#define AI_CONFIG_IMPORT_LWS_ANIM_END \
|
#define AI_CONFIG_IMPORT_LWS_ANIM_END \
|
||||||
"IMPORT_LWS_ANIM_END"
|
"IMPORT_LWS_ANIM_END"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Defines the output frame rate of the IRR loader.
|
/** @brief Defines the output frame rate of the IRR loader.
|
||||||
*
|
*
|
||||||
* IRR animations are difficult to convert for Assimp and there will
|
* IRR animations are difficult to convert for Assimp and there will
|
||||||
* always be a loss of quality. This setting defines how many keys per second
|
* always be a loss of quality. This setting defines how many keys per second
|
||||||
* are returned by the converter.<br>
|
* are returned by the converter.<br>
|
||||||
* Property type: integer. Default value: 100
|
* Property type: integer. Default value: 100
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_IRR_ANIM_FPS \
|
#define AI_CONFIG_IMPORT_IRR_ANIM_FPS \
|
||||||
"IMPORT_IRR_ANIM_FPS"
|
"IMPORT_IRR_ANIM_FPS"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Ogre Importer will try to find referenced materials from this file.
|
/** @brief Ogre Importer will try to find referenced materials from this file.
|
||||||
*
|
*
|
||||||
* Ogre meshes reference with material names, this does not tell Assimp the file
|
* Ogre meshes reference with material names, this does not tell Assimp the file
|
||||||
* where it is located in. Assimp will try to find the source file in the following
|
* where it is located in. Assimp will try to find the source file in the following
|
||||||
* order: <material-name>.material, <mesh-filename-base>.material and
|
* order: <material-name>.material, <mesh-filename-base>.material and
|
||||||
* lastly the material name defined by this config property.
|
* lastly the material name defined by this config property.
|
||||||
* <br>
|
* <br>
|
||||||
* Property type: String. Default value: Scene.material.
|
* Property type: String. Default value: Scene.material.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_OGRE_MATERIAL_FILE \
|
#define AI_CONFIG_IMPORT_OGRE_MATERIAL_FILE \
|
||||||
"IMPORT_OGRE_MATERIAL_FILE"
|
"IMPORT_OGRE_MATERIAL_FILE"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Ogre Importer detect the texture usage from its filename.
|
/** @brief Ogre Importer detect the texture usage from its filename.
|
||||||
*
|
*
|
||||||
* Ogre material texture units do not define texture type, the textures usage
|
* Ogre material texture units do not define texture type, the textures usage
|
||||||
* depends on the used shader or Ogres fixed pipeline. If this config property
|
* depends on the used shader or Ogre's fixed pipeline. If this config property
|
||||||
* is true Assimp will try to detect the type from the textures filename postfix:
|
* is true Assimp will try to detect the type from the textures filename postfix:
|
||||||
* _n, _nrm, _nrml, _normal, _normals and _normalmap for normal map, _s, _spec,
|
* _n, _nrm, _nrml, _normal, _normals and _normalmap for normal map, _s, _spec,
|
||||||
* _specular and _specularmap for specular map, _l, _light, _lightmap, _occ
|
* _specular and _specularmap for specular map, _l, _light, _lightmap, _occ
|
||||||
* and _occlusion for light map, _disp and _displacement for displacement map.
|
* and _occlusion for light map, _disp and _displacement for displacement map.
|
||||||
* The matching is case insensitive. Post fix is taken between last "_" and last ".".
|
* The matching is case insensitive. Post fix is taken between the last
|
||||||
* Default behavior is to detect type from lower cased texture unit name by
|
* underscore and the last period.
|
||||||
|
* Default behavior is to detect type from lower cased texture unit name by
|
||||||
* matching against: normalmap, specularmap, lightmap and displacementmap.
|
* matching against: normalmap, specularmap, lightmap and displacementmap.
|
||||||
* For both cases if no match is found aiTextureType_DIFFUSE is used.
|
* For both cases if no match is found aiTextureType_DIFFUSE is used.
|
||||||
* <br>
|
* <br>
|
||||||
* Property type: Bool. Default value: false.
|
* Property type: Bool. Default value: false.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_OGRE_TEXTURETYPE_FROM_FILENAME \
|
#define AI_CONFIG_IMPORT_OGRE_TEXTURETYPE_FROM_FILENAME \
|
||||||
"IMPORT_OGRE_TEXTURETYPE_FROM_FILENAME"
|
"IMPORT_OGRE_TEXTURETYPE_FROM_FILENAME"
|
||||||
|
|
||||||
/** @brief Specifies whether the IFC loader skips over IfcSpace elements.
|
/** @brief Specifies whether the IFC loader skips over IfcSpace elements.
|
||||||
*
|
*
|
||||||
@@ -841,9 +851,17 @@ enum aiComponent
|
|||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_IFC_SKIP_SPACE_REPRESENTATIONS "IMPORT_IFC_SKIP_SPACE_REPRESENTATIONS"
|
#define AI_CONFIG_IMPORT_IFC_SKIP_SPACE_REPRESENTATIONS "IMPORT_IFC_SKIP_SPACE_REPRESENTATIONS"
|
||||||
|
|
||||||
|
/** @brief Specifies whether the Android JNI asset extraction is supported.
|
||||||
|
*
|
||||||
|
* Turn on this option if you want to manage assets in native
|
||||||
|
* Android application without having to keep the internal directory and asset
|
||||||
|
* manager pointer.
|
||||||
|
*/
|
||||||
|
#define AI_CONFIG_ANDROID_JNI_ASSIMP_MANAGER_SUPPORT "AI_CONFIG_ANDROID_JNI_ASSIMP_MANAGER_SUPPORT"
|
||||||
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Specifies whether the IFC loader skips over
|
/** @brief Specifies whether the IFC loader skips over
|
||||||
* shape representations of type 'Curve2D'.
|
* shape representations of type 'Curve2D'.
|
||||||
*
|
*
|
||||||
* A lot of files contain both a faceted mesh representation and a outline
|
* A lot of files contain both a faceted mesh representation and a outline
|
||||||
@@ -858,7 +876,7 @@ enum aiComponent
|
|||||||
* algorithm to triangulate wall and floor meshes.
|
* algorithm to triangulate wall and floor meshes.
|
||||||
*
|
*
|
||||||
* If this property is set to false, walls will be either triangulated by
|
* If this property is set to false, walls will be either triangulated by
|
||||||
* #aiProcess_Triangulate or will be passed through as huge polygons with
|
* #aiProcess_Triangulate or will be passed through as huge polygons with
|
||||||
* faked holes (i.e. holes that are connected with the outer boundary using
|
* faked holes (i.e. holes that are connected with the outer boundary using
|
||||||
* a dummy edge). It is highly recommended to set this property to true
|
* a dummy edge). It is highly recommended to set this property to true
|
||||||
* if you want triangulated data because #aiProcess_Triangulate is known to
|
* if you want triangulated data because #aiProcess_Triangulate is known to
|
||||||
@@ -868,6 +886,22 @@ enum aiComponent
|
|||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_IFC_CUSTOM_TRIANGULATION "IMPORT_IFC_CUSTOM_TRIANGULATION"
|
#define AI_CONFIG_IMPORT_IFC_CUSTOM_TRIANGULATION "IMPORT_IFC_CUSTOM_TRIANGULATION"
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
/** @brief Specifies whether the Collada loader will ignore the provided up direction.
|
||||||
|
*
|
||||||
|
* If this property is set to true, the up direction provided in the file header will
|
||||||
|
* be ignored and the file will be loaded as is.
|
||||||
|
* Property type: Bool. Default value: false.
|
||||||
|
*/
|
||||||
#define AI_CONFIG_IMPORT_COLLADA_IGNORE_UP_DIRECTION "IMPORT_COLLADA_IGNORE_UP_DIRECTION"
|
#define AI_CONFIG_IMPORT_COLLADA_IGNORE_UP_DIRECTION "IMPORT_COLLADA_IGNORE_UP_DIRECTION"
|
||||||
|
|
||||||
|
// ---------- All the Export defines ------------
|
||||||
|
|
||||||
|
/** @brief Specifies the xfile use double for real values of float
|
||||||
|
*
|
||||||
|
* Property type: Bool. Default value: false.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define AI_CONFIG_EXPORT_XFILE_64BIT "EXPORT_XFILE_64BIT"
|
||||||
|
|
||||||
#endif // !! AI_CONFIG_H_INC
|
#endif // !! AI_CONFIG_H_INC
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,21 +25,21 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @file aiDefines.h
|
/** @file defs.h
|
||||||
* @brief Assimp build configuration setup. See the notes in the comment
|
* @brief Assimp build configuration setup. See the notes in the comment
|
||||||
* blocks to find out how to customize _your_ Assimp build.
|
* blocks to find out how to customize _your_ Assimp build.
|
||||||
*/
|
*/
|
||||||
@@ -47,233 +47,226 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#ifndef INCLUDED_AI_DEFINES_H
|
#ifndef INCLUDED_AI_DEFINES_H
|
||||||
#define INCLUDED_AI_DEFINES_H
|
#define INCLUDED_AI_DEFINES_H
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
/* Define ASSIMP_BUILD_NO_XX_IMPORTER to disable a specific
|
/* Define ASSIMP_BUILD_NO_XX_IMPORTER to disable a specific
|
||||||
* file format loader. The loader is be excluded from the
|
* file format loader. The loader is be excluded from the
|
||||||
* build in this case. 'XX' stands for the most common file
|
* build in this case. 'XX' stands for the most common file
|
||||||
* extension of the file format. E.g.:
|
* extension of the file format. E.g.:
|
||||||
* ASSIMP_BUILD_NO_X_IMPORTER disables the X loader.
|
* ASSIMP_BUILD_NO_X_IMPORTER disables the X loader.
|
||||||
*
|
*
|
||||||
* If you're unsure about that, take a look at the implementation of the
|
* If you're unsure about that, take a look at the implementation of the
|
||||||
* import plugin you wish to disable. You'll find the right define in the
|
* import plugin you wish to disable. You'll find the right define in the
|
||||||
* first lines of the corresponding unit.
|
* first lines of the corresponding unit.
|
||||||
*
|
*
|
||||||
* Other (mixed) configuration switches are listed here:
|
* Other (mixed) configuration switches are listed here:
|
||||||
* ASSIMP_BUILD_NO_COMPRESSED_X
|
* ASSIMP_BUILD_NO_COMPRESSED_X
|
||||||
* - Disable support for compressed X files (zip)
|
* - Disable support for compressed X files (zip)
|
||||||
* ASSIMP_BUILD_NO_COMPRESSED_BLEND
|
* ASSIMP_BUILD_NO_COMPRESSED_BLEND
|
||||||
* - Disable support for compressed Blender files (zip)
|
* - Disable support for compressed Blender files (zip)
|
||||||
* ASSIMP_BUILD_NO_COMPRESSED_IFC
|
* ASSIMP_BUILD_NO_COMPRESSED_IFC
|
||||||
* - Disable support for IFCZIP files (unzip)
|
* - Disable support for IFCZIP files (unzip)
|
||||||
*/
|
*/
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#ifndef ASSIMP_BUILD_NO_COMPRESSED_X
|
#ifndef ASSIMP_BUILD_NO_COMPRESSED_X
|
||||||
# define ASSIMP_BUILD_NEED_Z_INFLATE
|
# define ASSIMP_BUILD_NEED_Z_INFLATE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ASSIMP_BUILD_NO_COMPRESSED_BLEND
|
#ifndef ASSIMP_BUILD_NO_COMPRESSED_BLEND
|
||||||
# define ASSIMP_BUILD_NEED_Z_INFLATE
|
# define ASSIMP_BUILD_NEED_Z_INFLATE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ASSIMP_BUILD_NO_COMPRESSED_IFC
|
#ifndef ASSIMP_BUILD_NO_COMPRESSED_IFC
|
||||||
# define ASSIMP_BUILD_NEED_Z_INFLATE
|
# define ASSIMP_BUILD_NEED_Z_INFLATE
|
||||||
# define ASSIMP_BUILD_NEED_UNZIP
|
# define ASSIMP_BUILD_NEED_UNZIP
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ASSIMP_BUILD_NO_Q3BSP_IMPORTER
|
#ifndef ASSIMP_BUILD_NO_Q3BSP_IMPORTER
|
||||||
# define ASSIMP_BUILD_NEED_Z_INFLATE
|
# define ASSIMP_BUILD_NEED_Z_INFLATE
|
||||||
# define ASSIMP_BUILD_NEED_UNZIP
|
# define ASSIMP_BUILD_NEED_UNZIP
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
/* Define ASSIMP_BUILD_NO_XX_PROCESS to disable a specific
|
/* Define ASSIMP_BUILD_NO_XX_PROCESS to disable a specific
|
||||||
* post processing step. This is the current list of process names ('XX'):
|
* post processing step. This is the current list of process names ('XX'):
|
||||||
* CALCTANGENTS
|
* CALCTANGENTS
|
||||||
* JOINVERTICES
|
* JOINVERTICES
|
||||||
* TRIANGULATE
|
* TRIANGULATE
|
||||||
* GENFACENORMALS
|
* GENFACENORMALS
|
||||||
* GENVERTEXNORMALS
|
* GENVERTEXNORMALS
|
||||||
* REMOVEVC
|
* REMOVEVC
|
||||||
* SPLITLARGEMESHES
|
* SPLITLARGEMESHES
|
||||||
* PRETRANSFORMVERTICES
|
* PRETRANSFORMVERTICES
|
||||||
* LIMITBONEWEIGHTS
|
* LIMITBONEWEIGHTS
|
||||||
* VALIDATEDS
|
* VALIDATEDS
|
||||||
* IMPROVECACHELOCALITY
|
* IMPROVECACHELOCALITY
|
||||||
* FIXINFACINGNORMALS
|
* FIXINFACINGNORMALS
|
||||||
* REMOVE_REDUNDANTMATERIALS
|
* REMOVE_REDUNDANTMATERIALS
|
||||||
* OPTIMIZEGRAPH
|
* OPTIMIZEGRAPH
|
||||||
* SORTBYPTYPE
|
* SORTBYPTYPE
|
||||||
* FINDINVALIDDATA
|
* FINDINVALIDDATA
|
||||||
* TRANSFORMTEXCOORDS
|
* TRANSFORMTEXCOORDS
|
||||||
* GENUVCOORDS
|
* GENUVCOORDS
|
||||||
* ENTITYMESHBUILDER
|
* ENTITYMESHBUILDER
|
||||||
* MAKELEFTHANDED
|
* MAKELEFTHANDED
|
||||||
* FLIPUVS
|
* FLIPUVS
|
||||||
* FLIPWINDINGORDER
|
* FLIPWINDINGORDER
|
||||||
* OPTIMIZEMESHES
|
* OPTIMIZEMESHES
|
||||||
* OPTIMIZEANIMS
|
* OPTIMIZEANIMS
|
||||||
* OPTIMIZEGRAPH
|
* OPTIMIZEGRAPH
|
||||||
* GENENTITYMESHES
|
* GENENTITYMESHES
|
||||||
* FIXTEXTUREPATHS */
|
* FIXTEXTUREPATHS */
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
# undef ASSIMP_API
|
# undef ASSIMP_API
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
/* Define 'ASSIMP_BUILD_DLL_EXPORT' to build a DLL of the library */
|
/* Define 'ASSIMP_BUILD_DLL_EXPORT' to build a DLL of the library */
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
# ifdef ASSIMP_BUILD_DLL_EXPORT
|
# ifdef ASSIMP_BUILD_DLL_EXPORT
|
||||||
# define ASSIMP_API __declspec(dllexport)
|
# define ASSIMP_API __declspec(dllexport)
|
||||||
# define ASSIMP_API_WINONLY __declspec(dllexport)
|
# define ASSIMP_API_WINONLY __declspec(dllexport)
|
||||||
# pragma warning (disable : 4251)
|
# pragma warning (disable : 4251)
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
/* Define 'ASSIMP_DLL' before including Assimp to link to ASSIMP in
|
/* Define 'ASSIMP_DLL' before including Assimp to link to ASSIMP in
|
||||||
* an external DLL under Windows. Default is static linkage. */
|
* an external DLL under Windows. Default is static linkage. */
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
# elif (defined ASSIMP_DLL)
|
# elif (defined ASSIMP_DLL)
|
||||||
# define ASSIMP_API __declspec(dllimport)
|
# define ASSIMP_API __declspec(dllimport)
|
||||||
# define ASSIMP_API_WINONLY __declspec(dllimport)
|
# define ASSIMP_API_WINONLY __declspec(dllimport)
|
||||||
# else
|
# else
|
||||||
# define ASSIMP_API
|
# define ASSIMP_API
|
||||||
# define ASSIMP_API_WINONLY
|
# define ASSIMP_API_WINONLY
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
/* Force the compiler to inline a function, if possible
|
/* Force the compiler to inline a function, if possible
|
||||||
*/
|
*/
|
||||||
# define AI_FORCE_INLINE __forceinline
|
# define AI_FORCE_INLINE __forceinline
|
||||||
|
|
||||||
/* Tells the compiler that a function never returns. Used in code analysis
|
/* Tells the compiler that a function never returns. Used in code analysis
|
||||||
* to skip dead paths (e.g. after an assertion evaluated to false). */
|
* to skip dead paths (e.g. after an assertion evaluated to false). */
|
||||||
# define AI_WONT_RETURN __declspec(noreturn)
|
# define AI_WONT_RETURN __declspec(noreturn)
|
||||||
|
|
||||||
#elif defined(SWIG)
|
#elif defined(SWIG)
|
||||||
|
|
||||||
/* Do nothing, the relevant defines are all in AssimpSwigPort.i */
|
/* Do nothing, the relevant defines are all in AssimpSwigPort.i */
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
# define AI_WONT_RETURN
|
|
||||||
|
|
||||||
# define ASSIMP_API __attribute__ ((visibility("default")))
|
# define AI_WONT_RETURN
|
||||||
# define ASSIMP_API_WINONLY
|
|
||||||
# define AI_FORCE_INLINE inline
|
# define ASSIMP_API __attribute__ ((visibility("default")))
|
||||||
|
# define ASSIMP_API_WINONLY
|
||||||
|
# define AI_FORCE_INLINE inline
|
||||||
#endif // (defined _MSC_VER)
|
#endif // (defined _MSC_VER)
|
||||||
|
|
||||||
#ifdef __clang__
|
#ifdef __GNUC__
|
||||||
# define AI_WONT_RETURN_SUFFIX __attribute__((analyzer_noreturn))
|
# define AI_WONT_RETURN_SUFFIX __attribute__((noreturn))
|
||||||
#else
|
#else
|
||||||
# define AI_WONT_RETURN_SUFFIX
|
# define AI_WONT_RETURN_SUFFIX
|
||||||
#endif // (defined __clang__)
|
#endif // (defined __clang__)
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
/* No explicit 'struct' and 'enum' tags for C++, this keeps showing up
|
/* No explicit 'struct' and 'enum' tags for C++, this keeps showing up
|
||||||
* in doxydocs.
|
* in doxydocs.
|
||||||
*/
|
*/
|
||||||
# define C_STRUCT
|
# define C_STRUCT
|
||||||
# define C_ENUM
|
# define C_ENUM
|
||||||
#else
|
#else
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
/* To build the documentation, make sure ASSIMP_DOXYGEN_BUILD
|
/* To build the documentation, make sure ASSIMP_DOXYGEN_BUILD
|
||||||
* is defined by Doxygen's preprocessor. The corresponding
|
* is defined by Doxygen's preprocessor. The corresponding
|
||||||
* entries in the DOXYFILE are: */
|
* entries in the DOXYFILE are: */
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
#if 0
|
#if 0
|
||||||
ENABLE_PREPROCESSING = YES
|
ENABLE_PREPROCESSING = YES
|
||||||
MACRO_EXPANSION = YES
|
MACRO_EXPANSION = YES
|
||||||
EXPAND_ONLY_PREDEF = YES
|
EXPAND_ONLY_PREDEF = YES
|
||||||
SEARCH_INCLUDES = YES
|
SEARCH_INCLUDES = YES
|
||||||
INCLUDE_PATH =
|
INCLUDE_PATH =
|
||||||
INCLUDE_FILE_PATTERNS =
|
INCLUDE_FILE_PATTERNS =
|
||||||
PREDEFINED = ASSIMP_DOXYGEN_BUILD=1
|
PREDEFINED = ASSIMP_DOXYGEN_BUILD=1
|
||||||
EXPAND_AS_DEFINED = C_STRUCT C_ENUM
|
EXPAND_AS_DEFINED = C_STRUCT C_ENUM
|
||||||
SKIP_FUNCTION_MACROS = YES
|
SKIP_FUNCTION_MACROS = YES
|
||||||
#endif
|
#endif
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
/* Doxygen gets confused if we use c-struct typedefs to avoid
|
/* Doxygen gets confused if we use c-struct typedefs to avoid
|
||||||
* the explicit 'struct' notation. This trick here has the same
|
* the explicit 'struct' notation. This trick here has the same
|
||||||
* effect as the TYPEDEF_HIDES_STRUCT option, but we don't need
|
* effect as the TYPEDEF_HIDES_STRUCT option, but we don't need
|
||||||
* to typedef all structs/enums. */
|
* to typedef all structs/enums. */
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
# if (defined ASSIMP_DOXYGEN_BUILD)
|
# if (defined ASSIMP_DOXYGEN_BUILD)
|
||||||
# define C_STRUCT
|
# define C_STRUCT
|
||||||
# define C_ENUM
|
# define C_ENUM
|
||||||
# else
|
# else
|
||||||
# define C_STRUCT struct
|
# define C_STRUCT struct
|
||||||
# define C_ENUM enum
|
# define C_ENUM enum
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (defined(__BORLANDC__) || defined (__BCPLUSPLUS__))
|
#if (defined(__BORLANDC__) || defined (__BCPLUSPLUS__))
|
||||||
#error Currently, Borland is unsupported. Feel free to port Assimp.
|
#error Currently, Borland is unsupported. Feel free to port Assimp.
|
||||||
|
|
||||||
// "W8059 Packgr<67><72>e der Struktur ge<67>ndert"
|
// "W8059 Packgr<67><72>e der Struktur ge<67>ndert"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
//////////////////////////////////////////////////////////////////////////
|
|
||||||
/* Define 'ASSIMP_BUILD_BOOST_WORKAROUND' to compile assimp
|
|
||||||
* without boost. This is done by using a few workaround
|
|
||||||
* classes and brings some limitations (e.g. some logging won't be done,
|
|
||||||
* the library won't utilize threads or be threadsafe at all).
|
|
||||||
* This implies the 'ASSIMP_BUILD_SINGLETHREADED' setting. */
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
|
||||||
#ifdef ASSIMP_BUILD_BOOST_WORKAROUND
|
|
||||||
|
|
||||||
// threading support requires boost
|
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
/* Define ASSIMP_BUILD_SINGLETHREADED to compile assimp
|
||||||
|
* without threading support. The library doesn't utilize
|
||||||
|
* threads then and is itself not threadsafe. */
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
#ifndef ASSIMP_BUILD_SINGLETHREADED
|
#ifndef ASSIMP_BUILD_SINGLETHREADED
|
||||||
# define ASSIMP_BUILD_SINGLETHREADED
|
# define ASSIMP_BUILD_SINGLETHREADED
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // !! ASSIMP_BUILD_BOOST_WORKAROUND
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
|
||||||
/* Define ASSIMP_BUILD_SINGLETHREADED to compile assimp
|
|
||||||
* without threading support. The library doesn't utilize
|
|
||||||
* threads then and is itself not threadsafe.
|
|
||||||
* If this flag is specified boost::threads is *not* required. */
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
|
||||||
#ifndef ASSIMP_BUILD_SINGLETHREADED
|
|
||||||
# define ASSIMP_BUILD_SINGLETHREADED
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(_DEBUG) || ! defined(NDEBUG)
|
#if defined(_DEBUG) || ! defined(NDEBUG)
|
||||||
# define ASSIMP_BUILD_DEBUG
|
# define ASSIMP_BUILD_DEBUG
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
/* Useful constants */
|
/* Useful constants */
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
/* This is PI. Hi PI. */
|
/* This is PI. Hi PI. */
|
||||||
#define AI_MATH_PI (3.141592653589793238462643383279 )
|
#define AI_MATH_PI (3.141592653589793238462643383279 )
|
||||||
#define AI_MATH_TWO_PI (AI_MATH_PI * 2.0)
|
#define AI_MATH_TWO_PI (AI_MATH_PI * 2.0)
|
||||||
#define AI_MATH_HALF_PI (AI_MATH_PI * 0.5)
|
#define AI_MATH_HALF_PI (AI_MATH_PI * 0.5)
|
||||||
|
|
||||||
/* And this is to avoid endless casts to float */
|
/* And this is to avoid endless casts to float */
|
||||||
#define AI_MATH_PI_F (3.1415926538f)
|
#define AI_MATH_PI_F (3.1415926538f)
|
||||||
#define AI_MATH_TWO_PI_F (AI_MATH_PI_F * 2.0f)
|
#define AI_MATH_TWO_PI_F (AI_MATH_PI_F * 2.0f)
|
||||||
#define AI_MATH_HALF_PI_F (AI_MATH_PI_F * 0.5f)
|
#define AI_MATH_HALF_PI_F (AI_MATH_PI_F * 0.5f)
|
||||||
|
|
||||||
/* Tiny macro to convert from radians to degrees and back */
|
/* Tiny macro to convert from radians to degrees and back */
|
||||||
#define AI_DEG_TO_RAD(x) (x*0.0174532925f)
|
#define AI_DEG_TO_RAD(x) ((x)*0.0174532925f)
|
||||||
#define AI_RAD_TO_DEG(x) (x*57.2957795f)
|
#define AI_RAD_TO_DEG(x) ((x)*57.2957795f)
|
||||||
|
|
||||||
/* Support for big-endian builds */
|
/* Support for big-endian builds */
|
||||||
#if defined(__BYTE_ORDER__)
|
#if defined(__BYTE_ORDER__)
|
||||||
# if (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
|
# if (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
|
||||||
# if !defined(__BIG_ENDIAN__)
|
# if !defined(__BIG_ENDIAN__)
|
||||||
# define __BIG_ENDIAN__
|
# define __BIG_ENDIAN__
|
||||||
# endif
|
# endif
|
||||||
# else /* little endian */
|
# else /* little endian */
|
||||||
# if defined (__BIG_ENDIAN__)
|
# if defined (__BIG_ENDIAN__)
|
||||||
# undef __BIG_ENDIAN__
|
# undef __BIG_ENDIAN__
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#if defined(__BIG_ENDIAN__)
|
#if defined(__BIG_ENDIAN__)
|
||||||
# define AI_BUILD_BIG_ENDIAN
|
# define AI_BUILD_BIG_ENDIAN
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* To avoid running out of memory
|
||||||
|
* This can be adjusted for specific use cases
|
||||||
|
* It's NOT a total limit, just a limit for individual allocations
|
||||||
|
*/
|
||||||
|
#define AI_MAX_ALLOC(type) ((256U * 1024 * 1024) / sizeof(type))
|
||||||
|
|
||||||
|
|
||||||
#endif // !! INCLUDED_AI_DEFINES_H
|
#endif // !! INCLUDED_AI_DEFINES_H
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,16 +25,16 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@@ -48,89 +48,96 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
/** Mixed set of flags for #aiImporterDesc, indicating some features
|
/** Mixed set of flags for #aiImporterDesc, indicating some features
|
||||||
* common to many importers*/
|
* common to many importers*/
|
||||||
enum aiImporterFlags
|
enum aiImporterFlags
|
||||||
{
|
{
|
||||||
/** Indicates that there is a textual encoding of the
|
/** Indicates that there is a textual encoding of the
|
||||||
* file format; and that it is supported.*/
|
* file format; and that it is supported.*/
|
||||||
aiImporterFlags_SupportTextFlavour = 0x1,
|
aiImporterFlags_SupportTextFlavour = 0x1,
|
||||||
|
|
||||||
/** Indicates that there is a binary encoding of the
|
/** Indicates that there is a binary encoding of the
|
||||||
* file format; and that it is supported.*/
|
* file format; and that it is supported.*/
|
||||||
aiImporterFlags_SupportBinaryFlavour = 0x2,
|
aiImporterFlags_SupportBinaryFlavour = 0x2,
|
||||||
|
|
||||||
/** Indicates that there is a compressed encoding of the
|
/** Indicates that there is a compressed encoding of the
|
||||||
* file format; and that it is supported.*/
|
* file format; and that it is supported.*/
|
||||||
aiImporterFlags_SupportCompressedFlavour = 0x4,
|
aiImporterFlags_SupportCompressedFlavour = 0x4,
|
||||||
|
|
||||||
/** Indicates that the importer reads only a very particular
|
/** Indicates that the importer reads only a very particular
|
||||||
* subset of the file format. This happens commonly for
|
* subset of the file format. This happens commonly for
|
||||||
* declarative or procedural formats which cannot easily
|
* declarative or procedural formats which cannot easily
|
||||||
* be mapped to #aiScene */
|
* be mapped to #aiScene */
|
||||||
aiImporterFlags_LimitedSupport = 0x8,
|
aiImporterFlags_LimitedSupport = 0x8,
|
||||||
|
|
||||||
/** Indicates that the importer is highly experimental and
|
/** Indicates that the importer is highly experimental and
|
||||||
* should be used with care. This only happens for trunk
|
* should be used with care. This only happens for trunk
|
||||||
* (i.e. SVN) versions, experimental code is not included
|
* (i.e. SVN) versions, experimental code is not included
|
||||||
* in releases. */
|
* in releases. */
|
||||||
aiImporterFlags_Experimental = 0x10,
|
aiImporterFlags_Experimental = 0x10
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/** Meta information about a particular importer. Importers need to fill
|
/** Meta information about a particular importer. Importers need to fill
|
||||||
* this structure, but they can freely decide how talkative they are.
|
* this structure, but they can freely decide how talkative they are.
|
||||||
* A common use case for loader meta info is a user interface
|
* A common use case for loader meta info is a user interface
|
||||||
* in which the user can choose between various import/export file
|
* in which the user can choose between various import/export file
|
||||||
* formats. Building such an UI by hand means a lot of maintenance
|
* formats. Building such an UI by hand means a lot of maintenance
|
||||||
* as importers/exporters are added to Assimp, so it might be useful
|
* as importers/exporters are added to Assimp, so it might be useful
|
||||||
* to have a common mechanism to query some rough importer
|
* to have a common mechanism to query some rough importer
|
||||||
* characteristics. */
|
* characteristics. */
|
||||||
struct aiImporterDesc
|
struct aiImporterDesc
|
||||||
{
|
{
|
||||||
/** Full name of the importer (i.e. Blender3D importer)*/
|
/** Full name of the importer (i.e. Blender3D importer)*/
|
||||||
const char* mName;
|
const char* mName;
|
||||||
|
|
||||||
/** Original author (left blank if unknown or whole assimp team) */
|
/** Original author (left blank if unknown or whole assimp team) */
|
||||||
const char* mAuthor;
|
const char* mAuthor;
|
||||||
|
|
||||||
/** Current maintainer, left blank if the author maintains */
|
/** Current maintainer, left blank if the author maintains */
|
||||||
const char* mMaintainer;
|
const char* mMaintainer;
|
||||||
|
|
||||||
/** Implementation comments, i.e. unimplemented features*/
|
/** Implementation comments, i.e. unimplemented features*/
|
||||||
const char* mComments;
|
const char* mComments;
|
||||||
|
|
||||||
/** Any combination of the #aiLoaderFlags enumerated values.
|
/** These flags indicate some characteristics common to many
|
||||||
These flags indicate some characteristics common to many
|
importers. */
|
||||||
importers. */
|
unsigned int mFlags;
|
||||||
unsigned int mFlags;
|
|
||||||
|
|
||||||
/** Minimum format version that can be loaded im major.minor format,
|
/** Minimum format version that can be loaded im major.minor format,
|
||||||
both are set to 0 if there is either no version scheme
|
both are set to 0 if there is either no version scheme
|
||||||
or if the loader doesn't care. */
|
or if the loader doesn't care. */
|
||||||
unsigned int mMinMajor;
|
unsigned int mMinMajor;
|
||||||
unsigned int mMinMinor;
|
unsigned int mMinMinor;
|
||||||
|
|
||||||
/** Maximum format version that can be loaded im major.minor format,
|
/** Maximum format version that can be loaded im major.minor format,
|
||||||
both are set to 0 if there is either no version scheme
|
both are set to 0 if there is either no version scheme
|
||||||
or if the loader doesn't care. Loaders that expect to be
|
or if the loader doesn't care. Loaders that expect to be
|
||||||
forward-compatible to potential future format versions should
|
forward-compatible to potential future format versions should
|
||||||
indicate zero, otherwise they should specify the current
|
indicate zero, otherwise they should specify the current
|
||||||
maximum version.*/
|
maximum version.*/
|
||||||
unsigned int mMaxMajor;
|
unsigned int mMaxMajor;
|
||||||
unsigned int mMaxMinor;
|
unsigned int mMaxMinor;
|
||||||
|
|
||||||
/** List of file extensions this importer can handle.
|
/** List of file extensions this importer can handle.
|
||||||
List entries are separated by space characters.
|
List entries are separated by space characters.
|
||||||
All entries are lower case without a leading dot (i.e.
|
All entries are lower case without a leading dot (i.e.
|
||||||
"xml dae" would be a valid value. Note that multiple
|
"xml dae" would be a valid value. Note that multiple
|
||||||
importers may respond to the same file extension -
|
importers may respond to the same file extension -
|
||||||
assimp calls all importers in the order in which they
|
assimp calls all importers in the order in which they
|
||||||
are registered and each importer gets the opportunity
|
are registered and each importer gets the opportunity
|
||||||
to load the file until one importer "claims" the file. Apart
|
to load the file until one importer "claims" the file. Apart
|
||||||
from file extension checks, importers typically use
|
from file extension checks, importers typically use
|
||||||
other methods to quickly reject files (i.e. magic
|
other methods to quickly reject files (i.e. magic
|
||||||
words) so this does not mean that common or generic
|
words) so this does not mean that common or generic
|
||||||
file extensions such as XML would be tediously slow. */
|
file extensions such as XML would be tediously slow. */
|
||||||
const char* mFileExtensions;
|
const char* mFileExtensions;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
/** \brief Returns the Importer description for a given extension.
|
||||||
|
|
||||||
|
Will return a NULL-pointer if no assigned importer desc. was found for the given extension
|
||||||
|
\param extension [in] The extension to look for
|
||||||
|
\return A pointer showing to the ImporterDesc, \see aiImporterDesc.
|
||||||
|
*/
|
||||||
|
ASSIMP_API const C_STRUCT aiImporterDesc* aiGetImporterDesc( const char *extension );
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,16 +25,16 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@@ -57,30 +57,41 @@ extern "C" {
|
|||||||
*/
|
*/
|
||||||
enum aiLightSourceType
|
enum aiLightSourceType
|
||||||
{
|
{
|
||||||
aiLightSource_UNDEFINED = 0x0,
|
aiLightSource_UNDEFINED = 0x0,
|
||||||
|
|
||||||
//! A directional light source has a well-defined direction
|
//! A directional light source has a well-defined direction
|
||||||
//! but is infinitely far away. That's quite a good
|
//! but is infinitely far away. That's quite a good
|
||||||
//! approximation for sun light.
|
//! approximation for sun light.
|
||||||
aiLightSource_DIRECTIONAL = 0x1,
|
aiLightSource_DIRECTIONAL = 0x1,
|
||||||
|
|
||||||
//! A point light source has a well-defined position
|
//! A point light source has a well-defined position
|
||||||
//! in space but no direction - it emits light in all
|
//! in space but no direction - it emits light in all
|
||||||
//! directions. A normal bulb is a point light.
|
//! directions. A normal bulb is a point light.
|
||||||
aiLightSource_POINT = 0x2,
|
aiLightSource_POINT = 0x2,
|
||||||
|
|
||||||
//! A spot light source emits light in a specific
|
//! A spot light source emits light in a specific
|
||||||
//! angle. It has a position and a direction it is pointing to.
|
//! angle. It has a position and a direction it is pointing to.
|
||||||
//! A good example for a spot light is a light spot in
|
//! A good example for a spot light is a light spot in
|
||||||
//! sport arenas.
|
//! sport arenas.
|
||||||
aiLightSource_SPOT = 0x3,
|
aiLightSource_SPOT = 0x3,
|
||||||
|
|
||||||
|
//! The generic light level of the world, including the bounces
|
||||||
|
//! of all other light sources.
|
||||||
|
//! Typically, there's at most one ambient light in a scene.
|
||||||
|
//! This light type doesn't have a valid position, direction, or
|
||||||
|
//! other properties, just a color.
|
||||||
|
aiLightSource_AMBIENT = 0x4,
|
||||||
|
|
||||||
/** This value is not used. It is just there to force the
|
//! An area light is a rectangle with predefined size that uniformly
|
||||||
* compiler to map this enum to a 32 Bit integer.
|
//! emits light from one of its sides. The position is center of the
|
||||||
*/
|
//! rectangle and direction is its normal vector.
|
||||||
|
aiLightSource_AREA = 0x5,
|
||||||
|
|
||||||
|
/** This value is not used. It is just there to force the
|
||||||
|
* compiler to map this enum to a 32 Bit integer.
|
||||||
|
*/
|
||||||
#ifndef SWIG
|
#ifndef SWIG
|
||||||
_aiLightSource_Force32Bit = INT_MAX
|
_aiLightSource_Force32Bit = INT_MAX
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -99,128 +110,140 @@ enum aiLightSourceType
|
|||||||
*/
|
*/
|
||||||
struct aiLight
|
struct aiLight
|
||||||
{
|
{
|
||||||
/** The name of the light source.
|
/** The name of the light source.
|
||||||
*
|
*
|
||||||
* There must be a node in the scenegraph with the same name.
|
* There must be a node in the scenegraph with the same name.
|
||||||
* This node specifies the position of the light in the scene
|
* This node specifies the position of the light in the scene
|
||||||
* hierarchy and can be animated.
|
* hierarchy and can be animated.
|
||||||
*/
|
*/
|
||||||
C_STRUCT aiString mName;
|
C_STRUCT aiString mName;
|
||||||
|
|
||||||
/** The type of the light source.
|
/** The type of the light source.
|
||||||
*
|
*
|
||||||
* aiLightSource_UNDEFINED is not a valid value for this member.
|
* aiLightSource_UNDEFINED is not a valid value for this member.
|
||||||
*/
|
*/
|
||||||
C_ENUM aiLightSourceType mType;
|
C_ENUM aiLightSourceType mType;
|
||||||
|
|
||||||
/** Position of the light source in space. Relative to the
|
/** Position of the light source in space. Relative to the
|
||||||
* transformation of the node corresponding to the light.
|
* transformation of the node corresponding to the light.
|
||||||
*
|
*
|
||||||
* The position is undefined for directional lights.
|
* The position is undefined for directional lights.
|
||||||
*/
|
*/
|
||||||
C_STRUCT aiVector3D mPosition;
|
C_STRUCT aiVector3D mPosition;
|
||||||
|
|
||||||
/** Direction of the light source in space. Relative to the
|
/** Direction of the light source in space. Relative to the
|
||||||
* transformation of the node corresponding to the light.
|
* transformation of the node corresponding to the light.
|
||||||
*
|
*
|
||||||
* The direction is undefined for point lights. The vector
|
* The direction is undefined for point lights. The vector
|
||||||
* may be normalized, but it needn't.
|
* may be normalized, but it needn't.
|
||||||
*/
|
*/
|
||||||
C_STRUCT aiVector3D mDirection;
|
C_STRUCT aiVector3D mDirection;
|
||||||
|
|
||||||
/** Constant light attenuation factor.
|
/** Up direction of the light source in space. Relative to the
|
||||||
*
|
* transformation of the node corresponding to the light.
|
||||||
* The intensity of the light source at a given distance 'd' from
|
*
|
||||||
* the light's position is
|
* The direction is undefined for point lights. The vector
|
||||||
* @code
|
* may be normalized, but it needn't.
|
||||||
* Atten = 1/( att0 + att1 * d + att2 * d*d)
|
*/
|
||||||
* @endcode
|
C_STRUCT aiVector3D mUp;
|
||||||
* This member corresponds to the att0 variable in the equation.
|
|
||||||
* Naturally undefined for directional lights.
|
|
||||||
*/
|
|
||||||
float mAttenuationConstant;
|
|
||||||
|
|
||||||
/** Linear light attenuation factor.
|
/** Constant light attenuation factor.
|
||||||
*
|
*
|
||||||
* The intensity of the light source at a given distance 'd' from
|
* The intensity of the light source at a given distance 'd' from
|
||||||
* the light's position is
|
* the light's position is
|
||||||
* @code
|
* @code
|
||||||
* Atten = 1/( att0 + att1 * d + att2 * d*d)
|
* Atten = 1/( att0 + att1 * d + att2 * d*d)
|
||||||
* @endcode
|
* @endcode
|
||||||
* This member corresponds to the att1 variable in the equation.
|
* This member corresponds to the att0 variable in the equation.
|
||||||
* Naturally undefined for directional lights.
|
* Naturally undefined for directional lights.
|
||||||
*/
|
*/
|
||||||
float mAttenuationLinear;
|
float mAttenuationConstant;
|
||||||
|
|
||||||
/** Quadratic light attenuation factor.
|
/** Linear light attenuation factor.
|
||||||
*
|
*
|
||||||
* The intensity of the light source at a given distance 'd' from
|
* The intensity of the light source at a given distance 'd' from
|
||||||
* the light's position is
|
* the light's position is
|
||||||
* @code
|
* @code
|
||||||
* Atten = 1/( att0 + att1 * d + att2 * d*d)
|
* Atten = 1/( att0 + att1 * d + att2 * d*d)
|
||||||
* @endcode
|
* @endcode
|
||||||
* This member corresponds to the att2 variable in the equation.
|
* This member corresponds to the att1 variable in the equation.
|
||||||
* Naturally undefined for directional lights.
|
* Naturally undefined for directional lights.
|
||||||
*/
|
*/
|
||||||
float mAttenuationQuadratic;
|
float mAttenuationLinear;
|
||||||
|
|
||||||
/** Diffuse color of the light source
|
/** Quadratic light attenuation factor.
|
||||||
*
|
*
|
||||||
* The diffuse light color is multiplied with the diffuse
|
* The intensity of the light source at a given distance 'd' from
|
||||||
* material color to obtain the final color that contributes
|
* the light's position is
|
||||||
* to the diffuse shading term.
|
* @code
|
||||||
*/
|
* Atten = 1/( att0 + att1 * d + att2 * d*d)
|
||||||
C_STRUCT aiColor3D mColorDiffuse;
|
* @endcode
|
||||||
|
* This member corresponds to the att2 variable in the equation.
|
||||||
|
* Naturally undefined for directional lights.
|
||||||
|
*/
|
||||||
|
float mAttenuationQuadratic;
|
||||||
|
|
||||||
/** Specular color of the light source
|
/** Diffuse color of the light source
|
||||||
*
|
*
|
||||||
* The specular light color is multiplied with the specular
|
* The diffuse light color is multiplied with the diffuse
|
||||||
* material color to obtain the final color that contributes
|
* material color to obtain the final color that contributes
|
||||||
* to the specular shading term.
|
* to the diffuse shading term.
|
||||||
*/
|
*/
|
||||||
C_STRUCT aiColor3D mColorSpecular;
|
C_STRUCT aiColor3D mColorDiffuse;
|
||||||
|
|
||||||
/** Ambient color of the light source
|
/** Specular color of the light source
|
||||||
*
|
*
|
||||||
* The ambient light color is multiplied with the ambient
|
* The specular light color is multiplied with the specular
|
||||||
* material color to obtain the final color that contributes
|
* material color to obtain the final color that contributes
|
||||||
* to the ambient shading term. Most renderers will ignore
|
* to the specular shading term.
|
||||||
* this value it, is just a remaining of the fixed-function pipeline
|
*/
|
||||||
* that is still supported by quite many file formats.
|
C_STRUCT aiColor3D mColorSpecular;
|
||||||
*/
|
|
||||||
C_STRUCT aiColor3D mColorAmbient;
|
|
||||||
|
|
||||||
/** Inner angle of a spot light's light cone.
|
/** Ambient color of the light source
|
||||||
*
|
*
|
||||||
* The spot light has maximum influence on objects inside this
|
* The ambient light color is multiplied with the ambient
|
||||||
* angle. The angle is given in radians. It is 2PI for point
|
* material color to obtain the final color that contributes
|
||||||
* lights and undefined for directional lights.
|
* to the ambient shading term. Most renderers will ignore
|
||||||
*/
|
* this value it, is just a remaining of the fixed-function pipeline
|
||||||
float mAngleInnerCone;
|
* that is still supported by quite many file formats.
|
||||||
|
*/
|
||||||
|
C_STRUCT aiColor3D mColorAmbient;
|
||||||
|
|
||||||
/** Outer angle of a spot light's light cone.
|
/** Inner angle of a spot light's light cone.
|
||||||
*
|
*
|
||||||
* The spot light does not affect objects outside this angle.
|
* The spot light has maximum influence on objects inside this
|
||||||
* The angle is given in radians. It is 2PI for point lights and
|
* angle. The angle is given in radians. It is 2PI for point
|
||||||
* undefined for directional lights. The outer angle must be
|
* lights and undefined for directional lights.
|
||||||
* greater than or equal to the inner angle.
|
*/
|
||||||
* It is assumed that the application uses a smooth
|
float mAngleInnerCone;
|
||||||
* interpolation between the inner and the outer cone of the
|
|
||||||
* spot light.
|
/** Outer angle of a spot light's light cone.
|
||||||
*/
|
*
|
||||||
float mAngleOuterCone;
|
* The spot light does not affect objects outside this angle.
|
||||||
|
* The angle is given in radians. It is 2PI for point lights and
|
||||||
|
* undefined for directional lights. The outer angle must be
|
||||||
|
* greater than or equal to the inner angle.
|
||||||
|
* It is assumed that the application uses a smooth
|
||||||
|
* interpolation between the inner and the outer cone of the
|
||||||
|
* spot light.
|
||||||
|
*/
|
||||||
|
float mAngleOuterCone;
|
||||||
|
|
||||||
|
/** Size of area light source. */
|
||||||
|
C_STRUCT aiVector2D mSize;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
||||||
aiLight()
|
aiLight()
|
||||||
: mType (aiLightSource_UNDEFINED)
|
: mType (aiLightSource_UNDEFINED)
|
||||||
, mAttenuationConstant (0.f)
|
, mAttenuationConstant (0.f)
|
||||||
, mAttenuationLinear (1.f)
|
, mAttenuationLinear (1.f)
|
||||||
, mAttenuationQuadratic (0.f)
|
, mAttenuationQuadratic (0.f)
|
||||||
, mAngleInnerCone ((float)AI_MATH_TWO_PI)
|
, mAngleInnerCone ((float)AI_MATH_TWO_PI)
|
||||||
, mAngleOuterCone ((float)AI_MATH_TWO_PI)
|
, mAngleOuterCone ((float)AI_MATH_TWO_PI)
|
||||||
{
|
, mSize (0.f, 0.f)
|
||||||
}
|
{
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,21 +25,21 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @file aiMaterial.inl
|
/** @file material.inl
|
||||||
* @brief Defines the C++ getters for the material system
|
* @brief Defines the C++ getters for the material system
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -52,212 +52,212 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
inline aiReturn aiMaterial::GetTexture( aiTextureType type,
|
inline aiReturn aiMaterial::GetTexture( aiTextureType type,
|
||||||
unsigned int index,
|
unsigned int index,
|
||||||
C_STRUCT aiString* path,
|
C_STRUCT aiString* path,
|
||||||
aiTextureMapping* mapping /*= NULL*/,
|
aiTextureMapping* mapping /*= NULL*/,
|
||||||
unsigned int* uvindex /*= NULL*/,
|
unsigned int* uvindex /*= NULL*/,
|
||||||
float* blend /*= NULL*/,
|
float* blend /*= NULL*/,
|
||||||
aiTextureOp* op /*= NULL*/,
|
aiTextureOp* op /*= NULL*/,
|
||||||
aiTextureMapMode* mapmode /*= NULL*/) const
|
aiTextureMapMode* mapmode /*= NULL*/) const
|
||||||
{
|
{
|
||||||
return ::aiGetMaterialTexture(this,type,index,path,mapping,uvindex,blend,op,mapmode);
|
return ::aiGetMaterialTexture(this,type,index,path,mapping,uvindex,blend,op,mapmode);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
inline unsigned int aiMaterial::GetTextureCount(aiTextureType type) const
|
inline unsigned int aiMaterial::GetTextureCount(aiTextureType type) const
|
||||||
{
|
{
|
||||||
return ::aiGetMaterialTextureCount(this,type);
|
return ::aiGetMaterialTextureCount(this,type);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
template <typename Type>
|
template <typename Type>
|
||||||
inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
|
inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
|
||||||
unsigned int idx, Type* pOut,
|
unsigned int idx, Type* pOut,
|
||||||
unsigned int* pMax) const
|
unsigned int* pMax) const
|
||||||
{
|
{
|
||||||
unsigned int iNum = pMax ? *pMax : 1;
|
unsigned int iNum = pMax ? *pMax : 1;
|
||||||
|
|
||||||
const aiMaterialProperty* prop;
|
const aiMaterialProperty* prop;
|
||||||
const aiReturn ret = ::aiGetMaterialProperty(this,pKey,type,idx,
|
const aiReturn ret = ::aiGetMaterialProperty(this,pKey,type,idx,
|
||||||
(const aiMaterialProperty**)&prop);
|
(const aiMaterialProperty**)&prop);
|
||||||
if ( AI_SUCCESS == ret ) {
|
if ( AI_SUCCESS == ret ) {
|
||||||
|
|
||||||
if (prop->mDataLength < sizeof(Type)*iNum) {
|
if (prop->mDataLength < sizeof(Type)*iNum) {
|
||||||
return AI_FAILURE;
|
return AI_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (prop->mType != aiPTI_Buffer) {
|
if (prop->mType != aiPTI_Buffer) {
|
||||||
return AI_FAILURE;
|
return AI_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
iNum = std::min((size_t)iNum,prop->mDataLength / sizeof(Type));
|
iNum = std::min((size_t)iNum,prop->mDataLength / sizeof(Type));
|
||||||
::memcpy(pOut,prop->mData,iNum * sizeof(Type));
|
::memcpy(pOut,prop->mData,iNum * sizeof(Type));
|
||||||
if (pMax) {
|
if (pMax) {
|
||||||
*pMax = iNum;
|
*pMax = iNum;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
template <typename Type>
|
template <typename Type>
|
||||||
inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
|
inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
|
||||||
unsigned int idx,Type& pOut) const
|
unsigned int idx,Type& pOut) const
|
||||||
{
|
{
|
||||||
const aiMaterialProperty* prop;
|
const aiMaterialProperty* prop;
|
||||||
const aiReturn ret = ::aiGetMaterialProperty(this,pKey,type,idx,
|
const aiReturn ret = ::aiGetMaterialProperty(this,pKey,type,idx,
|
||||||
(const aiMaterialProperty**)&prop);
|
(const aiMaterialProperty**)&prop);
|
||||||
if ( AI_SUCCESS == ret ) {
|
if ( AI_SUCCESS == ret ) {
|
||||||
|
|
||||||
if (prop->mDataLength < sizeof(Type)) {
|
if (prop->mDataLength < sizeof(Type)) {
|
||||||
return AI_FAILURE;
|
return AI_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (prop->mType != aiPTI_Buffer) {
|
if (prop->mType != aiPTI_Buffer) {
|
||||||
return AI_FAILURE;
|
return AI_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
::memcpy(&pOut,prop->mData,sizeof(Type));
|
::memcpy(&pOut,prop->mData,sizeof(Type));
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
|
inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
|
||||||
unsigned int idx,float* pOut,
|
unsigned int idx,float* pOut,
|
||||||
unsigned int* pMax) const
|
unsigned int* pMax) const
|
||||||
{
|
{
|
||||||
return ::aiGetMaterialFloatArray(this,pKey,type,idx,pOut,pMax);
|
return ::aiGetMaterialFloatArray(this,pKey,type,idx,pOut,pMax);
|
||||||
}
|
}
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
|
inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
|
||||||
unsigned int idx,int* pOut,
|
unsigned int idx,int* pOut,
|
||||||
unsigned int* pMax) const
|
unsigned int* pMax) const
|
||||||
{
|
{
|
||||||
return ::aiGetMaterialIntegerArray(this,pKey,type,idx,pOut,pMax);
|
return ::aiGetMaterialIntegerArray(this,pKey,type,idx,pOut,pMax);
|
||||||
}
|
}
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
|
inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
|
||||||
unsigned int idx,float& pOut) const
|
unsigned int idx,float& pOut) const
|
||||||
{
|
{
|
||||||
return aiGetMaterialFloat(this,pKey,type,idx,&pOut);
|
return aiGetMaterialFloat(this,pKey,type,idx,&pOut);
|
||||||
}
|
}
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
|
inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
|
||||||
unsigned int idx,int& pOut) const
|
unsigned int idx,int& pOut) const
|
||||||
{
|
{
|
||||||
return aiGetMaterialInteger(this,pKey,type,idx,&pOut);
|
return aiGetMaterialInteger(this,pKey,type,idx,&pOut);
|
||||||
}
|
}
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
|
inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
|
||||||
unsigned int idx,aiColor4D& pOut) const
|
unsigned int idx,aiColor4D& pOut) const
|
||||||
{
|
{
|
||||||
return aiGetMaterialColor(this,pKey,type,idx,&pOut);
|
return aiGetMaterialColor(this,pKey,type,idx,&pOut);
|
||||||
}
|
}
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
|
inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
|
||||||
unsigned int idx,aiColor3D& pOut) const
|
unsigned int idx,aiColor3D& pOut) const
|
||||||
{
|
{
|
||||||
aiColor4D c;
|
aiColor4D c;
|
||||||
const aiReturn ret = aiGetMaterialColor(this,pKey,type,idx,&c);
|
const aiReturn ret = aiGetMaterialColor(this,pKey,type,idx,&c);
|
||||||
pOut = aiColor3D(c.r,c.g,c.b);
|
pOut = aiColor3D(c.r,c.g,c.b);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
|
inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
|
||||||
unsigned int idx,aiString& pOut) const
|
unsigned int idx,aiString& pOut) const
|
||||||
{
|
{
|
||||||
return aiGetMaterialString(this,pKey,type,idx,&pOut);
|
return aiGetMaterialString(this,pKey,type,idx,&pOut);
|
||||||
}
|
}
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
|
inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
|
||||||
unsigned int idx,aiUVTransform& pOut) const
|
unsigned int idx,aiUVTransform& pOut) const
|
||||||
{
|
{
|
||||||
return aiGetMaterialUVTransform(this,pKey,type,idx,&pOut);
|
return aiGetMaterialUVTransform(this,pKey,type,idx,&pOut);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
template<class TYPE>
|
template<class TYPE>
|
||||||
aiReturn aiMaterial::AddProperty (const TYPE* pInput,
|
aiReturn aiMaterial::AddProperty (const TYPE* pInput,
|
||||||
const unsigned int pNumValues,
|
const unsigned int pNumValues,
|
||||||
const char* pKey,
|
const char* pKey,
|
||||||
unsigned int type,
|
unsigned int type,
|
||||||
unsigned int index)
|
unsigned int index)
|
||||||
{
|
{
|
||||||
return AddBinaryProperty((const void*)pInput,
|
return AddBinaryProperty((const void*)pInput,
|
||||||
pNumValues * sizeof(TYPE),
|
pNumValues * sizeof(TYPE),
|
||||||
pKey,type,index,aiPTI_Buffer);
|
pKey,type,index,aiPTI_Buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
inline aiReturn aiMaterial::AddProperty(const float* pInput,
|
inline aiReturn aiMaterial::AddProperty(const float* pInput,
|
||||||
const unsigned int pNumValues,
|
const unsigned int pNumValues,
|
||||||
const char* pKey,
|
const char* pKey,
|
||||||
unsigned int type,
|
unsigned int type,
|
||||||
unsigned int index)
|
unsigned int index)
|
||||||
{
|
{
|
||||||
return AddBinaryProperty((const void*)pInput,
|
return AddBinaryProperty((const void*)pInput,
|
||||||
pNumValues * sizeof(float),
|
pNumValues * sizeof(float),
|
||||||
pKey,type,index,aiPTI_Float);
|
pKey,type,index,aiPTI_Float);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
inline aiReturn aiMaterial::AddProperty(const aiUVTransform* pInput,
|
inline aiReturn aiMaterial::AddProperty(const aiUVTransform* pInput,
|
||||||
const unsigned int pNumValues,
|
const unsigned int pNumValues,
|
||||||
const char* pKey,
|
const char* pKey,
|
||||||
unsigned int type,
|
unsigned int type,
|
||||||
unsigned int index)
|
unsigned int index)
|
||||||
{
|
{
|
||||||
return AddBinaryProperty((const void*)pInput,
|
return AddBinaryProperty((const void*)pInput,
|
||||||
pNumValues * sizeof(aiUVTransform),
|
pNumValues * sizeof(aiUVTransform),
|
||||||
pKey,type,index,aiPTI_Float);
|
pKey,type,index,aiPTI_Float);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
inline aiReturn aiMaterial::AddProperty(const aiColor4D* pInput,
|
inline aiReturn aiMaterial::AddProperty(const aiColor4D* pInput,
|
||||||
const unsigned int pNumValues,
|
const unsigned int pNumValues,
|
||||||
const char* pKey,
|
const char* pKey,
|
||||||
unsigned int type,
|
unsigned int type,
|
||||||
unsigned int index)
|
unsigned int index)
|
||||||
{
|
{
|
||||||
return AddBinaryProperty((const void*)pInput,
|
return AddBinaryProperty((const void*)pInput,
|
||||||
pNumValues * sizeof(aiColor4D),
|
pNumValues * sizeof(aiColor4D),
|
||||||
pKey,type,index,aiPTI_Float);
|
pKey,type,index,aiPTI_Float);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
inline aiReturn aiMaterial::AddProperty(const aiColor3D* pInput,
|
inline aiReturn aiMaterial::AddProperty(const aiColor3D* pInput,
|
||||||
const unsigned int pNumValues,
|
const unsigned int pNumValues,
|
||||||
const char* pKey,
|
const char* pKey,
|
||||||
unsigned int type,
|
unsigned int type,
|
||||||
unsigned int index)
|
unsigned int index)
|
||||||
{
|
{
|
||||||
return AddBinaryProperty((const void*)pInput,
|
return AddBinaryProperty((const void*)pInput,
|
||||||
pNumValues * sizeof(aiColor3D),
|
pNumValues * sizeof(aiColor3D),
|
||||||
pKey,type,index,aiPTI_Float);
|
pKey,type,index,aiPTI_Float);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
inline aiReturn aiMaterial::AddProperty(const aiVector3D* pInput,
|
inline aiReturn aiMaterial::AddProperty(const aiVector3D* pInput,
|
||||||
const unsigned int pNumValues,
|
const unsigned int pNumValues,
|
||||||
const char* pKey,
|
const char* pKey,
|
||||||
unsigned int type,
|
unsigned int type,
|
||||||
unsigned int index)
|
unsigned int index)
|
||||||
{
|
{
|
||||||
return AddBinaryProperty((const void*)pInput,
|
return AddBinaryProperty((const void*)pInput,
|
||||||
pNumValues * sizeof(aiVector3D),
|
pNumValues * sizeof(aiVector3D),
|
||||||
pKey,type,index,aiPTI_Float);
|
pKey,type,index,aiPTI_Float);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
inline aiReturn aiMaterial::AddProperty(const int* pInput,
|
inline aiReturn aiMaterial::AddProperty(const int* pInput,
|
||||||
const unsigned int pNumValues,
|
const unsigned int pNumValues,
|
||||||
const char* pKey,
|
const char* pKey,
|
||||||
unsigned int type,
|
unsigned int type,
|
||||||
unsigned int index)
|
unsigned int index)
|
||||||
{
|
{
|
||||||
return AddBinaryProperty((const void*)pInput,
|
return AddBinaryProperty((const void*)pInput,
|
||||||
pNumValues * sizeof(int),
|
pNumValues * sizeof(int),
|
||||||
pKey,type,index,aiPTI_Integer);
|
pKey,type,index,aiPTI_Integer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -270,79 +270,79 @@ inline aiReturn aiMaterial::AddProperty(const int* pInput,
|
|||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
template<>
|
template<>
|
||||||
inline aiReturn aiMaterial::AddProperty<float>(const float* pInput,
|
inline aiReturn aiMaterial::AddProperty<float>(const float* pInput,
|
||||||
const unsigned int pNumValues,
|
const unsigned int pNumValues,
|
||||||
const char* pKey,
|
const char* pKey,
|
||||||
unsigned int type,
|
unsigned int type,
|
||||||
unsigned int index)
|
unsigned int index)
|
||||||
{
|
{
|
||||||
return AddBinaryProperty((const void*)pInput,
|
return AddBinaryProperty((const void*)pInput,
|
||||||
pNumValues * sizeof(float),
|
pNumValues * sizeof(float),
|
||||||
pKey,type,index,aiPTI_Float);
|
pKey,type,index,aiPTI_Float);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
template<>
|
template<>
|
||||||
inline aiReturn aiMaterial::AddProperty<aiUVTransform>(const aiUVTransform* pInput,
|
inline aiReturn aiMaterial::AddProperty<aiUVTransform>(const aiUVTransform* pInput,
|
||||||
const unsigned int pNumValues,
|
const unsigned int pNumValues,
|
||||||
const char* pKey,
|
const char* pKey,
|
||||||
unsigned int type,
|
unsigned int type,
|
||||||
unsigned int index)
|
unsigned int index)
|
||||||
{
|
{
|
||||||
return AddBinaryProperty((const void*)pInput,
|
return AddBinaryProperty((const void*)pInput,
|
||||||
pNumValues * sizeof(aiUVTransform),
|
pNumValues * sizeof(aiUVTransform),
|
||||||
pKey,type,index,aiPTI_Float);
|
pKey,type,index,aiPTI_Float);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
template<>
|
template<>
|
||||||
inline aiReturn aiMaterial::AddProperty<aiColor4D>(const aiColor4D* pInput,
|
inline aiReturn aiMaterial::AddProperty<aiColor4D>(const aiColor4D* pInput,
|
||||||
const unsigned int pNumValues,
|
const unsigned int pNumValues,
|
||||||
const char* pKey,
|
const char* pKey,
|
||||||
unsigned int type,
|
unsigned int type,
|
||||||
unsigned int index)
|
unsigned int index)
|
||||||
{
|
{
|
||||||
return AddBinaryProperty((const void*)pInput,
|
return AddBinaryProperty((const void*)pInput,
|
||||||
pNumValues * sizeof(aiColor4D),
|
pNumValues * sizeof(aiColor4D),
|
||||||
pKey,type,index,aiPTI_Float);
|
pKey,type,index,aiPTI_Float);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
template<>
|
template<>
|
||||||
inline aiReturn aiMaterial::AddProperty<aiColor3D>(const aiColor3D* pInput,
|
inline aiReturn aiMaterial::AddProperty<aiColor3D>(const aiColor3D* pInput,
|
||||||
const unsigned int pNumValues,
|
const unsigned int pNumValues,
|
||||||
const char* pKey,
|
const char* pKey,
|
||||||
unsigned int type,
|
unsigned int type,
|
||||||
unsigned int index)
|
unsigned int index)
|
||||||
{
|
{
|
||||||
return AddBinaryProperty((const void*)pInput,
|
return AddBinaryProperty((const void*)pInput,
|
||||||
pNumValues * sizeof(aiColor3D),
|
pNumValues * sizeof(aiColor3D),
|
||||||
pKey,type,index,aiPTI_Float);
|
pKey,type,index,aiPTI_Float);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
template<>
|
template<>
|
||||||
inline aiReturn aiMaterial::AddProperty<aiVector3D>(const aiVector3D* pInput,
|
inline aiReturn aiMaterial::AddProperty<aiVector3D>(const aiVector3D* pInput,
|
||||||
const unsigned int pNumValues,
|
const unsigned int pNumValues,
|
||||||
const char* pKey,
|
const char* pKey,
|
||||||
unsigned int type,
|
unsigned int type,
|
||||||
unsigned int index)
|
unsigned int index)
|
||||||
{
|
{
|
||||||
return AddBinaryProperty((const void*)pInput,
|
return AddBinaryProperty((const void*)pInput,
|
||||||
pNumValues * sizeof(aiVector3D),
|
pNumValues * sizeof(aiVector3D),
|
||||||
pKey,type,index,aiPTI_Float);
|
pKey,type,index,aiPTI_Float);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
template<>
|
template<>
|
||||||
inline aiReturn aiMaterial::AddProperty<int>(const int* pInput,
|
inline aiReturn aiMaterial::AddProperty<int>(const int* pInput,
|
||||||
const unsigned int pNumValues,
|
const unsigned int pNumValues,
|
||||||
const char* pKey,
|
const char* pKey,
|
||||||
unsigned int type,
|
unsigned int type,
|
||||||
unsigned int index)
|
unsigned int index)
|
||||||
{
|
{
|
||||||
return AddBinaryProperty((const void*)pInput,
|
return AddBinaryProperty((const void*)pInput,
|
||||||
pNumValues * sizeof(int),
|
pNumValues * sizeof(int),
|
||||||
pKey,type,index,aiPTI_Integer);
|
pKey,type,index,aiPTI_Integer);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! @endcond
|
//! @endcond
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,16 +25,16 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@@ -55,7 +55,7 @@ template <typename T> class aiVector2t;
|
|||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Represents a row-major 3x3 matrix
|
/** @brief Represents a row-major 3x3 matrix
|
||||||
*
|
*
|
||||||
* There's much confusion about matrix layouts (column vs. row order).
|
* There's much confusion about matrix layouts (column vs. row order).
|
||||||
* This is *always* a row-major matrix. Not even with the
|
* This is *always* a row-major matrix. Not even with the
|
||||||
* #aiProcess_ConvertToLeftHanded flag, which absolutely does not affect
|
* #aiProcess_ConvertToLeftHanded flag, which absolutely does not affect
|
||||||
* matrix order - it just affects the handedness of the coordinate system
|
* matrix order - it just affects the handedness of the coordinate system
|
||||||
@@ -66,105 +66,103 @@ class aiMatrix3x3t
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
aiMatrix3x3t () :
|
aiMatrix3x3t () :
|
||||||
a1(static_cast<TReal>(1.0f)), a2(), a3(),
|
a1(static_cast<TReal>(1.0f)), a2(), a3(),
|
||||||
b1(), b2(static_cast<TReal>(1.0f)), b3(),
|
b1(), b2(static_cast<TReal>(1.0f)), b3(),
|
||||||
c1(), c2(), c3(static_cast<TReal>(1.0f)) {}
|
c1(), c2(), c3(static_cast<TReal>(1.0f)) {}
|
||||||
|
|
||||||
aiMatrix3x3t ( TReal _a1, TReal _a2, TReal _a3,
|
aiMatrix3x3t ( TReal _a1, TReal _a2, TReal _a3,
|
||||||
TReal _b1, TReal _b2, TReal _b3,
|
TReal _b1, TReal _b2, TReal _b3,
|
||||||
TReal _c1, TReal _c2, TReal _c3) :
|
TReal _c1, TReal _c2, TReal _c3) :
|
||||||
a1(_a1), a2(_a2), a3(_a3),
|
a1(_a1), a2(_a2), a3(_a3),
|
||||||
b1(_b1), b2(_b2), b3(_b3),
|
b1(_b1), b2(_b2), b3(_b3),
|
||||||
c1(_c1), c2(_c2), c3(_c3)
|
c1(_c1), c2(_c2), c3(_c3)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// matrix multiplication.
|
// matrix multiplication.
|
||||||
aiMatrix3x3t& operator *= (const aiMatrix3x3t& m);
|
aiMatrix3x3t& operator *= (const aiMatrix3x3t& m);
|
||||||
aiMatrix3x3t operator * (const aiMatrix3x3t& m) const;
|
aiMatrix3x3t operator * (const aiMatrix3x3t& m) const;
|
||||||
|
|
||||||
// array access operators
|
// array access operators
|
||||||
TReal* operator[] (unsigned int p_iIndex);
|
TReal* operator[] (unsigned int p_iIndex);
|
||||||
const TReal* operator[] (unsigned int p_iIndex) const;
|
const TReal* operator[] (unsigned int p_iIndex) const;
|
||||||
|
|
||||||
// comparison operators
|
// comparison operators
|
||||||
bool operator== (const aiMatrix4x4t<TReal>& m) const;
|
bool operator== (const aiMatrix4x4t<TReal>& m) const;
|
||||||
bool operator!= (const aiMatrix4x4t<TReal>& m) const;
|
bool operator!= (const aiMatrix4x4t<TReal>& m) const;
|
||||||
|
|
||||||
bool Equal(const aiMatrix4x4t<TReal>& m, TReal epsilon = 1e-6) const;
|
bool Equal(const aiMatrix4x4t<TReal>& m, TReal epsilon = 1e-6) const;
|
||||||
|
|
||||||
template <typename TOther>
|
template <typename TOther>
|
||||||
operator aiMatrix3x3t<TOther> () const;
|
operator aiMatrix3x3t<TOther> () const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Construction from a 4x4 matrix. The remaining parts
|
/** @brief Construction from a 4x4 matrix. The remaining parts
|
||||||
* of the matrix are ignored.
|
* of the matrix are ignored.
|
||||||
*/
|
*/
|
||||||
explicit aiMatrix3x3t( const aiMatrix4x4t<TReal>& pMatrix);
|
explicit aiMatrix3x3t( const aiMatrix4x4t<TReal>& pMatrix);
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Transpose the matrix
|
/** @brief Transpose the matrix
|
||||||
*/
|
*/
|
||||||
aiMatrix3x3t& Transpose();
|
aiMatrix3x3t& Transpose();
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Invert the matrix.
|
/** @brief Invert the matrix.
|
||||||
* If the matrix is not invertible all elements are set to qnan.
|
* If the matrix is not invertible all elements are set to qnan.
|
||||||
* Beware, use (f != f) to check whether a TReal f is qnan.
|
* Beware, use (f != f) to check whether a TReal f is qnan.
|
||||||
*/
|
*/
|
||||||
aiMatrix3x3t& Inverse();
|
aiMatrix3x3t& Inverse();
|
||||||
TReal Determinant() const;
|
TReal Determinant() const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Returns a rotation matrix for a rotation around z
|
/** @brief Returns a rotation matrix for a rotation around z
|
||||||
* @param a Rotation angle, in radians
|
* @param a Rotation angle, in radians
|
||||||
* @param out Receives the output matrix
|
* @param out Receives the output matrix
|
||||||
* @return Reference to the output matrix
|
* @return Reference to the output matrix
|
||||||
*/
|
*/
|
||||||
static aiMatrix3x3t& RotationZ(TReal a, aiMatrix3x3t& out);
|
static aiMatrix3x3t& RotationZ(TReal a, aiMatrix3x3t& out);
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Returns a rotation matrix for a rotation around
|
/** @brief Returns a rotation matrix for a rotation around
|
||||||
* an arbitrary axis.
|
* an arbitrary axis.
|
||||||
*
|
*
|
||||||
* @param a Rotation angle, in radians
|
* @param a Rotation angle, in radians
|
||||||
* @param axis Axis to rotate around
|
* @param axis Axis to rotate around
|
||||||
* @param out To be filled
|
* @param out To be filled
|
||||||
*/
|
*/
|
||||||
static aiMatrix3x3t& Rotation( TReal a,
|
static aiMatrix3x3t& Rotation( TReal a,
|
||||||
const aiVector3t<TReal>& axis, aiMatrix3x3t& out);
|
const aiVector3t<TReal>& axis, aiMatrix3x3t& out);
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Returns a translation matrix
|
/** @brief Returns a translation matrix
|
||||||
* @param v Translation vector
|
* @param v Translation vector
|
||||||
* @param out Receives the output matrix
|
* @param out Receives the output matrix
|
||||||
* @return Reference to the output matrix
|
* @return Reference to the output matrix
|
||||||
*/
|
*/
|
||||||
static aiMatrix3x3t& Translation( const aiVector2t<TReal>& v, aiMatrix3x3t& out);
|
static aiMatrix3x3t& Translation( const aiVector2t<TReal>& v, aiMatrix3x3t& out);
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief A function for creating a rotation matrix that rotates a
|
/** @brief A function for creating a rotation matrix that rotates a
|
||||||
* vector called "from" into another vector called "to".
|
* vector called "from" into another vector called "to".
|
||||||
* Input : from[3], to[3] which both must be *normalized* non-zero vectors
|
* Input : from[3], to[3] which both must be *normalized* non-zero vectors
|
||||||
* Output: mtx[3][3] -- a 3x3 matrix in colum-major form
|
* Output: mtx[3][3] -- a 3x3 matrix in colum-major form
|
||||||
* Authors: Tomas M<>ller, John Hughes
|
* Authors: Tomas M<>ller, John Hughes
|
||||||
* "Efficiently Building a Matrix to Rotate One Vector to Another"
|
* "Efficiently Building a Matrix to Rotate One Vector to Another"
|
||||||
* Journal of Graphics Tools, 4(4):1-4, 1999
|
* Journal of Graphics Tools, 4(4):1-4, 1999
|
||||||
*/
|
*/
|
||||||
static aiMatrix3x3t& FromToMatrix(const aiVector3t<TReal>& from,
|
static aiMatrix3x3t& FromToMatrix(const aiVector3t<TReal>& from,
|
||||||
const aiVector3t<TReal>& to, aiMatrix3x3t& out);
|
const aiVector3t<TReal>& to, aiMatrix3x3t& out);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
TReal a1, a2, a3;
|
||||||
|
TReal b1, b2, b3;
|
||||||
TReal a1, a2, a3;
|
TReal c1, c2, c3;
|
||||||
TReal b1, b2, b3;
|
|
||||||
TReal c1, c2, c3;
|
|
||||||
} PACK_STRUCT;
|
} PACK_STRUCT;
|
||||||
|
|
||||||
typedef aiMatrix3x3t<float> aiMatrix3x3;
|
typedef aiMatrix3x3t<float> aiMatrix3x3;
|
||||||
@@ -172,13 +170,12 @@ typedef aiMatrix3x3t<float> aiMatrix3x3;
|
|||||||
#else
|
#else
|
||||||
|
|
||||||
struct aiMatrix3x3 {
|
struct aiMatrix3x3 {
|
||||||
|
float a1, a2, a3;
|
||||||
float a1, a2, a3;
|
float b1, b2, b3;
|
||||||
float b1, b2, b3;
|
float c1, c2, c3;
|
||||||
float c1, c2, c3;
|
|
||||||
} PACK_STRUCT;
|
} PACK_STRUCT;
|
||||||
|
|
||||||
#endif
|
#endif // __cplusplus
|
||||||
|
|
||||||
#include "./Compiler/poppack1.h"
|
#include "./Compiler/poppack1.h"
|
||||||
|
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,21 +25,21 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @file aiMatrix3x3.inl
|
/** @file matrix3x3.inl
|
||||||
* @brief Inline implementation of the 3x3 matrix operators
|
* @brief Inline implementation of the 3x3 matrix operators
|
||||||
*/
|
*/
|
||||||
#ifndef AI_MATRIX3x3_INL_INC
|
#ifndef AI_MATRIX3x3_INL_INC
|
||||||
@@ -58,25 +58,25 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiMatrix3x3t<TReal>::aiMatrix3x3t( const aiMatrix4x4t<TReal>& pMatrix)
|
inline aiMatrix3x3t<TReal>::aiMatrix3x3t( const aiMatrix4x4t<TReal>& pMatrix)
|
||||||
{
|
{
|
||||||
a1 = pMatrix.a1; a2 = pMatrix.a2; a3 = pMatrix.a3;
|
a1 = pMatrix.a1; a2 = pMatrix.a2; a3 = pMatrix.a3;
|
||||||
b1 = pMatrix.b1; b2 = pMatrix.b2; b3 = pMatrix.b3;
|
b1 = pMatrix.b1; b2 = pMatrix.b2; b3 = pMatrix.b3;
|
||||||
c1 = pMatrix.c1; c2 = pMatrix.c2; c3 = pMatrix.c3;
|
c1 = pMatrix.c1; c2 = pMatrix.c2; c3 = pMatrix.c3;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::operator *= (const aiMatrix3x3t<TReal>& m)
|
inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::operator *= (const aiMatrix3x3t<TReal>& m)
|
||||||
{
|
{
|
||||||
*this = aiMatrix3x3t<TReal>(m.a1 * a1 + m.b1 * a2 + m.c1 * a3,
|
*this = aiMatrix3x3t<TReal>(m.a1 * a1 + m.b1 * a2 + m.c1 * a3,
|
||||||
m.a2 * a1 + m.b2 * a2 + m.c2 * a3,
|
m.a2 * a1 + m.b2 * a2 + m.c2 * a3,
|
||||||
m.a3 * a1 + m.b3 * a2 + m.c3 * a3,
|
m.a3 * a1 + m.b3 * a2 + m.c3 * a3,
|
||||||
m.a1 * b1 + m.b1 * b2 + m.c1 * b3,
|
m.a1 * b1 + m.b1 * b2 + m.c1 * b3,
|
||||||
m.a2 * b1 + m.b2 * b2 + m.c2 * b3,
|
m.a2 * b1 + m.b2 * b2 + m.c2 * b3,
|
||||||
m.a3 * b1 + m.b3 * b2 + m.c3 * b3,
|
m.a3 * b1 + m.b3 * b2 + m.c3 * b3,
|
||||||
m.a1 * c1 + m.b1 * c2 + m.c1 * c3,
|
m.a1 * c1 + m.b1 * c2 + m.c1 * c3,
|
||||||
m.a2 * c1 + m.b2 * c2 + m.c2 * c3,
|
m.a2 * c1 + m.b2 * c2 + m.c2 * c3,
|
||||||
m.a3 * c1 + m.b3 * c2 + m.c3 * c3);
|
m.a3 * c1 + m.b3 * c2 + m.c3 * c3);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
@@ -84,130 +84,130 @@ template <typename TReal>
|
|||||||
template <typename TOther>
|
template <typename TOther>
|
||||||
aiMatrix3x3t<TReal>::operator aiMatrix3x3t<TOther> () const
|
aiMatrix3x3t<TReal>::operator aiMatrix3x3t<TOther> () const
|
||||||
{
|
{
|
||||||
return aiMatrix3x3t<TOther>(static_cast<TOther>(a1),static_cast<TOther>(a2),static_cast<TOther>(a3),
|
return aiMatrix3x3t<TOther>(static_cast<TOther>(a1),static_cast<TOther>(a2),static_cast<TOther>(a3),
|
||||||
static_cast<TOther>(b1),static_cast<TOther>(b2),static_cast<TOther>(b3),
|
static_cast<TOther>(b1),static_cast<TOther>(b2),static_cast<TOther>(b3),
|
||||||
static_cast<TOther>(c1),static_cast<TOther>(c2),static_cast<TOther>(c3));
|
static_cast<TOther>(c1),static_cast<TOther>(c2),static_cast<TOther>(c3));
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiMatrix3x3t<TReal> aiMatrix3x3t<TReal>::operator* (const aiMatrix3x3t<TReal>& m) const
|
inline aiMatrix3x3t<TReal> aiMatrix3x3t<TReal>::operator* (const aiMatrix3x3t<TReal>& m) const
|
||||||
{
|
{
|
||||||
aiMatrix3x3t<TReal> temp( *this);
|
aiMatrix3x3t<TReal> temp( *this);
|
||||||
temp *= m;
|
temp *= m;
|
||||||
return temp;
|
return temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline TReal* aiMatrix3x3t<TReal>::operator[] (unsigned int p_iIndex)
|
inline TReal* aiMatrix3x3t<TReal>::operator[] (unsigned int p_iIndex)
|
||||||
{
|
{
|
||||||
return &this->a1 + p_iIndex * 3;
|
return &this->a1 + p_iIndex * 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline const TReal* aiMatrix3x3t<TReal>::operator[] (unsigned int p_iIndex) const
|
inline const TReal* aiMatrix3x3t<TReal>::operator[] (unsigned int p_iIndex) const
|
||||||
{
|
{
|
||||||
return &this->a1 + p_iIndex * 3;
|
return &this->a1 + p_iIndex * 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline bool aiMatrix3x3t<TReal>::operator== (const aiMatrix4x4t<TReal>& m) const
|
inline bool aiMatrix3x3t<TReal>::operator== (const aiMatrix4x4t<TReal>& m) const
|
||||||
{
|
{
|
||||||
return a1 == m.a1 && a2 == m.a2 && a3 == m.a3 &&
|
return a1 == m.a1 && a2 == m.a2 && a3 == m.a3 &&
|
||||||
b1 == m.b1 && b2 == m.b2 && b3 == m.b3 &&
|
b1 == m.b1 && b2 == m.b2 && b3 == m.b3 &&
|
||||||
c1 == m.c1 && c2 == m.c2 && c3 == m.c3;
|
c1 == m.c1 && c2 == m.c2 && c3 == m.c3;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline bool aiMatrix3x3t<TReal>::operator!= (const aiMatrix4x4t<TReal>& m) const
|
inline bool aiMatrix3x3t<TReal>::operator!= (const aiMatrix4x4t<TReal>& m) const
|
||||||
{
|
{
|
||||||
return !(*this == m);
|
return !(*this == m);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
template<typename TReal>
|
template<typename TReal>
|
||||||
inline bool aiMatrix3x3t<TReal>::Equal(const aiMatrix4x4t<TReal>& m, TReal epsilon) const {
|
inline bool aiMatrix3x3t<TReal>::Equal(const aiMatrix4x4t<TReal>& m, TReal epsilon) const {
|
||||||
return
|
return
|
||||||
std::abs(a1 - m.a1) <= epsilon &&
|
std::abs(a1 - m.a1) <= epsilon &&
|
||||||
std::abs(a2 - m.a2) <= epsilon &&
|
std::abs(a2 - m.a2) <= epsilon &&
|
||||||
std::abs(a3 - m.a3) <= epsilon &&
|
std::abs(a3 - m.a3) <= epsilon &&
|
||||||
std::abs(b1 - m.b1) <= epsilon &&
|
std::abs(b1 - m.b1) <= epsilon &&
|
||||||
std::abs(b2 - m.b2) <= epsilon &&
|
std::abs(b2 - m.b2) <= epsilon &&
|
||||||
std::abs(b3 - m.b3) <= epsilon &&
|
std::abs(b3 - m.b3) <= epsilon &&
|
||||||
std::abs(c1 - m.c1) <= epsilon &&
|
std::abs(c1 - m.c1) <= epsilon &&
|
||||||
std::abs(c2 - m.c2) <= epsilon &&
|
std::abs(c2 - m.c2) <= epsilon &&
|
||||||
std::abs(c3 - m.c3) <= epsilon;
|
std::abs(c3 - m.c3) <= epsilon;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::Transpose()
|
inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::Transpose()
|
||||||
{
|
{
|
||||||
// (TReal&) don't remove, GCC complains cause of packed fields
|
// (TReal&) don't remove, GCC complains cause of packed fields
|
||||||
std::swap( (TReal&)a2, (TReal&)b1);
|
std::swap( (TReal&)a2, (TReal&)b1);
|
||||||
std::swap( (TReal&)a3, (TReal&)c1);
|
std::swap( (TReal&)a3, (TReal&)c1);
|
||||||
std::swap( (TReal&)b3, (TReal&)c2);
|
std::swap( (TReal&)b3, (TReal&)c2);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline TReal aiMatrix3x3t<TReal>::Determinant() const
|
inline TReal aiMatrix3x3t<TReal>::Determinant() const
|
||||||
{
|
{
|
||||||
return a1*b2*c3 - a1*b3*c2 + a2*b3*c1 - a2*b1*c3 + a3*b1*c2 - a3*b2*c1;
|
return a1*b2*c3 - a1*b3*c2 + a2*b3*c1 - a2*b1*c3 + a3*b1*c2 - a3*b2*c1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::Inverse()
|
inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::Inverse()
|
||||||
{
|
{
|
||||||
// Compute the reciprocal determinant
|
// Compute the reciprocal determinant
|
||||||
TReal det = Determinant();
|
TReal det = Determinant();
|
||||||
if(det == static_cast<TReal>(0.0))
|
if(det == static_cast<TReal>(0.0))
|
||||||
{
|
{
|
||||||
// Matrix not invertible. Setting all elements to nan is not really
|
// Matrix not invertible. Setting all elements to nan is not really
|
||||||
// correct in a mathematical sense; but at least qnans are easy to
|
// correct in a mathematical sense; but at least qnans are easy to
|
||||||
// spot. XXX we might throw an exception instead, which would
|
// spot. XXX we might throw an exception instead, which would
|
||||||
// be even much better to spot :/.
|
// be even much better to spot :/.
|
||||||
const TReal nan = std::numeric_limits<TReal>::quiet_NaN();
|
const TReal nan = std::numeric_limits<TReal>::quiet_NaN();
|
||||||
*this = aiMatrix3x3t<TReal>( nan,nan,nan,nan,nan,nan,nan,nan,nan);
|
*this = aiMatrix3x3t<TReal>( nan,nan,nan,nan,nan,nan,nan,nan,nan);
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
TReal invdet = static_cast<TReal>(1.0) / det;
|
TReal invdet = static_cast<TReal>(1.0) / det;
|
||||||
|
|
||||||
aiMatrix3x3t<TReal> res;
|
aiMatrix3x3t<TReal> res;
|
||||||
res.a1 = invdet * (b2 * c3 - b3 * c2);
|
res.a1 = invdet * (b2 * c3 - b3 * c2);
|
||||||
res.a2 = -invdet * (a2 * c3 - a3 * c2);
|
res.a2 = -invdet * (a2 * c3 - a3 * c2);
|
||||||
res.a3 = invdet * (a2 * b3 - a3 * b2);
|
res.a3 = invdet * (a2 * b3 - a3 * b2);
|
||||||
res.b1 = -invdet * (b1 * c3 - b3 * c1);
|
res.b1 = -invdet * (b1 * c3 - b3 * c1);
|
||||||
res.b2 = invdet * (a1 * c3 - a3 * c1);
|
res.b2 = invdet * (a1 * c3 - a3 * c1);
|
||||||
res.b3 = -invdet * (a1 * b3 - a3 * b1);
|
res.b3 = -invdet * (a1 * b3 - a3 * b1);
|
||||||
res.c1 = invdet * (b1 * c2 - b2 * c1);
|
res.c1 = invdet * (b1 * c2 - b2 * c1);
|
||||||
res.c2 = -invdet * (a1 * c2 - a2 * c1);
|
res.c2 = -invdet * (a1 * c2 - a2 * c1);
|
||||||
res.c3 = invdet * (a1 * b2 - a2 * b1);
|
res.c3 = invdet * (a1 * b2 - a2 * b1);
|
||||||
*this = res;
|
*this = res;
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::RotationZ(TReal a, aiMatrix3x3t<TReal>& out)
|
inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::RotationZ(TReal a, aiMatrix3x3t<TReal>& out)
|
||||||
{
|
{
|
||||||
out.a1 = out.b2 = ::cos(a);
|
out.a1 = out.b2 = std::cos(a);
|
||||||
out.b1 = ::sin(a);
|
out.b1 = std::sin(a);
|
||||||
out.a2 = - out.b1;
|
out.a2 = - out.b1;
|
||||||
|
|
||||||
out.a3 = out.b3 = out.c1 = out.c2 = 0.f;
|
out.a3 = out.b3 = out.c1 = out.c2 = 0.f;
|
||||||
out.c3 = 1.f;
|
out.c3 = 1.f;
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
@@ -215,7 +215,7 @@ inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::RotationZ(TReal a, aiMatrix3x3t
|
|||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::Rotation( TReal a, const aiVector3t<TReal>& axis, aiMatrix3x3t<TReal>& out)
|
inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::Rotation( TReal a, const aiVector3t<TReal>& axis, aiMatrix3x3t<TReal>& out)
|
||||||
{
|
{
|
||||||
TReal c = cos( a), s = sin( a), t = 1 - c;
|
TReal c = std::cos( a), s = std::sin( a), t = 1 - c;
|
||||||
TReal x = axis.x, y = axis.y, z = axis.z;
|
TReal x = axis.x, y = axis.y, z = axis.z;
|
||||||
|
|
||||||
// Many thanks to MathWorld and Wikipedia
|
// Many thanks to MathWorld and Wikipedia
|
||||||
@@ -230,10 +230,10 @@ inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::Rotation( TReal a, const aiVect
|
|||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::Translation( const aiVector2t<TReal>& v, aiMatrix3x3t<TReal>& out)
|
inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::Translation( const aiVector2t<TReal>& v, aiMatrix3x3t<TReal>& out)
|
||||||
{
|
{
|
||||||
out = aiMatrix3x3t<TReal>();
|
out = aiMatrix3x3t<TReal>();
|
||||||
out.a3 = v.x;
|
out.a3 = v.x;
|
||||||
out.b3 = v.y;
|
out.b3 = v.y;
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
@@ -241,90 +241,94 @@ inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::Translation( const aiVector2t<T
|
|||||||
* "from" into another vector called "to".
|
* "from" into another vector called "to".
|
||||||
* Input : from[3], to[3] which both must be *normalized* non-zero vectors
|
* Input : from[3], to[3] which both must be *normalized* non-zero vectors
|
||||||
* Output: mtx[3][3] -- a 3x3 matrix in colum-major form
|
* Output: mtx[3][3] -- a 3x3 matrix in colum-major form
|
||||||
* Authors: Tomas M<>ller, John Hughes
|
* Authors: Tomas M<>ller, John Hughes
|
||||||
* "Efficiently Building a Matrix to Rotate One Vector to Another"
|
* "Efficiently Building a Matrix to Rotate One Vector to Another"
|
||||||
* Journal of Graphics Tools, 4(4):1-4, 1999
|
* Journal of Graphics Tools, 4(4):1-4, 1999
|
||||||
*/
|
*/
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::FromToMatrix(const aiVector3t<TReal>& from,
|
inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::FromToMatrix(const aiVector3t<TReal>& from,
|
||||||
const aiVector3t<TReal>& to, aiMatrix3x3t<TReal>& mtx)
|
const aiVector3t<TReal>& to, aiMatrix3x3t<TReal>& mtx)
|
||||||
{
|
{
|
||||||
const TReal e = from * to;
|
const TReal e = from * to;
|
||||||
const TReal f = (e < 0)? -e:e;
|
const TReal f = (e < 0)? -e:e;
|
||||||
|
|
||||||
if (f > static_cast<TReal>(1.0) - static_cast<TReal>(0.00001)) /* "from" and "to"-vector almost parallel */
|
if (f > static_cast<TReal>(1.0) - static_cast<TReal>(0.00001)) /* "from" and "to"-vector almost parallel */
|
||||||
{
|
{
|
||||||
aiVector3D u,v; /* temporary storage vectors */
|
aiVector3D u,v; /* temporary storage vectors */
|
||||||
aiVector3D x; /* vector most nearly orthogonal to "from" */
|
aiVector3D x; /* vector most nearly orthogonal to "from" */
|
||||||
|
|
||||||
x.x = (from.x > 0.0)? from.x : -from.x;
|
x.x = (from.x > 0.0)? from.x : -from.x;
|
||||||
x.y = (from.y > 0.0)? from.y : -from.y;
|
x.y = (from.y > 0.0)? from.y : -from.y;
|
||||||
x.z = (from.z > 0.0)? from.z : -from.z;
|
x.z = (from.z > 0.0)? from.z : -from.z;
|
||||||
|
|
||||||
if (x.x < x.y)
|
if (x.x < x.y)
|
||||||
{
|
{
|
||||||
if (x.x < x.z)
|
if (x.x < x.z)
|
||||||
{
|
{
|
||||||
x.x = static_cast<TReal>(1.0); x.y = x.z = static_cast<TReal>(0.0);
|
x.x = static_cast<TReal>(1.0);
|
||||||
}
|
x.y = x.z = static_cast<TReal>(0.0);
|
||||||
else
|
}
|
||||||
{
|
else
|
||||||
x.z = static_cast<TReal>(1.0); x.y = x.z = static_cast<TReal>(0.0);
|
{
|
||||||
}
|
x.z = static_cast<TReal>(1.0);
|
||||||
}
|
x.x = x.y = static_cast<TReal>(0.0);
|
||||||
else
|
}
|
||||||
{
|
}
|
||||||
if (x.y < x.z)
|
else
|
||||||
{
|
{
|
||||||
x.y = static_cast<TReal>(1.0); x.x = x.z = static_cast<TReal>(0.0);
|
if (x.y < x.z)
|
||||||
}
|
{
|
||||||
else
|
x.y = static_cast<TReal>(1.0);
|
||||||
{
|
x.x = x.z = static_cast<TReal>(0.0);
|
||||||
x.z = static_cast<TReal>(1.0); x.x = x.y = static_cast<TReal>(0.0);
|
}
|
||||||
}
|
else
|
||||||
}
|
{
|
||||||
|
x.z = static_cast<TReal>(1.0);
|
||||||
|
x.x = x.y = static_cast<TReal>(0.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
u.x = x.x - from.x; u.y = x.y - from.y; u.z = x.z - from.z;
|
u.x = x.x - from.x; u.y = x.y - from.y; u.z = x.z - from.z;
|
||||||
v.x = x.x - to.x; v.y = x.y - to.y; v.z = x.z - to.z;
|
v.x = x.x - to.x; v.y = x.y - to.y; v.z = x.z - to.z;
|
||||||
|
|
||||||
const TReal c1 = static_cast<TReal>(2.0) / (u * u);
|
const TReal c1 = static_cast<TReal>(2.0) / (u * u);
|
||||||
const TReal c2 = static_cast<TReal>(2.0) / (v * v);
|
const TReal c2 = static_cast<TReal>(2.0) / (v * v);
|
||||||
const TReal c3 = c1 * c2 * (u * v);
|
const TReal c3 = c1 * c2 * (u * v);
|
||||||
|
|
||||||
for (unsigned int i = 0; i < 3; i++)
|
for (unsigned int i = 0; i < 3; i++)
|
||||||
{
|
{
|
||||||
for (unsigned int j = 0; j < 3; j++)
|
for (unsigned int j = 0; j < 3; j++)
|
||||||
{
|
{
|
||||||
mtx[i][j] = - c1 * u[i] * u[j] - c2 * v[i] * v[j]
|
mtx[i][j] = - c1 * u[i] * u[j] - c2 * v[i] * v[j]
|
||||||
+ c3 * v[i] * u[j];
|
+ c3 * v[i] * u[j];
|
||||||
}
|
}
|
||||||
mtx[i][i] += static_cast<TReal>(1.0);
|
mtx[i][i] += static_cast<TReal>(1.0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else /* the most common case, unless "from"="to", or "from"=-"to" */
|
else /* the most common case, unless "from"="to", or "from"=-"to" */
|
||||||
{
|
{
|
||||||
const aiVector3D v = from ^ to;
|
const aiVector3D v = from ^ to;
|
||||||
/* ... use this hand optimized version (9 mults less) */
|
/* ... use this hand optimized version (9 mults less) */
|
||||||
const TReal h = static_cast<TReal>(1.0)/(static_cast<TReal>(1.0) + e); /* optimization by Gottfried Chen */
|
const TReal h = static_cast<TReal>(1.0)/(static_cast<TReal>(1.0) + e); /* optimization by Gottfried Chen */
|
||||||
const TReal hvx = h * v.x;
|
const TReal hvx = h * v.x;
|
||||||
const TReal hvz = h * v.z;
|
const TReal hvz = h * v.z;
|
||||||
const TReal hvxy = hvx * v.y;
|
const TReal hvxy = hvx * v.y;
|
||||||
const TReal hvxz = hvx * v.z;
|
const TReal hvxz = hvx * v.z;
|
||||||
const TReal hvyz = hvz * v.y;
|
const TReal hvyz = hvz * v.y;
|
||||||
mtx[0][0] = e + hvx * v.x;
|
mtx[0][0] = e + hvx * v.x;
|
||||||
mtx[0][1] = hvxy - v.z;
|
mtx[0][1] = hvxy - v.z;
|
||||||
mtx[0][2] = hvxz + v.y;
|
mtx[0][2] = hvxz + v.y;
|
||||||
|
|
||||||
mtx[1][0] = hvxy + v.z;
|
mtx[1][0] = hvxy + v.z;
|
||||||
mtx[1][1] = e + h * v.y * v.y;
|
mtx[1][1] = e + h * v.y * v.y;
|
||||||
mtx[1][2] = hvyz - v.x;
|
mtx[1][2] = hvyz - v.x;
|
||||||
|
|
||||||
mtx[2][0] = hvxz - v.y;
|
mtx[2][0] = hvxz - v.y;
|
||||||
mtx[2][1] = hvyz + v.x;
|
mtx[2][1] = hvyz + v.x;
|
||||||
mtx[2][2] = e + hvz * v.z;
|
mtx[2][2] = e + hvz * v.z;
|
||||||
}
|
}
|
||||||
return mtx;
|
return mtx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,16 +25,16 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@@ -44,6 +44,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#ifndef AI_MATRIX4X4_H_INC
|
#ifndef AI_MATRIX4X4_H_INC
|
||||||
#define AI_MATRIX4X4_H_INC
|
#define AI_MATRIX4X4_H_INC
|
||||||
|
|
||||||
|
#include "vector3.h"
|
||||||
#include "./Compiler/pushpack1.h"
|
#include "./Compiler/pushpack1.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@@ -55,7 +56,7 @@ template<typename TReal> class aiQuaterniont;
|
|||||||
/** @brief Represents a row-major 4x4 matrix, use this for homogeneous
|
/** @brief Represents a row-major 4x4 matrix, use this for homogeneous
|
||||||
* coordinates.
|
* coordinates.
|
||||||
*
|
*
|
||||||
* There's much confusion about matrix layouts (column vs. row order).
|
* There's much confusion about matrix layouts (column vs. row order).
|
||||||
* This is *always* a row-major matrix. Not even with the
|
* This is *always* a row-major matrix. Not even with the
|
||||||
* #aiProcess_ConvertToLeftHanded flag, which absolutely does not affect
|
* #aiProcess_ConvertToLeftHanded flag, which absolutely does not affect
|
||||||
* matrix order - it just affects the handedness of the coordinate system
|
* matrix order - it just affects the handedness of the coordinate system
|
||||||
@@ -65,180 +66,178 @@ template<typename TReal>
|
|||||||
class aiMatrix4x4t
|
class aiMatrix4x4t
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/** set to identity */
|
|
||||||
aiMatrix4x4t ();
|
|
||||||
|
|
||||||
/** construction from single values */
|
/** set to identity */
|
||||||
aiMatrix4x4t ( TReal _a1, TReal _a2, TReal _a3, TReal _a4,
|
aiMatrix4x4t ();
|
||||||
TReal _b1, TReal _b2, TReal _b3, TReal _b4,
|
|
||||||
TReal _c1, TReal _c2, TReal _c3, TReal _c4,
|
/** construction from single values */
|
||||||
TReal _d1, TReal _d2, TReal _d3, TReal _d4);
|
aiMatrix4x4t ( TReal _a1, TReal _a2, TReal _a3, TReal _a4,
|
||||||
|
TReal _b1, TReal _b2, TReal _b3, TReal _b4,
|
||||||
|
TReal _c1, TReal _c2, TReal _c3, TReal _c4,
|
||||||
|
TReal _d1, TReal _d2, TReal _d3, TReal _d4);
|
||||||
|
|
||||||
|
|
||||||
/** construction from 3x3 matrix, remaining elements are set to identity */
|
/** construction from 3x3 matrix, remaining elements are set to identity */
|
||||||
explicit aiMatrix4x4t( const aiMatrix3x3t<TReal>& m);
|
explicit aiMatrix4x4t( const aiMatrix3x3t<TReal>& m);
|
||||||
|
|
||||||
/** construction from position, rotation and scaling components
|
/** construction from position, rotation and scaling components
|
||||||
* @param scaling The scaling for the x,y,z axes
|
* @param scaling The scaling for the x,y,z axes
|
||||||
* @param rotation The rotation as a hamilton quaternion
|
* @param rotation The rotation as a hamilton quaternion
|
||||||
* @param position The position for the x,y,z axes
|
* @param position The position for the x,y,z axes
|
||||||
*/
|
*/
|
||||||
aiMatrix4x4t(const aiVector3t<TReal>& scaling, const aiQuaterniont<TReal>& rotation,
|
aiMatrix4x4t(const aiVector3t<TReal>& scaling, const aiQuaterniont<TReal>& rotation,
|
||||||
const aiVector3t<TReal>& position);
|
const aiVector3t<TReal>& position);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// array access operators
|
// array access operators
|
||||||
TReal* operator[] (unsigned int p_iIndex);
|
TReal* operator[] (unsigned int p_iIndex);
|
||||||
const TReal* operator[] (unsigned int p_iIndex) const;
|
const TReal* operator[] (unsigned int p_iIndex) const;
|
||||||
|
|
||||||
// comparison operators
|
// comparison operators
|
||||||
bool operator== (const aiMatrix4x4t& m) const;
|
bool operator== (const aiMatrix4x4t& m) const;
|
||||||
bool operator!= (const aiMatrix4x4t& m) const;
|
bool operator!= (const aiMatrix4x4t& m) const;
|
||||||
|
|
||||||
bool Equal(const aiMatrix4x4t& m, TReal epsilon = 1e-6) const;
|
bool Equal(const aiMatrix4x4t& m, TReal epsilon = 1e-6) const;
|
||||||
|
|
||||||
// matrix multiplication.
|
// matrix multiplication.
|
||||||
aiMatrix4x4t& operator *= (const aiMatrix4x4t& m);
|
aiMatrix4x4t& operator *= (const aiMatrix4x4t& m);
|
||||||
aiMatrix4x4t operator * (const aiMatrix4x4t& m) const;
|
aiMatrix4x4t operator * (const aiMatrix4x4t& m) const;
|
||||||
|
|
||||||
template <typename TOther>
|
template <typename TOther>
|
||||||
operator aiMatrix4x4t<TOther> () const;
|
operator aiMatrix4x4t<TOther> () const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Transpose the matrix */
|
/** @brief Transpose the matrix */
|
||||||
aiMatrix4x4t& Transpose();
|
aiMatrix4x4t& Transpose();
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Invert the matrix.
|
/** @brief Invert the matrix.
|
||||||
* If the matrix is not invertible all elements are set to qnan.
|
* If the matrix is not invertible all elements are set to qnan.
|
||||||
* Beware, use (f != f) to check whether a TReal f is qnan.
|
* Beware, use (f != f) to check whether a TReal f is qnan.
|
||||||
*/
|
*/
|
||||||
aiMatrix4x4t& Inverse();
|
aiMatrix4x4t& Inverse();
|
||||||
TReal Determinant() const;
|
TReal Determinant() const;
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Returns true of the matrix is the identity matrix.
|
/** @brief Returns true of the matrix is the identity matrix.
|
||||||
* The check is performed against a not so small epsilon.
|
* The check is performed against a not so small epsilon.
|
||||||
*/
|
*/
|
||||||
inline bool IsIdentity() const;
|
inline bool IsIdentity() const;
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Decompose a trafo matrix into its original components
|
/** @brief Decompose a trafo matrix into its original components
|
||||||
* @param scaling Receives the output scaling for the x,y,z axes
|
* @param scaling Receives the output scaling for the x,y,z axes
|
||||||
* @param rotation Receives the output rotation as a hamilton
|
* @param rotation Receives the output rotation as a hamilton
|
||||||
* quaternion
|
* quaternion
|
||||||
* @param position Receives the output position for the x,y,z axes
|
* @param position Receives the output position for the x,y,z axes
|
||||||
*/
|
*/
|
||||||
void Decompose (aiVector3t<TReal>& scaling, aiQuaterniont<TReal>& rotation,
|
void Decompose (aiVector3t<TReal>& scaling, aiQuaterniont<TReal>& rotation,
|
||||||
aiVector3t<TReal>& position) const;
|
aiVector3t<TReal>& position) const;
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Decompose a trafo matrix with no scaling into its
|
/** @brief Decompose a trafo matrix with no scaling into its
|
||||||
* original components
|
* original components
|
||||||
* @param rotation Receives the output rotation as a hamilton
|
* @param rotation Receives the output rotation as a hamilton
|
||||||
* quaternion
|
* quaternion
|
||||||
* @param position Receives the output position for the x,y,z axes
|
* @param position Receives the output position for the x,y,z axes
|
||||||
*/
|
*/
|
||||||
void DecomposeNoScaling (aiQuaterniont<TReal>& rotation,
|
void DecomposeNoScaling (aiQuaterniont<TReal>& rotation,
|
||||||
aiVector3t<TReal>& position) const;
|
aiVector3t<TReal>& position) const;
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Creates a trafo matrix from a set of euler angles
|
/** @brief Creates a trafo matrix from a set of euler angles
|
||||||
* @param x Rotation angle for the x-axis, in radians
|
* @param x Rotation angle for the x-axis, in radians
|
||||||
* @param y Rotation angle for the y-axis, in radians
|
* @param y Rotation angle for the y-axis, in radians
|
||||||
* @param z Rotation angle for the z-axis, in radians
|
* @param z Rotation angle for the z-axis, in radians
|
||||||
*/
|
*/
|
||||||
aiMatrix4x4t& FromEulerAnglesXYZ(TReal x, TReal y, TReal z);
|
aiMatrix4x4t& FromEulerAnglesXYZ(TReal x, TReal y, TReal z);
|
||||||
aiMatrix4x4t& FromEulerAnglesXYZ(const aiVector3t<TReal>& blubb);
|
aiMatrix4x4t& FromEulerAnglesXYZ(const aiVector3t<TReal>& blubb);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Returns a rotation matrix for a rotation around the x axis
|
/** @brief Returns a rotation matrix for a rotation around the x axis
|
||||||
* @param a Rotation angle, in radians
|
* @param a Rotation angle, in radians
|
||||||
* @param out Receives the output matrix
|
* @param out Receives the output matrix
|
||||||
* @return Reference to the output matrix
|
* @return Reference to the output matrix
|
||||||
*/
|
*/
|
||||||
static aiMatrix4x4t& RotationX(TReal a, aiMatrix4x4t& out);
|
static aiMatrix4x4t& RotationX(TReal a, aiMatrix4x4t& out);
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Returns a rotation matrix for a rotation around the y axis
|
/** @brief Returns a rotation matrix for a rotation around the y axis
|
||||||
* @param a Rotation angle, in radians
|
* @param a Rotation angle, in radians
|
||||||
* @param out Receives the output matrix
|
* @param out Receives the output matrix
|
||||||
* @return Reference to the output matrix
|
* @return Reference to the output matrix
|
||||||
*/
|
*/
|
||||||
static aiMatrix4x4t& RotationY(TReal a, aiMatrix4x4t& out);
|
static aiMatrix4x4t& RotationY(TReal a, aiMatrix4x4t& out);
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Returns a rotation matrix for a rotation around the z axis
|
/** @brief Returns a rotation matrix for a rotation around the z axis
|
||||||
* @param a Rotation angle, in radians
|
* @param a Rotation angle, in radians
|
||||||
* @param out Receives the output matrix
|
* @param out Receives the output matrix
|
||||||
* @return Reference to the output matrix
|
* @return Reference to the output matrix
|
||||||
*/
|
*/
|
||||||
static aiMatrix4x4t& RotationZ(TReal a, aiMatrix4x4t& out);
|
static aiMatrix4x4t& RotationZ(TReal a, aiMatrix4x4t& out);
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** Returns a rotation matrix for a rotation around an arbitrary axis.
|
/** Returns a rotation matrix for a rotation around an arbitrary axis.
|
||||||
* @param a Rotation angle, in radians
|
* @param a Rotation angle, in radians
|
||||||
* @param axis Rotation axis, should be a normalized vector.
|
* @param axis Rotation axis, should be a normalized vector.
|
||||||
* @param out Receives the output matrix
|
* @param out Receives the output matrix
|
||||||
* @return Reference to the output matrix
|
* @return Reference to the output matrix
|
||||||
*/
|
*/
|
||||||
static aiMatrix4x4t& Rotation(TReal a, const aiVector3t<TReal>& axis,
|
static aiMatrix4x4t& Rotation(TReal a, const aiVector3t<TReal>& axis,
|
||||||
aiMatrix4x4t& out);
|
aiMatrix4x4t& out);
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Returns a translation matrix
|
/** @brief Returns a translation matrix
|
||||||
* @param v Translation vector
|
* @param v Translation vector
|
||||||
* @param out Receives the output matrix
|
* @param out Receives the output matrix
|
||||||
* @return Reference to the output matrix
|
* @return Reference to the output matrix
|
||||||
*/
|
*/
|
||||||
static aiMatrix4x4t& Translation( const aiVector3t<TReal>& v, aiMatrix4x4t& out);
|
static aiMatrix4x4t& Translation( const aiVector3t<TReal>& v, aiMatrix4x4t& out);
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Returns a scaling matrix
|
/** @brief Returns a scaling matrix
|
||||||
* @param v Scaling vector
|
* @param v Scaling vector
|
||||||
* @param out Receives the output matrix
|
* @param out Receives the output matrix
|
||||||
* @return Reference to the output matrix
|
* @return Reference to the output matrix
|
||||||
*/
|
*/
|
||||||
static aiMatrix4x4t& Scaling( const aiVector3t<TReal>& v, aiMatrix4x4t& out);
|
static aiMatrix4x4t& Scaling( const aiVector3t<TReal>& v, aiMatrix4x4t& out);
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief A function for creating a rotation matrix that rotates a
|
/** @brief A function for creating a rotation matrix that rotates a
|
||||||
* vector called "from" into another vector called "to".
|
* vector called "from" into another vector called "to".
|
||||||
* Input : from[3], to[3] which both must be *normalized* non-zero vectors
|
* Input : from[3], to[3] which both must be *normalized* non-zero vectors
|
||||||
* Output: mtx[3][3] -- a 3x3 matrix in colum-major form
|
* Output: mtx[3][3] -- a 3x3 matrix in column-major form
|
||||||
* Authors: Tomas M<EFBFBD>ller, John Hughes
|
* Authors: Tomas Mueller, John Hughes
|
||||||
* "Efficiently Building a Matrix to Rotate One Vector to Another"
|
* "Efficiently Building a Matrix to Rotate One Vector to Another"
|
||||||
* Journal of Graphics Tools, 4(4):1-4, 1999
|
* Journal of Graphics Tools, 4(4):1-4, 1999
|
||||||
*/
|
*/
|
||||||
static aiMatrix4x4t& FromToMatrix(const aiVector3t<TReal>& from,
|
static aiMatrix4x4t& FromToMatrix(const aiVector3t<TReal>& from,
|
||||||
const aiVector3t<TReal>& to, aiMatrix4x4t& out);
|
const aiVector3t<TReal>& to, aiMatrix4x4t& out);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
TReal a1, a2, a3, a4;
|
||||||
TReal a1, a2, a3, a4;
|
TReal b1, b2, b3, b4;
|
||||||
TReal b1, b2, b3, b4;
|
TReal c1, c2, c3, c4;
|
||||||
TReal c1, c2, c3, c4;
|
TReal d1, d2, d3, d4;
|
||||||
TReal d1, d2, d3, d4;
|
} PACK_STRUCT;
|
||||||
|
|
||||||
} PACK_STRUCT;
|
|
||||||
|
|
||||||
typedef aiMatrix4x4t<float> aiMatrix4x4;
|
typedef aiMatrix4x4t<float> aiMatrix4x4;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
struct aiMatrix4x4 {
|
struct aiMatrix4x4 {
|
||||||
float a1, a2, a3, a4;
|
float a1, a2, a3, a4;
|
||||||
float b1, b2, b3, b4;
|
float b1, b2, b3, b4;
|
||||||
float c1, c2, c3, c4;
|
float c1, c2, c3, c4;
|
||||||
float d1, d2, d3, d4;
|
float d1, d2, d3, d4;
|
||||||
};
|
} PACK_STRUCT;
|
||||||
|
|
||||||
|
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
@@ -39,7 +39,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @file aiMatrix4x4t<TReal>.inl
|
/** @file matrix4x4.inl
|
||||||
* @brief Inline implementation of the 4x4 matrix operators
|
* @brief Inline implementation of the 4x4 matrix operators
|
||||||
*/
|
*/
|
||||||
#ifndef AI_MATRIX4x4_INL_INC
|
#ifndef AI_MATRIX4x4_INL_INC
|
||||||
@@ -53,20 +53,15 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <limits>
|
#include <limits>
|
||||||
|
#include <cmath>
|
||||||
#ifdef __cplusplus
|
|
||||||
# include <cmath>
|
|
||||||
#else
|
|
||||||
# include <math.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
aiMatrix4x4t<TReal> ::aiMatrix4x4t () :
|
aiMatrix4x4t<TReal> ::aiMatrix4x4t () :
|
||||||
a1(1.0f), a2(), a3(), a4(),
|
a1(1.0f), a2(), a3(), a4(),
|
||||||
b1(), b2(1.0f), b3(), b4(),
|
b1(), b2(1.0f), b3(), b4(),
|
||||||
c1(), c2(), c3(1.0f), c4(),
|
c1(), c2(), c3(1.0f), c4(),
|
||||||
d1(), d2(), d3(), d4(1.0f)
|
d1(), d2(), d3(), d4(1.0f)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -74,13 +69,13 @@ aiMatrix4x4t<TReal> ::aiMatrix4x4t () :
|
|||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
aiMatrix4x4t<TReal> ::aiMatrix4x4t (TReal _a1, TReal _a2, TReal _a3, TReal _a4,
|
aiMatrix4x4t<TReal> ::aiMatrix4x4t (TReal _a1, TReal _a2, TReal _a3, TReal _a4,
|
||||||
TReal _b1, TReal _b2, TReal _b3, TReal _b4,
|
TReal _b1, TReal _b2, TReal _b3, TReal _b4,
|
||||||
TReal _c1, TReal _c2, TReal _c3, TReal _c4,
|
TReal _c1, TReal _c2, TReal _c3, TReal _c4,
|
||||||
TReal _d1, TReal _d2, TReal _d3, TReal _d4) :
|
TReal _d1, TReal _d2, TReal _d3, TReal _d4) :
|
||||||
a1(_a1), a2(_a2), a3(_a3), a4(_a4),
|
a1(_a1), a2(_a2), a3(_a3), a4(_a4),
|
||||||
b1(_b1), b2(_b2), b3(_b3), b4(_b4),
|
b1(_b1), b2(_b2), b3(_b3), b4(_b4),
|
||||||
c1(_c1), c2(_c2), c3(_c3), c4(_c4),
|
c1(_c1), c2(_c2), c3(_c3), c4(_c4),
|
||||||
d1(_d1), d2(_d2), d3(_d3), d4(_d4)
|
d1(_d1), d2(_d2), d3(_d3), d4(_d4)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -90,10 +85,10 @@ template <typename TReal>
|
|||||||
template <typename TOther>
|
template <typename TOther>
|
||||||
aiMatrix4x4t<TReal>::operator aiMatrix4x4t<TOther> () const
|
aiMatrix4x4t<TReal>::operator aiMatrix4x4t<TOther> () const
|
||||||
{
|
{
|
||||||
return aiMatrix4x4t<TOther>(static_cast<TOther>(a1),static_cast<TOther>(a2),static_cast<TOther>(a3),static_cast<TOther>(a4),
|
return aiMatrix4x4t<TOther>(static_cast<TOther>(a1),static_cast<TOther>(a2),static_cast<TOther>(a3),static_cast<TOther>(a4),
|
||||||
static_cast<TOther>(b1),static_cast<TOther>(b2),static_cast<TOther>(b3),static_cast<TOther>(b4),
|
static_cast<TOther>(b1),static_cast<TOther>(b2),static_cast<TOther>(b3),static_cast<TOther>(b4),
|
||||||
static_cast<TOther>(c1),static_cast<TOther>(c2),static_cast<TOther>(c3),static_cast<TOther>(c4),
|
static_cast<TOther>(c1),static_cast<TOther>(c2),static_cast<TOther>(c3),static_cast<TOther>(c4),
|
||||||
static_cast<TOther>(d1),static_cast<TOther>(d2),static_cast<TOther>(d3),static_cast<TOther>(d4));
|
static_cast<TOther>(d1),static_cast<TOther>(d2),static_cast<TOther>(d3),static_cast<TOther>(d4));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -101,71 +96,71 @@ aiMatrix4x4t<TReal>::operator aiMatrix4x4t<TOther> () const
|
|||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiMatrix4x4t<TReal>::aiMatrix4x4t (const aiMatrix3x3t<TReal>& m)
|
inline aiMatrix4x4t<TReal>::aiMatrix4x4t (const aiMatrix3x3t<TReal>& m)
|
||||||
{
|
{
|
||||||
a1 = m.a1; a2 = m.a2; a3 = m.a3; a4 = static_cast<TReal>(0.0);
|
a1 = m.a1; a2 = m.a2; a3 = m.a3; a4 = static_cast<TReal>(0.0);
|
||||||
b1 = m.b1; b2 = m.b2; b3 = m.b3; b4 = static_cast<TReal>(0.0);
|
b1 = m.b1; b2 = m.b2; b3 = m.b3; b4 = static_cast<TReal>(0.0);
|
||||||
c1 = m.c1; c2 = m.c2; c3 = m.c3; c4 = static_cast<TReal>(0.0);
|
c1 = m.c1; c2 = m.c2; c3 = m.c3; c4 = static_cast<TReal>(0.0);
|
||||||
d1 = static_cast<TReal>(0.0); d2 = static_cast<TReal>(0.0); d3 = static_cast<TReal>(0.0); d4 = static_cast<TReal>(1.0);
|
d1 = static_cast<TReal>(0.0); d2 = static_cast<TReal>(0.0); d3 = static_cast<TReal>(0.0); d4 = static_cast<TReal>(1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiMatrix4x4t<TReal>::aiMatrix4x4t (const aiVector3t<TReal>& scaling, const aiQuaterniont<TReal>& rotation, const aiVector3t<TReal>& position)
|
inline aiMatrix4x4t<TReal>::aiMatrix4x4t (const aiVector3t<TReal>& scaling, const aiQuaterniont<TReal>& rotation, const aiVector3t<TReal>& position)
|
||||||
{
|
{
|
||||||
// build a 3x3 rotation matrix
|
// build a 3x3 rotation matrix
|
||||||
aiMatrix3x3t<TReal> m = rotation.GetMatrix();
|
aiMatrix3x3t<TReal> m = rotation.GetMatrix();
|
||||||
|
|
||||||
a1 = m.a1 * scaling.x;
|
a1 = m.a1 * scaling.x;
|
||||||
a2 = m.a2 * scaling.x;
|
a2 = m.a2 * scaling.x;
|
||||||
a3 = m.a3 * scaling.x;
|
a3 = m.a3 * scaling.x;
|
||||||
a4 = position.x;
|
a4 = position.x;
|
||||||
|
|
||||||
b1 = m.b1 * scaling.y;
|
b1 = m.b1 * scaling.y;
|
||||||
b2 = m.b2 * scaling.y;
|
b2 = m.b2 * scaling.y;
|
||||||
b3 = m.b3 * scaling.y;
|
b3 = m.b3 * scaling.y;
|
||||||
b4 = position.y;
|
b4 = position.y;
|
||||||
|
|
||||||
c1 = m.c1 * scaling.z;
|
|
||||||
c2 = m.c2 * scaling.z;
|
|
||||||
c3 = m.c3 * scaling.z;
|
|
||||||
c4= position.z;
|
|
||||||
|
|
||||||
d1 = static_cast<TReal>(0.0);
|
c1 = m.c1 * scaling.z;
|
||||||
d2 = static_cast<TReal>(0.0);
|
c2 = m.c2 * scaling.z;
|
||||||
d3 = static_cast<TReal>(0.0);
|
c3 = m.c3 * scaling.z;
|
||||||
d4 = static_cast<TReal>(1.0);
|
c4= position.z;
|
||||||
|
|
||||||
|
d1 = static_cast<TReal>(0.0);
|
||||||
|
d2 = static_cast<TReal>(0.0);
|
||||||
|
d3 = static_cast<TReal>(0.0);
|
||||||
|
d4 = static_cast<TReal>(1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::operator *= (const aiMatrix4x4t<TReal>& m)
|
inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::operator *= (const aiMatrix4x4t<TReal>& m)
|
||||||
{
|
{
|
||||||
*this = aiMatrix4x4t<TReal>(
|
*this = aiMatrix4x4t<TReal>(
|
||||||
m.a1 * a1 + m.b1 * a2 + m.c1 * a3 + m.d1 * a4,
|
m.a1 * a1 + m.b1 * a2 + m.c1 * a3 + m.d1 * a4,
|
||||||
m.a2 * a1 + m.b2 * a2 + m.c2 * a3 + m.d2 * a4,
|
m.a2 * a1 + m.b2 * a2 + m.c2 * a3 + m.d2 * a4,
|
||||||
m.a3 * a1 + m.b3 * a2 + m.c3 * a3 + m.d3 * a4,
|
m.a3 * a1 + m.b3 * a2 + m.c3 * a3 + m.d3 * a4,
|
||||||
m.a4 * a1 + m.b4 * a2 + m.c4 * a3 + m.d4 * a4,
|
m.a4 * a1 + m.b4 * a2 + m.c4 * a3 + m.d4 * a4,
|
||||||
m.a1 * b1 + m.b1 * b2 + m.c1 * b3 + m.d1 * b4,
|
m.a1 * b1 + m.b1 * b2 + m.c1 * b3 + m.d1 * b4,
|
||||||
m.a2 * b1 + m.b2 * b2 + m.c2 * b3 + m.d2 * b4,
|
m.a2 * b1 + m.b2 * b2 + m.c2 * b3 + m.d2 * b4,
|
||||||
m.a3 * b1 + m.b3 * b2 + m.c3 * b3 + m.d3 * b4,
|
m.a3 * b1 + m.b3 * b2 + m.c3 * b3 + m.d3 * b4,
|
||||||
m.a4 * b1 + m.b4 * b2 + m.c4 * b3 + m.d4 * b4,
|
m.a4 * b1 + m.b4 * b2 + m.c4 * b3 + m.d4 * b4,
|
||||||
m.a1 * c1 + m.b1 * c2 + m.c1 * c3 + m.d1 * c4,
|
m.a1 * c1 + m.b1 * c2 + m.c1 * c3 + m.d1 * c4,
|
||||||
m.a2 * c1 + m.b2 * c2 + m.c2 * c3 + m.d2 * c4,
|
m.a2 * c1 + m.b2 * c2 + m.c2 * c3 + m.d2 * c4,
|
||||||
m.a3 * c1 + m.b3 * c2 + m.c3 * c3 + m.d3 * c4,
|
m.a3 * c1 + m.b3 * c2 + m.c3 * c3 + m.d3 * c4,
|
||||||
m.a4 * c1 + m.b4 * c2 + m.c4 * c3 + m.d4 * c4,
|
m.a4 * c1 + m.b4 * c2 + m.c4 * c3 + m.d4 * c4,
|
||||||
m.a1 * d1 + m.b1 * d2 + m.c1 * d3 + m.d1 * d4,
|
m.a1 * d1 + m.b1 * d2 + m.c1 * d3 + m.d1 * d4,
|
||||||
m.a2 * d1 + m.b2 * d2 + m.c2 * d3 + m.d2 * d4,
|
m.a2 * d1 + m.b2 * d2 + m.c2 * d3 + m.d2 * d4,
|
||||||
m.a3 * d1 + m.b3 * d2 + m.c3 * d3 + m.d3 * d4,
|
m.a3 * d1 + m.b3 * d2 + m.c3 * d3 + m.d3 * d4,
|
||||||
m.a4 * d1 + m.b4 * d2 + m.c4 * d3 + m.d4 * d4);
|
m.a4 * d1 + m.b4 * d2 + m.c4 * d3 + m.d4 * d4);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiMatrix4x4t<TReal> aiMatrix4x4t<TReal>::operator* (const aiMatrix4x4t<TReal>& m) const
|
inline aiMatrix4x4t<TReal> aiMatrix4x4t<TReal>::operator* (const aiMatrix4x4t<TReal>& m) const
|
||||||
{
|
{
|
||||||
aiMatrix4x4t<TReal> temp( *this);
|
aiMatrix4x4t<TReal> temp( *this);
|
||||||
temp *= m;
|
temp *= m;
|
||||||
return temp;
|
return temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -173,14 +168,14 @@ inline aiMatrix4x4t<TReal> aiMatrix4x4t<TReal>::operator* (const aiMatrix4x4t<TR
|
|||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Transpose()
|
inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Transpose()
|
||||||
{
|
{
|
||||||
// (TReal&) don't remove, GCC complains cause of packed fields
|
// (TReal&) don't remove, GCC complains cause of packed fields
|
||||||
std::swap( (TReal&)b1, (TReal&)a2);
|
std::swap( (TReal&)b1, (TReal&)a2);
|
||||||
std::swap( (TReal&)c1, (TReal&)a3);
|
std::swap( (TReal&)c1, (TReal&)a3);
|
||||||
std::swap( (TReal&)c2, (TReal&)b3);
|
std::swap( (TReal&)c2, (TReal&)b3);
|
||||||
std::swap( (TReal&)d1, (TReal&)a4);
|
std::swap( (TReal&)d1, (TReal&)a4);
|
||||||
std::swap( (TReal&)d2, (TReal&)b4);
|
std::swap( (TReal&)d2, (TReal&)b4);
|
||||||
std::swap( (TReal&)d3, (TReal&)c4);
|
std::swap( (TReal&)d3, (TReal&)c4);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -188,291 +183,297 @@ inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Transpose()
|
|||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline TReal aiMatrix4x4t<TReal>::Determinant() const
|
inline TReal aiMatrix4x4t<TReal>::Determinant() const
|
||||||
{
|
{
|
||||||
return a1*b2*c3*d4 - a1*b2*c4*d3 + a1*b3*c4*d2 - a1*b3*c2*d4
|
return a1*b2*c3*d4 - a1*b2*c4*d3 + a1*b3*c4*d2 - a1*b3*c2*d4
|
||||||
+ a1*b4*c2*d3 - a1*b4*c3*d2 - a2*b3*c4*d1 + a2*b3*c1*d4
|
+ a1*b4*c2*d3 - a1*b4*c3*d2 - a2*b3*c4*d1 + a2*b3*c1*d4
|
||||||
- a2*b4*c1*d3 + a2*b4*c3*d1 - a2*b1*c3*d4 + a2*b1*c4*d3
|
- a2*b4*c1*d3 + a2*b4*c3*d1 - a2*b1*c3*d4 + a2*b1*c4*d3
|
||||||
+ a3*b4*c1*d2 - a3*b4*c2*d1 + a3*b1*c2*d4 - a3*b1*c4*d2
|
+ a3*b4*c1*d2 - a3*b4*c2*d1 + a3*b1*c2*d4 - a3*b1*c4*d2
|
||||||
+ a3*b2*c4*d1 - a3*b2*c1*d4 - a4*b1*c2*d3 + a4*b1*c3*d2
|
+ a3*b2*c4*d1 - a3*b2*c1*d4 - a4*b1*c2*d3 + a4*b1*c3*d2
|
||||||
- a4*b2*c3*d1 + a4*b2*c1*d3 - a4*b3*c1*d2 + a4*b3*c2*d1;
|
- a4*b2*c3*d1 + a4*b2*c1*d3 - a4*b3*c1*d2 + a4*b3*c2*d1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Inverse()
|
inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Inverse()
|
||||||
{
|
{
|
||||||
// Compute the reciprocal determinant
|
// Compute the reciprocal determinant
|
||||||
const TReal det = Determinant();
|
const TReal det = Determinant();
|
||||||
if(det == static_cast<TReal>(0.0))
|
if(det == static_cast<TReal>(0.0))
|
||||||
{
|
{
|
||||||
// Matrix not invertible. Setting all elements to nan is not really
|
// Matrix not invertible. Setting all elements to nan is not really
|
||||||
// correct in a mathematical sense but it is easy to debug for the
|
// correct in a mathematical sense but it is easy to debug for the
|
||||||
// programmer.
|
// programmer.
|
||||||
const TReal nan = std::numeric_limits<TReal>::quiet_NaN();
|
const TReal nan = std::numeric_limits<TReal>::quiet_NaN();
|
||||||
*this = aiMatrix4x4t<TReal>(
|
*this = aiMatrix4x4t<TReal>(
|
||||||
nan,nan,nan,nan,
|
nan,nan,nan,nan,
|
||||||
nan,nan,nan,nan,
|
nan,nan,nan,nan,
|
||||||
nan,nan,nan,nan,
|
nan,nan,nan,nan,
|
||||||
nan,nan,nan,nan);
|
nan,nan,nan,nan);
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
const TReal invdet = static_cast<TReal>(1.0) / det;
|
const TReal invdet = static_cast<TReal>(1.0) / det;
|
||||||
|
|
||||||
aiMatrix4x4t<TReal> res;
|
aiMatrix4x4t<TReal> res;
|
||||||
res.a1 = invdet * (b2 * (c3 * d4 - c4 * d3) + b3 * (c4 * d2 - c2 * d4) + b4 * (c2 * d3 - c3 * d2));
|
res.a1 = invdet * (b2 * (c3 * d4 - c4 * d3) + b3 * (c4 * d2 - c2 * d4) + b4 * (c2 * d3 - c3 * d2));
|
||||||
res.a2 = -invdet * (a2 * (c3 * d4 - c4 * d3) + a3 * (c4 * d2 - c2 * d4) + a4 * (c2 * d3 - c3 * d2));
|
res.a2 = -invdet * (a2 * (c3 * d4 - c4 * d3) + a3 * (c4 * d2 - c2 * d4) + a4 * (c2 * d3 - c3 * d2));
|
||||||
res.a3 = invdet * (a2 * (b3 * d4 - b4 * d3) + a3 * (b4 * d2 - b2 * d4) + a4 * (b2 * d3 - b3 * d2));
|
res.a3 = invdet * (a2 * (b3 * d4 - b4 * d3) + a3 * (b4 * d2 - b2 * d4) + a4 * (b2 * d3 - b3 * d2));
|
||||||
res.a4 = -invdet * (a2 * (b3 * c4 - b4 * c3) + a3 * (b4 * c2 - b2 * c4) + a4 * (b2 * c3 - b3 * c2));
|
res.a4 = -invdet * (a2 * (b3 * c4 - b4 * c3) + a3 * (b4 * c2 - b2 * c4) + a4 * (b2 * c3 - b3 * c2));
|
||||||
res.b1 = -invdet * (b1 * (c3 * d4 - c4 * d3) + b3 * (c4 * d1 - c1 * d4) + b4 * (c1 * d3 - c3 * d1));
|
res.b1 = -invdet * (b1 * (c3 * d4 - c4 * d3) + b3 * (c4 * d1 - c1 * d4) + b4 * (c1 * d3 - c3 * d1));
|
||||||
res.b2 = invdet * (a1 * (c3 * d4 - c4 * d3) + a3 * (c4 * d1 - c1 * d4) + a4 * (c1 * d3 - c3 * d1));
|
res.b2 = invdet * (a1 * (c3 * d4 - c4 * d3) + a3 * (c4 * d1 - c1 * d4) + a4 * (c1 * d3 - c3 * d1));
|
||||||
res.b3 = -invdet * (a1 * (b3 * d4 - b4 * d3) + a3 * (b4 * d1 - b1 * d4) + a4 * (b1 * d3 - b3 * d1));
|
res.b3 = -invdet * (a1 * (b3 * d4 - b4 * d3) + a3 * (b4 * d1 - b1 * d4) + a4 * (b1 * d3 - b3 * d1));
|
||||||
res.b4 = invdet * (a1 * (b3 * c4 - b4 * c3) + a3 * (b4 * c1 - b1 * c4) + a4 * (b1 * c3 - b3 * c1));
|
res.b4 = invdet * (a1 * (b3 * c4 - b4 * c3) + a3 * (b4 * c1 - b1 * c4) + a4 * (b1 * c3 - b3 * c1));
|
||||||
res.c1 = invdet * (b1 * (c2 * d4 - c4 * d2) + b2 * (c4 * d1 - c1 * d4) + b4 * (c1 * d2 - c2 * d1));
|
res.c1 = invdet * (b1 * (c2 * d4 - c4 * d2) + b2 * (c4 * d1 - c1 * d4) + b4 * (c1 * d2 - c2 * d1));
|
||||||
res.c2 = -invdet * (a1 * (c2 * d4 - c4 * d2) + a2 * (c4 * d1 - c1 * d4) + a4 * (c1 * d2 - c2 * d1));
|
res.c2 = -invdet * (a1 * (c2 * d4 - c4 * d2) + a2 * (c4 * d1 - c1 * d4) + a4 * (c1 * d2 - c2 * d1));
|
||||||
res.c3 = invdet * (a1 * (b2 * d4 - b4 * d2) + a2 * (b4 * d1 - b1 * d4) + a4 * (b1 * d2 - b2 * d1));
|
res.c3 = invdet * (a1 * (b2 * d4 - b4 * d2) + a2 * (b4 * d1 - b1 * d4) + a4 * (b1 * d2 - b2 * d1));
|
||||||
res.c4 = -invdet * (a1 * (b2 * c4 - b4 * c2) + a2 * (b4 * c1 - b1 * c4) + a4 * (b1 * c2 - b2 * c1));
|
res.c4 = -invdet * (a1 * (b2 * c4 - b4 * c2) + a2 * (b4 * c1 - b1 * c4) + a4 * (b1 * c2 - b2 * c1));
|
||||||
res.d1 = -invdet * (b1 * (c2 * d3 - c3 * d2) + b2 * (c3 * d1 - c1 * d3) + b3 * (c1 * d2 - c2 * d1));
|
res.d1 = -invdet * (b1 * (c2 * d3 - c3 * d2) + b2 * (c3 * d1 - c1 * d3) + b3 * (c1 * d2 - c2 * d1));
|
||||||
res.d2 = invdet * (a1 * (c2 * d3 - c3 * d2) + a2 * (c3 * d1 - c1 * d3) + a3 * (c1 * d2 - c2 * d1));
|
res.d2 = invdet * (a1 * (c2 * d3 - c3 * d2) + a2 * (c3 * d1 - c1 * d3) + a3 * (c1 * d2 - c2 * d1));
|
||||||
res.d3 = -invdet * (a1 * (b2 * d3 - b3 * d2) + a2 * (b3 * d1 - b1 * d3) + a3 * (b1 * d2 - b2 * d1));
|
res.d3 = -invdet * (a1 * (b2 * d3 - b3 * d2) + a2 * (b3 * d1 - b1 * d3) + a3 * (b1 * d2 - b2 * d1));
|
||||||
res.d4 = invdet * (a1 * (b2 * c3 - b3 * c2) + a2 * (b3 * c1 - b1 * c3) + a3 * (b1 * c2 - b2 * c1));
|
res.d4 = invdet * (a1 * (b2 * c3 - b3 * c2) + a2 * (b3 * c1 - b1 * c3) + a3 * (b1 * c2 - b2 * c1));
|
||||||
*this = res;
|
*this = res;
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline TReal* aiMatrix4x4t<TReal>::operator[](unsigned int p_iIndex)
|
inline TReal* aiMatrix4x4t<TReal>::operator[](unsigned int p_iIndex) {
|
||||||
{
|
if (p_iIndex > 3) {
|
||||||
// XXX this is UB. Has been for years. The fact that it works now does not make it better.
|
return NULL;
|
||||||
return &this->a1 + p_iIndex * 4;
|
}
|
||||||
|
|
||||||
|
// XXX this is UB. Has been for years. The fact that it works now does not make it better.
|
||||||
|
return &this->a1 + p_iIndex * 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline const TReal* aiMatrix4x4t<TReal>::operator[](unsigned int p_iIndex) const
|
inline const TReal* aiMatrix4x4t<TReal>::operator[](unsigned int p_iIndex) const {
|
||||||
{
|
if (p_iIndex > 3) {
|
||||||
// XXX same
|
return NULL;
|
||||||
return &this->a1 + p_iIndex * 4;
|
}
|
||||||
|
|
||||||
|
// XXX same
|
||||||
|
return &this->a1 + p_iIndex * 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline bool aiMatrix4x4t<TReal>::operator== (const aiMatrix4x4t<TReal>& m) const
|
inline bool aiMatrix4x4t<TReal>::operator== (const aiMatrix4x4t<TReal>& m) const
|
||||||
{
|
{
|
||||||
return (a1 == m.a1 && a2 == m.a2 && a3 == m.a3 && a4 == m.a4 &&
|
return (a1 == m.a1 && a2 == m.a2 && a3 == m.a3 && a4 == m.a4 &&
|
||||||
b1 == m.b1 && b2 == m.b2 && b3 == m.b3 && b4 == m.b4 &&
|
b1 == m.b1 && b2 == m.b2 && b3 == m.b3 && b4 == m.b4 &&
|
||||||
c1 == m.c1 && c2 == m.c2 && c3 == m.c3 && c4 == m.c4 &&
|
c1 == m.c1 && c2 == m.c2 && c3 == m.c3 && c4 == m.c4 &&
|
||||||
d1 == m.d1 && d2 == m.d2 && d3 == m.d3 && d4 == m.d4);
|
d1 == m.d1 && d2 == m.d2 && d3 == m.d3 && d4 == m.d4);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline bool aiMatrix4x4t<TReal>::operator!= (const aiMatrix4x4t<TReal>& m) const
|
inline bool aiMatrix4x4t<TReal>::operator!= (const aiMatrix4x4t<TReal>& m) const
|
||||||
{
|
{
|
||||||
return !(*this == m);
|
return !(*this == m);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
template<typename TReal>
|
template<typename TReal>
|
||||||
inline bool aiMatrix4x4t<TReal>::Equal(const aiMatrix4x4t<TReal>& m, TReal epsilon) const {
|
inline bool aiMatrix4x4t<TReal>::Equal(const aiMatrix4x4t<TReal>& m, TReal epsilon) const {
|
||||||
return
|
return
|
||||||
std::abs(a1 - m.a1) <= epsilon &&
|
std::abs(a1 - m.a1) <= epsilon &&
|
||||||
std::abs(a2 - m.a2) <= epsilon &&
|
std::abs(a2 - m.a2) <= epsilon &&
|
||||||
std::abs(a3 - m.a3) <= epsilon &&
|
std::abs(a3 - m.a3) <= epsilon &&
|
||||||
std::abs(a4 - m.a4) <= epsilon &&
|
std::abs(a4 - m.a4) <= epsilon &&
|
||||||
std::abs(b1 - m.b1) <= epsilon &&
|
std::abs(b1 - m.b1) <= epsilon &&
|
||||||
std::abs(b2 - m.b2) <= epsilon &&
|
std::abs(b2 - m.b2) <= epsilon &&
|
||||||
std::abs(b3 - m.b3) <= epsilon &&
|
std::abs(b3 - m.b3) <= epsilon &&
|
||||||
std::abs(b4 - m.b4) <= epsilon &&
|
std::abs(b4 - m.b4) <= epsilon &&
|
||||||
std::abs(c1 - m.c1) <= epsilon &&
|
std::abs(c1 - m.c1) <= epsilon &&
|
||||||
std::abs(c2 - m.c2) <= epsilon &&
|
std::abs(c2 - m.c2) <= epsilon &&
|
||||||
std::abs(c3 - m.c3) <= epsilon &&
|
std::abs(c3 - m.c3) <= epsilon &&
|
||||||
std::abs(c4 - m.c4) <= epsilon &&
|
std::abs(c4 - m.c4) <= epsilon &&
|
||||||
std::abs(d1 - m.d1) <= epsilon &&
|
std::abs(d1 - m.d1) <= epsilon &&
|
||||||
std::abs(d2 - m.d2) <= epsilon &&
|
std::abs(d2 - m.d2) <= epsilon &&
|
||||||
std::abs(d3 - m.d3) <= epsilon &&
|
std::abs(d3 - m.d3) <= epsilon &&
|
||||||
std::abs(d4 - m.d4) <= epsilon;
|
std::abs(d4 - m.d4) <= epsilon;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline void aiMatrix4x4t<TReal>::Decompose (aiVector3t<TReal>& scaling, aiQuaterniont<TReal>& rotation,
|
inline void aiMatrix4x4t<TReal>::Decompose (aiVector3t<TReal>& scaling, aiQuaterniont<TReal>& rotation,
|
||||||
aiVector3t<TReal>& position) const
|
aiVector3t<TReal>& position) const
|
||||||
{
|
{
|
||||||
const aiMatrix4x4t<TReal>& _this = *this;
|
const aiMatrix4x4t<TReal>& _this = *this;
|
||||||
|
|
||||||
// extract translation
|
// extract translation
|
||||||
position.x = _this[0][3];
|
position.x = _this[0][3];
|
||||||
position.y = _this[1][3];
|
position.y = _this[1][3];
|
||||||
position.z = _this[2][3];
|
position.z = _this[2][3];
|
||||||
|
|
||||||
// extract the rows of the matrix
|
// extract the rows of the matrix
|
||||||
aiVector3t<TReal> vRows[3] = {
|
aiVector3t<TReal> vRows[3] = {
|
||||||
aiVector3t<TReal>(_this[0][0],_this[1][0],_this[2][0]),
|
aiVector3t<TReal>(_this[0][0],_this[1][0],_this[2][0]),
|
||||||
aiVector3t<TReal>(_this[0][1],_this[1][1],_this[2][1]),
|
aiVector3t<TReal>(_this[0][1],_this[1][1],_this[2][1]),
|
||||||
aiVector3t<TReal>(_this[0][2],_this[1][2],_this[2][2])
|
aiVector3t<TReal>(_this[0][2],_this[1][2],_this[2][2])
|
||||||
};
|
};
|
||||||
|
|
||||||
// extract the scaling factors
|
// extract the scaling factors
|
||||||
scaling.x = vRows[0].Length();
|
scaling.x = vRows[0].Length();
|
||||||
scaling.y = vRows[1].Length();
|
scaling.y = vRows[1].Length();
|
||||||
scaling.z = vRows[2].Length();
|
scaling.z = vRows[2].Length();
|
||||||
|
|
||||||
// and the sign of the scaling
|
// and the sign of the scaling
|
||||||
if (Determinant() < 0) {
|
if (Determinant() < 0) {
|
||||||
scaling.x = -scaling.x;
|
scaling.x = -scaling.x;
|
||||||
scaling.y = -scaling.y;
|
scaling.y = -scaling.y;
|
||||||
scaling.z = -scaling.z;
|
scaling.z = -scaling.z;
|
||||||
}
|
}
|
||||||
|
|
||||||
// and remove all scaling from the matrix
|
// and remove all scaling from the matrix
|
||||||
if(scaling.x)
|
if(scaling.x)
|
||||||
{
|
{
|
||||||
vRows[0] /= scaling.x;
|
vRows[0] /= scaling.x;
|
||||||
}
|
}
|
||||||
if(scaling.y)
|
if(scaling.y)
|
||||||
{
|
{
|
||||||
vRows[1] /= scaling.y;
|
vRows[1] /= scaling.y;
|
||||||
}
|
}
|
||||||
if(scaling.z)
|
if(scaling.z)
|
||||||
{
|
{
|
||||||
vRows[2] /= scaling.z;
|
vRows[2] /= scaling.z;
|
||||||
}
|
}
|
||||||
|
|
||||||
// build a 3x3 rotation matrix
|
// build a 3x3 rotation matrix
|
||||||
aiMatrix3x3t<TReal> m(vRows[0].x,vRows[1].x,vRows[2].x,
|
aiMatrix3x3t<TReal> m(vRows[0].x,vRows[1].x,vRows[2].x,
|
||||||
vRows[0].y,vRows[1].y,vRows[2].y,
|
vRows[0].y,vRows[1].y,vRows[2].y,
|
||||||
vRows[0].z,vRows[1].z,vRows[2].z);
|
vRows[0].z,vRows[1].z,vRows[2].z);
|
||||||
|
|
||||||
// and generate the rotation quaternion from it
|
// and generate the rotation quaternion from it
|
||||||
rotation = aiQuaterniont<TReal>(m);
|
rotation = aiQuaterniont<TReal>(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline void aiMatrix4x4t<TReal>::DecomposeNoScaling (aiQuaterniont<TReal>& rotation,
|
inline void aiMatrix4x4t<TReal>::DecomposeNoScaling (aiQuaterniont<TReal>& rotation,
|
||||||
aiVector3t<TReal>& position) const
|
aiVector3t<TReal>& position) const
|
||||||
{
|
{
|
||||||
const aiMatrix4x4t<TReal>& _this = *this;
|
const aiMatrix4x4t<TReal>& _this = *this;
|
||||||
|
|
||||||
// extract translation
|
// extract translation
|
||||||
position.x = _this[0][3];
|
position.x = _this[0][3];
|
||||||
position.y = _this[1][3];
|
position.y = _this[1][3];
|
||||||
position.z = _this[2][3];
|
position.z = _this[2][3];
|
||||||
|
|
||||||
// extract rotation
|
// extract rotation
|
||||||
rotation = aiQuaterniont<TReal>((aiMatrix3x3t<TReal>)_this);
|
rotation = aiQuaterniont<TReal>((aiMatrix3x3t<TReal>)_this);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::FromEulerAnglesXYZ(const aiVector3t<TReal>& blubb)
|
inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::FromEulerAnglesXYZ(const aiVector3t<TReal>& blubb)
|
||||||
{
|
{
|
||||||
return FromEulerAnglesXYZ(blubb.x,blubb.y,blubb.z);
|
return FromEulerAnglesXYZ(blubb.x,blubb.y,blubb.z);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::FromEulerAnglesXYZ(TReal x, TReal y, TReal z)
|
inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::FromEulerAnglesXYZ(TReal x, TReal y, TReal z)
|
||||||
{
|
{
|
||||||
aiMatrix4x4t<TReal>& _this = *this;
|
aiMatrix4x4t<TReal>& _this = *this;
|
||||||
|
|
||||||
TReal cr = cos( x );
|
TReal cr = std::cos( x );
|
||||||
TReal sr = sin( x );
|
TReal sr = std::sin( x );
|
||||||
TReal cp = cos( y );
|
TReal cp = std::cos( y );
|
||||||
TReal sp = sin( y );
|
TReal sp = std::sin( y );
|
||||||
TReal cy = cos( z );
|
TReal cy = std::cos( z );
|
||||||
TReal sy = sin( z );
|
TReal sy = std::sin( z );
|
||||||
|
|
||||||
_this.a1 = cp*cy ;
|
_this.a1 = cp*cy ;
|
||||||
_this.a2 = cp*sy;
|
_this.a2 = cp*sy;
|
||||||
_this.a3 = -sp ;
|
_this.a3 = -sp ;
|
||||||
|
|
||||||
TReal srsp = sr*sp;
|
TReal srsp = sr*sp;
|
||||||
TReal crsp = cr*sp;
|
TReal crsp = cr*sp;
|
||||||
|
|
||||||
_this.b1 = srsp*cy-cr*sy ;
|
_this.b1 = srsp*cy-cr*sy ;
|
||||||
_this.b2 = srsp*sy+cr*cy ;
|
_this.b2 = srsp*sy+cr*cy ;
|
||||||
_this.b3 = sr*cp ;
|
_this.b3 = sr*cp ;
|
||||||
|
|
||||||
_this.c1 = crsp*cy+sr*sy ;
|
_this.c1 = crsp*cy+sr*sy ;
|
||||||
_this.c2 = crsp*sy-sr*cy ;
|
_this.c2 = crsp*sy-sr*cy ;
|
||||||
_this.c3 = cr*cp ;
|
_this.c3 = cr*cp ;
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline bool aiMatrix4x4t<TReal>::IsIdentity() const
|
inline bool aiMatrix4x4t<TReal>::IsIdentity() const
|
||||||
{
|
{
|
||||||
// Use a small epsilon to solve floating-point inaccuracies
|
// Use a small epsilon to solve floating-point inaccuracies
|
||||||
const static TReal epsilon = 10e-3f;
|
const static TReal epsilon = 10e-3f;
|
||||||
|
|
||||||
return (a2 <= epsilon && a2 >= -epsilon &&
|
return (a2 <= epsilon && a2 >= -epsilon &&
|
||||||
a3 <= epsilon && a3 >= -epsilon &&
|
a3 <= epsilon && a3 >= -epsilon &&
|
||||||
a4 <= epsilon && a4 >= -epsilon &&
|
a4 <= epsilon && a4 >= -epsilon &&
|
||||||
b1 <= epsilon && b1 >= -epsilon &&
|
b1 <= epsilon && b1 >= -epsilon &&
|
||||||
b3 <= epsilon && b3 >= -epsilon &&
|
b3 <= epsilon && b3 >= -epsilon &&
|
||||||
b4 <= epsilon && b4 >= -epsilon &&
|
b4 <= epsilon && b4 >= -epsilon &&
|
||||||
c1 <= epsilon && c1 >= -epsilon &&
|
c1 <= epsilon && c1 >= -epsilon &&
|
||||||
c2 <= epsilon && c2 >= -epsilon &&
|
c2 <= epsilon && c2 >= -epsilon &&
|
||||||
c4 <= epsilon && c4 >= -epsilon &&
|
c4 <= epsilon && c4 >= -epsilon &&
|
||||||
d1 <= epsilon && d1 >= -epsilon &&
|
d1 <= epsilon && d1 >= -epsilon &&
|
||||||
d2 <= epsilon && d2 >= -epsilon &&
|
d2 <= epsilon && d2 >= -epsilon &&
|
||||||
d3 <= epsilon && d3 >= -epsilon &&
|
d3 <= epsilon && d3 >= -epsilon &&
|
||||||
a1 <= 1.f+epsilon && a1 >= 1.f-epsilon &&
|
a1 <= 1.f+epsilon && a1 >= 1.f-epsilon &&
|
||||||
b2 <= 1.f+epsilon && b2 >= 1.f-epsilon &&
|
b2 <= 1.f+epsilon && b2 >= 1.f-epsilon &&
|
||||||
c3 <= 1.f+epsilon && c3 >= 1.f-epsilon &&
|
c3 <= 1.f+epsilon && c3 >= 1.f-epsilon &&
|
||||||
d4 <= 1.f+epsilon && d4 >= 1.f-epsilon);
|
d4 <= 1.f+epsilon && d4 >= 1.f-epsilon);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::RotationX(TReal a, aiMatrix4x4t<TReal>& out)
|
inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::RotationX(TReal a, aiMatrix4x4t<TReal>& out)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
| 1 0 0 0 |
|
| 1 0 0 0 |
|
||||||
M = | 0 cos(A) -sin(A) 0 |
|
M = | 0 cos(A) -sin(A) 0 |
|
||||||
| 0 sin(A) cos(A) 0 |
|
| 0 sin(A) cos(A) 0 |
|
||||||
| 0 0 0 1 | */
|
| 0 0 0 1 | */
|
||||||
out = aiMatrix4x4t<TReal>();
|
out = aiMatrix4x4t<TReal>();
|
||||||
out.b2 = out.c3 = cos(a);
|
out.b2 = out.c3 = std::cos(a);
|
||||||
out.b3 = -(out.c2 = sin(a));
|
out.b3 = -(out.c2 = std::sin(a));
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::RotationY(TReal a, aiMatrix4x4t<TReal>& out)
|
inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::RotationY(TReal a, aiMatrix4x4t<TReal>& out)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
| cos(A) 0 sin(A) 0 |
|
| cos(A) 0 sin(A) 0 |
|
||||||
M = | 0 1 0 0 |
|
M = | 0 1 0 0 |
|
||||||
| -sin(A) 0 cos(A) 0 |
|
| -sin(A) 0 cos(A) 0 |
|
||||||
| 0 0 0 1 |
|
| 0 0 0 1 |
|
||||||
*/
|
*/
|
||||||
out = aiMatrix4x4t<TReal>();
|
out = aiMatrix4x4t<TReal>();
|
||||||
out.a1 = out.c3 = cos(a);
|
out.a1 = out.c3 = std::cos(a);
|
||||||
out.c1 = -(out.a3 = sin(a));
|
out.c1 = -(out.a3 = std::sin(a));
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::RotationZ(TReal a, aiMatrix4x4t<TReal>& out)
|
inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::RotationZ(TReal a, aiMatrix4x4t<TReal>& out)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
| cos(A) -sin(A) 0 0 |
|
| cos(A) -sin(A) 0 0 |
|
||||||
M = | sin(A) cos(A) 0 0 |
|
M = | sin(A) cos(A) 0 0 |
|
||||||
| 0 0 1 0 |
|
| 0 0 1 0 |
|
||||||
| 0 0 0 1 | */
|
| 0 0 0 1 | */
|
||||||
out = aiMatrix4x4t<TReal>();
|
out = aiMatrix4x4t<TReal>();
|
||||||
out.a1 = out.b2 = cos(a);
|
out.a1 = out.b2 = std::cos(a);
|
||||||
out.a2 = -(out.b1 = sin(a));
|
out.a2 = -(out.b1 = std::sin(a));
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
@@ -480,7 +481,7 @@ inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::RotationZ(TReal a, aiMatrix4x4t
|
|||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Rotation( TReal a, const aiVector3t<TReal>& axis, aiMatrix4x4t<TReal>& out)
|
inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Rotation( TReal a, const aiVector3t<TReal>& axis, aiMatrix4x4t<TReal>& out)
|
||||||
{
|
{
|
||||||
TReal c = cos( a), s = sin( a), t = 1 - c;
|
TReal c = std::cos( a), s = std::sin( a), t = 1 - c;
|
||||||
TReal x = axis.x, y = axis.y, z = axis.z;
|
TReal x = axis.x, y = axis.y, z = axis.z;
|
||||||
|
|
||||||
// Many thanks to MathWorld and Wikipedia
|
// Many thanks to MathWorld and Wikipedia
|
||||||
@@ -498,22 +499,22 @@ inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Rotation( TReal a, const aiVect
|
|||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Translation( const aiVector3t<TReal>& v, aiMatrix4x4t<TReal>& out)
|
inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Translation( const aiVector3t<TReal>& v, aiMatrix4x4t<TReal>& out)
|
||||||
{
|
{
|
||||||
out = aiMatrix4x4t<TReal>();
|
out = aiMatrix4x4t<TReal>();
|
||||||
out.a4 = v.x;
|
out.a4 = v.x;
|
||||||
out.b4 = v.y;
|
out.b4 = v.y;
|
||||||
out.c4 = v.z;
|
out.c4 = v.z;
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Scaling( const aiVector3t<TReal>& v, aiMatrix4x4t<TReal>& out)
|
inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Scaling( const aiVector3t<TReal>& v, aiMatrix4x4t<TReal>& out)
|
||||||
{
|
{
|
||||||
out = aiMatrix4x4t<TReal>();
|
out = aiMatrix4x4t<TReal>();
|
||||||
out.a1 = v.x;
|
out.a1 = v.x;
|
||||||
out.b2 = v.y;
|
out.b2 = v.y;
|
||||||
out.c3 = v.z;
|
out.c3 = v.z;
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
@@ -521,19 +522,19 @@ inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Scaling( const aiVector3t<TReal
|
|||||||
* "from" into another vector called "to".
|
* "from" into another vector called "to".
|
||||||
* Input : from[3], to[3] which both must be *normalized* non-zero vectors
|
* Input : from[3], to[3] which both must be *normalized* non-zero vectors
|
||||||
* Output: mtx[3][3] -- a 3x3 matrix in colum-major form
|
* Output: mtx[3][3] -- a 3x3 matrix in colum-major form
|
||||||
* Authors: Tomas M<>ller, John Hughes
|
* Authors: Tomas M<>ller, John Hughes
|
||||||
* "Efficiently Building a Matrix to Rotate One Vector to Another"
|
* "Efficiently Building a Matrix to Rotate One Vector to Another"
|
||||||
* Journal of Graphics Tools, 4(4):1-4, 1999
|
* Journal of Graphics Tools, 4(4):1-4, 1999
|
||||||
*/
|
*/
|
||||||
// ----------------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::FromToMatrix(const aiVector3t<TReal>& from,
|
inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::FromToMatrix(const aiVector3t<TReal>& from,
|
||||||
const aiVector3t<TReal>& to, aiMatrix4x4t<TReal>& mtx)
|
const aiVector3t<TReal>& to, aiMatrix4x4t<TReal>& mtx)
|
||||||
{
|
{
|
||||||
aiMatrix3x3t<TReal> m3;
|
aiMatrix3x3t<TReal> m3;
|
||||||
aiMatrix3x3t<TReal>::FromToMatrix(from,to,m3);
|
aiMatrix3x3t<TReal>::FromToMatrix(from,to,m3);
|
||||||
mtx = aiMatrix4x4t<TReal>(m3);
|
mtx = aiMatrix4x4t<TReal>(m3);
|
||||||
return mtx;
|
return mtx;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,16 +25,16 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@@ -50,6 +50,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#if defined(_MSC_VER) && (_MSC_VER <= 1500)
|
#if defined(_MSC_VER) && (_MSC_VER <= 1500)
|
||||||
#include "Compiler/pstdint.h"
|
#include "Compiler/pstdint.h"
|
||||||
#else
|
#else
|
||||||
|
#include <limits.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -62,15 +63,15 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
// -------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------
|
||||||
typedef enum aiMetadataType
|
typedef enum aiMetadataType
|
||||||
{
|
{
|
||||||
AI_BOOL = 0,
|
AI_BOOL = 0,
|
||||||
AI_INT = 1,
|
AI_INT = 1,
|
||||||
AI_UINT64 = 2,
|
AI_UINT64 = 2,
|
||||||
AI_FLOAT = 3,
|
AI_FLOAT = 3,
|
||||||
AI_AISTRING = 4,
|
AI_AISTRING = 4,
|
||||||
AI_AIVECTOR3D = 5,
|
AI_AIVECTOR3D = 5,
|
||||||
|
|
||||||
#ifndef SWIG
|
#ifndef SWIG
|
||||||
FORCE_32BIT = INT_MAX
|
FORCE_32BIT = INT_MAX
|
||||||
#endif
|
#endif
|
||||||
} aiMetadataType;
|
} aiMetadataType;
|
||||||
|
|
||||||
@@ -85,8 +86,8 @@ typedef enum aiMetadataType
|
|||||||
// -------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------
|
||||||
struct aiMetadataEntry
|
struct aiMetadataEntry
|
||||||
{
|
{
|
||||||
aiMetadataType mType;
|
aiMetadataType mType;
|
||||||
void* mData;
|
void* mData;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -122,120 +123,123 @@ inline aiMetadataType GetAiType( aiVector3D ) { return AI_AIVECTOR3D; }
|
|||||||
* Metadata is a key-value store using string keys and values.
|
* Metadata is a key-value store using string keys and values.
|
||||||
*/
|
*/
|
||||||
// -------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------
|
||||||
struct aiMetadata
|
struct aiMetadata
|
||||||
{
|
{
|
||||||
/** Length of the mKeys and mValues arrays, respectively */
|
/** Length of the mKeys and mValues arrays, respectively */
|
||||||
unsigned int mNumProperties;
|
unsigned int mNumProperties;
|
||||||
|
|
||||||
/** Arrays of keys, may not be NULL. Entries in this array may not be NULL as well. */
|
/** Arrays of keys, may not be NULL. Entries in this array may not be NULL as well. */
|
||||||
C_STRUCT aiString* mKeys;
|
C_STRUCT aiString* mKeys;
|
||||||
|
|
||||||
/** Arrays of values, may not be NULL. Entries in this array may be NULL if the
|
/** Arrays of values, may not be NULL. Entries in this array may be NULL if the
|
||||||
* corresponding property key has no assigned value. */
|
* corresponding property key has no assigned value. */
|
||||||
C_STRUCT aiMetadataEntry* mValues;
|
C_STRUCT aiMetadataEntry* mValues;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
||||||
/** Constructor */
|
/** Constructor */
|
||||||
aiMetadata()
|
aiMetadata()
|
||||||
// set all members to zero by default
|
// set all members to zero by default
|
||||||
: mNumProperties(0)
|
: mNumProperties(0)
|
||||||
, mKeys(NULL)
|
, mKeys(NULL)
|
||||||
, mValues(NULL)
|
, mValues(NULL)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
/** Destructor */
|
/** Destructor */
|
||||||
~aiMetadata()
|
~aiMetadata()
|
||||||
{
|
{
|
||||||
delete[] mKeys;
|
delete[] mKeys;
|
||||||
mKeys = NULL;
|
mKeys = NULL;
|
||||||
if (mValues)
|
if (mValues)
|
||||||
{
|
{
|
||||||
// Delete each metadata entry
|
// Delete each metadata entry
|
||||||
for (unsigned i=0; i<mNumProperties; ++i)
|
for (unsigned i=0; i<mNumProperties; ++i)
|
||||||
{
|
{
|
||||||
void* data = mValues[i].mData;
|
void* data = mValues[i].mData;
|
||||||
switch (mValues[i].mType)
|
switch (mValues[i].mType)
|
||||||
{
|
{
|
||||||
case AI_BOOL:
|
case AI_BOOL:
|
||||||
delete static_cast<bool*>(data);
|
delete static_cast<bool*>(data);
|
||||||
break;
|
break;
|
||||||
case AI_INT:
|
case AI_INT:
|
||||||
delete static_cast<int*>(data);
|
delete static_cast<int*>(data);
|
||||||
break;
|
break;
|
||||||
case AI_UINT64:
|
case AI_UINT64:
|
||||||
delete static_cast<uint64_t*>(data);
|
delete static_cast<uint64_t*>(data);
|
||||||
break;
|
break;
|
||||||
case AI_FLOAT:
|
case AI_FLOAT:
|
||||||
delete static_cast<float*>(data);
|
delete static_cast<float*>(data);
|
||||||
break;
|
break;
|
||||||
case AI_AISTRING:
|
case AI_AISTRING:
|
||||||
delete static_cast<aiString*>(data);
|
delete static_cast<aiString*>(data);
|
||||||
break;
|
break;
|
||||||
case AI_AIVECTOR3D:
|
case AI_AIVECTOR3D:
|
||||||
delete static_cast<aiVector3D*>(data);
|
delete static_cast<aiVector3D*>(data);
|
||||||
break;
|
break;
|
||||||
default:
|
#ifndef SWIG
|
||||||
assert(false);
|
case FORCE_32BIT:
|
||||||
break;
|
#endif
|
||||||
}
|
default:
|
||||||
}
|
assert(false);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Delete the metadata array
|
// Delete the metadata array
|
||||||
delete [] mValues;
|
delete [] mValues;
|
||||||
mValues = NULL;
|
mValues = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline void Set( unsigned index, const std::string& key, const T& value )
|
inline void Set( unsigned index, const std::string& key, const T& value )
|
||||||
{
|
{
|
||||||
// In range assertion
|
// In range assertion
|
||||||
assert(index < mNumProperties);
|
assert(index < mNumProperties);
|
||||||
|
|
||||||
// Set metadata key
|
// Set metadata key
|
||||||
mKeys[index] = key;
|
mKeys[index] = key;
|
||||||
|
|
||||||
// Set metadata type
|
// Set metadata type
|
||||||
mValues[index].mType = GetAiType(value);
|
mValues[index].mType = GetAiType(value);
|
||||||
// Copy the given value to the dynamic storage
|
// Copy the given value to the dynamic storage
|
||||||
mValues[index].mData = new T(value);
|
mValues[index].mData = new T(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline bool Get( unsigned index, T& value )
|
inline bool Get( unsigned index, T& value )
|
||||||
{
|
{
|
||||||
// In range assertion
|
// In range assertion
|
||||||
assert(index < mNumProperties);
|
assert(index < mNumProperties);
|
||||||
|
|
||||||
// Return false if the output data type does
|
// Return false if the output data type does
|
||||||
// not match the found value's data type
|
// not match the found value's data type
|
||||||
if ( GetAiType( value ) != mValues[ index ].mType ) {
|
if ( GetAiType( value ) != mValues[ index ].mType ) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Otherwise, output the found value and
|
// Otherwise, output the found value and
|
||||||
// return true
|
// return true
|
||||||
value = *static_cast<T*>(mValues[index].mData);
|
value = *static_cast<T*>(mValues[index].mData);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline bool Get( const aiString& key, T& value )
|
inline bool Get( const aiString& key, T& value )
|
||||||
{
|
{
|
||||||
// Search for the given key
|
// Search for the given key
|
||||||
for (unsigned i=0; i<mNumProperties; ++i)
|
for (unsigned i=0; i<mNumProperties; ++i)
|
||||||
if (mKeys[i]==key)
|
if (mKeys[i]==key)
|
||||||
return Get(i, value);
|
return Get(i, value);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline bool Get( const std::string& key, T& value ) {
|
inline bool Get( const std::string& key, T& value ) {
|
||||||
return Get(aiString(key), value);
|
return Get(aiString(key), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
|
|||||||
92
includes/assimp/port/AndroidJNI/AndroidJNIIOSystem.h
Normal file
92
includes/assimp/port/AndroidJNI/AndroidJNIIOSystem.h
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
/*
|
||||||
|
Open Asset Import Library (assimp)
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use of this software in source and binary forms,
|
||||||
|
with or without modification, are permitted provided that the
|
||||||
|
following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
* Neither the name of the assimp team, nor the names of its
|
||||||
|
contributors may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior
|
||||||
|
written permission of the assimp team.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @file Android implementation of IOSystem using the standard C file functions.
|
||||||
|
* Aimed to ease the access to android assets */
|
||||||
|
|
||||||
|
#if __ANDROID__ and __ANDROID_API__ > 9 and defined(AI_CONFIG_ANDROID_JNI_ASSIMP_MANAGER_SUPPORT)
|
||||||
|
#ifndef AI_ANDROIDJNIIOSYSTEM_H_INC
|
||||||
|
#define AI_ANDROIDJNIIOSYSTEM_H_INC
|
||||||
|
|
||||||
|
#include "../code/DefaultIOSystem.h"
|
||||||
|
#include <android/asset_manager.h>
|
||||||
|
#include <android/asset_manager_jni.h>
|
||||||
|
#include <android/native_activity.h>
|
||||||
|
|
||||||
|
namespace Assimp {
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
/** Android extension to DefaultIOSystem using the standard C file functions */
|
||||||
|
class ASSIMP_API AndroidJNIIOSystem : public DefaultIOSystem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
/** Initialize android activity data */
|
||||||
|
std::string mApkWorkspacePath;
|
||||||
|
AAssetManager* mApkAssetManager;
|
||||||
|
|
||||||
|
/** Constructor. */
|
||||||
|
AndroidJNIIOSystem(ANativeActivity* activity);
|
||||||
|
|
||||||
|
/** Destructor. */
|
||||||
|
~AndroidJNIIOSystem();
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** Tests for the existence of a file at the given path. */
|
||||||
|
bool Exists( const char* pFile) const;
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** Opens a file at the given path, with given mode */
|
||||||
|
IOStream* Open( const char* strFile, const char* strMode);
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
// Inits Android extractor
|
||||||
|
void AndroidActivityInit(ANativeActivity* activity);
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
// Extracts android asset
|
||||||
|
bool AndroidExtractAsset(std::string name);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
} //!ns Assimp
|
||||||
|
|
||||||
|
#endif //AI_ANDROIDJNIIOSYSTEM_H_INC
|
||||||
|
#endif //__ANDROID__ and __ANDROID_API__ > 9 and defined(AI_CONFIG_ANDROID_JNI_ASSIMP_MANAGER_SUPPORT)
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -2,11 +2,11 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the
|
with or without modification, are permitted provided that the
|
||||||
following conditions are met:
|
following conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -23,16 +23,16 @@ following conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
@@ -55,61 +55,61 @@ template <typename TReal>
|
|||||||
class aiQuaterniont
|
class aiQuaterniont
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
aiQuaterniont() : w(1.0), x(), y(), z() {}
|
aiQuaterniont() : w(1.0), x(), y(), z() {}
|
||||||
aiQuaterniont(TReal pw, TReal px, TReal py, TReal pz)
|
aiQuaterniont(TReal pw, TReal px, TReal py, TReal pz)
|
||||||
: w(pw), x(px), y(py), z(pz) {}
|
: w(pw), x(px), y(py), z(pz) {}
|
||||||
|
|
||||||
/** Construct from rotation matrix. Result is undefined if the matrix is not orthonormal. */
|
/** Construct from rotation matrix. Result is undefined if the matrix is not orthonormal. */
|
||||||
aiQuaterniont( const aiMatrix3x3t<TReal>& pRotMatrix);
|
explicit aiQuaterniont( const aiMatrix3x3t<TReal>& pRotMatrix);
|
||||||
|
|
||||||
/** Construct from euler angles */
|
/** Construct from euler angles */
|
||||||
aiQuaterniont( TReal rotx, TReal roty, TReal rotz);
|
aiQuaterniont( TReal rotx, TReal roty, TReal rotz);
|
||||||
|
|
||||||
/** Construct from an axis-angle pair */
|
/** Construct from an axis-angle pair */
|
||||||
aiQuaterniont( aiVector3t<TReal> axis, TReal angle);
|
aiQuaterniont( aiVector3t<TReal> axis, TReal angle);
|
||||||
|
|
||||||
/** Construct from a normalized quaternion stored in a vec3 */
|
/** Construct from a normalized quaternion stored in a vec3 */
|
||||||
aiQuaterniont( aiVector3t<TReal> normalized);
|
explicit aiQuaterniont( aiVector3t<TReal> normalized);
|
||||||
|
|
||||||
/** Returns a matrix representation of the quaternion */
|
/** Returns a matrix representation of the quaternion */
|
||||||
aiMatrix3x3t<TReal> GetMatrix() const;
|
aiMatrix3x3t<TReal> GetMatrix() const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
bool operator== (const aiQuaterniont& o) const;
|
bool operator== (const aiQuaterniont& o) const;
|
||||||
bool operator!= (const aiQuaterniont& o) const;
|
bool operator!= (const aiQuaterniont& o) const;
|
||||||
|
|
||||||
bool Equal(const aiQuaterniont& o, TReal epsilon = 1e-6) const;
|
bool Equal(const aiQuaterniont& o, TReal epsilon = 1e-6) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/** Normalize the quaternion */
|
/** Normalize the quaternion */
|
||||||
aiQuaterniont& Normalize();
|
aiQuaterniont& Normalize();
|
||||||
|
|
||||||
/** Compute quaternion conjugate */
|
/** Compute quaternion conjugate */
|
||||||
aiQuaterniont& Conjugate ();
|
aiQuaterniont& Conjugate ();
|
||||||
|
|
||||||
/** Rotate a point by this quaternion */
|
/** Rotate a point by this quaternion */
|
||||||
aiVector3t<TReal> Rotate (const aiVector3t<TReal>& in);
|
aiVector3t<TReal> Rotate (const aiVector3t<TReal>& in);
|
||||||
|
|
||||||
/** Multiply two quaternions */
|
/** Multiply two quaternions */
|
||||||
aiQuaterniont operator* (const aiQuaterniont& two) const;
|
aiQuaterniont operator* (const aiQuaterniont& two) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/** Performs a spherical interpolation between two quaternions and writes the result into the third.
|
/** Performs a spherical interpolation between two quaternions and writes the result into the third.
|
||||||
* @param pOut Target object to received the interpolated rotation.
|
* @param pOut Target object to received the interpolated rotation.
|
||||||
* @param pStart Start rotation of the interpolation at factor == 0.
|
* @param pStart Start rotation of the interpolation at factor == 0.
|
||||||
* @param pEnd End rotation, factor == 1.
|
* @param pEnd End rotation, factor == 1.
|
||||||
* @param pFactor Interpolation factor between 0 and 1. Values outside of this range yield undefined results.
|
* @param pFactor Interpolation factor between 0 and 1. Values outside of this range yield undefined results.
|
||||||
*/
|
*/
|
||||||
static void Interpolate( aiQuaterniont& pOut, const aiQuaterniont& pStart,
|
static void Interpolate( aiQuaterniont& pOut, const aiQuaterniont& pStart,
|
||||||
const aiQuaterniont& pEnd, TReal pFactor);
|
const aiQuaterniont& pEnd, TReal pFactor);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//! w,x,y,z components of the quaternion
|
//! w,x,y,z components of the quaternion
|
||||||
TReal w, x, y, z;
|
TReal w, x, y, z;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
typedef aiQuaterniont<float> aiQuaternion;
|
typedef aiQuaterniont<float> aiQuaternion;
|
||||||
@@ -117,7 +117,7 @@ typedef aiQuaterniont<float> aiQuaternion;
|
|||||||
#else
|
#else
|
||||||
|
|
||||||
struct aiQuaternion {
|
struct aiQuaternion {
|
||||||
float w, x, y, z;
|
float w, x, y, z;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,21 +25,21 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @file aiQuaterniont.inl
|
/** @file quaternion.inl
|
||||||
* @brief Inline implementation of aiQuaterniont<TReal> operators
|
* @brief Inline implementation of aiQuaterniont<TReal> operators
|
||||||
*/
|
*/
|
||||||
#ifndef AI_QUATERNION_INL_INC
|
#ifndef AI_QUATERNION_INL_INC
|
||||||
@@ -54,24 +54,24 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
template<typename TReal>
|
template<typename TReal>
|
||||||
bool aiQuaterniont<TReal>::operator== (const aiQuaterniont& o) const
|
bool aiQuaterniont<TReal>::operator== (const aiQuaterniont& o) const
|
||||||
{
|
{
|
||||||
return x == o.x && y == o.y && z == o.z && w == o.w;
|
return x == o.x && y == o.y && z == o.z && w == o.w;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
template<typename TReal>
|
template<typename TReal>
|
||||||
bool aiQuaterniont<TReal>::operator!= (const aiQuaterniont& o) const
|
bool aiQuaterniont<TReal>::operator!= (const aiQuaterniont& o) const
|
||||||
{
|
{
|
||||||
return !(*this == o);
|
return !(*this == o);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
template<typename TReal>
|
template<typename TReal>
|
||||||
inline bool aiQuaterniont<TReal>::Equal(const aiQuaterniont& o, TReal epsilon) const {
|
inline bool aiQuaterniont<TReal>::Equal(const aiQuaterniont& o, TReal epsilon) const {
|
||||||
return
|
return
|
||||||
std::abs(x - o.x) <= epsilon &&
|
std::abs(x - o.x) <= epsilon &&
|
||||||
std::abs(y - o.y) <= epsilon &&
|
std::abs(y - o.y) <= epsilon &&
|
||||||
std::abs(z - o.z) <= epsilon &&
|
std::abs(z - o.z) <= epsilon &&
|
||||||
std::abs(w - o.w) <= epsilon;
|
std::abs(w - o.w) <= epsilon;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@@ -79,43 +79,43 @@ inline bool aiQuaterniont<TReal>::Equal(const aiQuaterniont& o, TReal epsilon) c
|
|||||||
template<typename TReal>
|
template<typename TReal>
|
||||||
inline aiQuaterniont<TReal>::aiQuaterniont( const aiMatrix3x3t<TReal> &pRotMatrix)
|
inline aiQuaterniont<TReal>::aiQuaterniont( const aiMatrix3x3t<TReal> &pRotMatrix)
|
||||||
{
|
{
|
||||||
TReal t = pRotMatrix.a1 + pRotMatrix.b2 + pRotMatrix.c3;
|
TReal t = pRotMatrix.a1 + pRotMatrix.b2 + pRotMatrix.c3;
|
||||||
|
|
||||||
// large enough
|
// large enough
|
||||||
if( t > static_cast<TReal>(0))
|
if( t > static_cast<TReal>(0))
|
||||||
{
|
{
|
||||||
TReal s = sqrt(1 + t) * static_cast<TReal>(2.0);
|
TReal s = std::sqrt(1 + t) * static_cast<TReal>(2.0);
|
||||||
x = (pRotMatrix.c2 - pRotMatrix.b3) / s;
|
x = (pRotMatrix.c2 - pRotMatrix.b3) / s;
|
||||||
y = (pRotMatrix.a3 - pRotMatrix.c1) / s;
|
y = (pRotMatrix.a3 - pRotMatrix.c1) / s;
|
||||||
z = (pRotMatrix.b1 - pRotMatrix.a2) / s;
|
z = (pRotMatrix.b1 - pRotMatrix.a2) / s;
|
||||||
w = static_cast<TReal>(0.25) * s;
|
w = static_cast<TReal>(0.25) * s;
|
||||||
} // else we have to check several cases
|
} // else we have to check several cases
|
||||||
else if( pRotMatrix.a1 > pRotMatrix.b2 && pRotMatrix.a1 > pRotMatrix.c3 )
|
else if( pRotMatrix.a1 > pRotMatrix.b2 && pRotMatrix.a1 > pRotMatrix.c3 )
|
||||||
{
|
{
|
||||||
// Column 0:
|
// Column 0:
|
||||||
TReal s = sqrt( static_cast<TReal>(1.0) + pRotMatrix.a1 - pRotMatrix.b2 - pRotMatrix.c3) * static_cast<TReal>(2.0);
|
TReal s = std::sqrt( static_cast<TReal>(1.0) + pRotMatrix.a1 - pRotMatrix.b2 - pRotMatrix.c3) * static_cast<TReal>(2.0);
|
||||||
x = static_cast<TReal>(0.25) * s;
|
x = static_cast<TReal>(0.25) * s;
|
||||||
y = (pRotMatrix.b1 + pRotMatrix.a2) / s;
|
y = (pRotMatrix.b1 + pRotMatrix.a2) / s;
|
||||||
z = (pRotMatrix.a3 + pRotMatrix.c1) / s;
|
z = (pRotMatrix.a3 + pRotMatrix.c1) / s;
|
||||||
w = (pRotMatrix.c2 - pRotMatrix.b3) / s;
|
w = (pRotMatrix.c2 - pRotMatrix.b3) / s;
|
||||||
}
|
}
|
||||||
else if( pRotMatrix.b2 > pRotMatrix.c3)
|
else if( pRotMatrix.b2 > pRotMatrix.c3)
|
||||||
{
|
{
|
||||||
// Column 1:
|
// Column 1:
|
||||||
TReal s = sqrt( static_cast<TReal>(1.0) + pRotMatrix.b2 - pRotMatrix.a1 - pRotMatrix.c3) * static_cast<TReal>(2.0);
|
TReal s = std::sqrt( static_cast<TReal>(1.0) + pRotMatrix.b2 - pRotMatrix.a1 - pRotMatrix.c3) * static_cast<TReal>(2.0);
|
||||||
x = (pRotMatrix.b1 + pRotMatrix.a2) / s;
|
x = (pRotMatrix.b1 + pRotMatrix.a2) / s;
|
||||||
y = static_cast<TReal>(0.25) * s;
|
y = static_cast<TReal>(0.25) * s;
|
||||||
z = (pRotMatrix.c2 + pRotMatrix.b3) / s;
|
z = (pRotMatrix.c2 + pRotMatrix.b3) / s;
|
||||||
w = (pRotMatrix.a3 - pRotMatrix.c1) / s;
|
w = (pRotMatrix.a3 - pRotMatrix.c1) / s;
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
// Column 2:
|
// Column 2:
|
||||||
TReal s = sqrt( static_cast<TReal>(1.0) + pRotMatrix.c3 - pRotMatrix.a1 - pRotMatrix.b2) * static_cast<TReal>(2.0);
|
TReal s = std::sqrt( static_cast<TReal>(1.0) + pRotMatrix.c3 - pRotMatrix.a1 - pRotMatrix.b2) * static_cast<TReal>(2.0);
|
||||||
x = (pRotMatrix.a3 + pRotMatrix.c1) / s;
|
x = (pRotMatrix.a3 + pRotMatrix.c1) / s;
|
||||||
y = (pRotMatrix.c2 + pRotMatrix.b3) / s;
|
y = (pRotMatrix.c2 + pRotMatrix.b3) / s;
|
||||||
z = static_cast<TReal>(0.25) * s;
|
z = static_cast<TReal>(0.25) * s;
|
||||||
w = (pRotMatrix.b1 - pRotMatrix.a2) / s;
|
w = (pRotMatrix.b1 - pRotMatrix.a2) / s;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@@ -123,18 +123,18 @@ inline aiQuaterniont<TReal>::aiQuaterniont( const aiMatrix3x3t<TReal> &pRotMatri
|
|||||||
template<typename TReal>
|
template<typename TReal>
|
||||||
inline aiQuaterniont<TReal>::aiQuaterniont( TReal fPitch, TReal fYaw, TReal fRoll )
|
inline aiQuaterniont<TReal>::aiQuaterniont( TReal fPitch, TReal fYaw, TReal fRoll )
|
||||||
{
|
{
|
||||||
const TReal fSinPitch(sin(fPitch*static_cast<TReal>(0.5)));
|
const TReal fSinPitch(std::sin(fPitch*static_cast<TReal>(0.5)));
|
||||||
const TReal fCosPitch(cos(fPitch*static_cast<TReal>(0.5)));
|
const TReal fCosPitch(std::cos(fPitch*static_cast<TReal>(0.5)));
|
||||||
const TReal fSinYaw(sin(fYaw*static_cast<TReal>(0.5)));
|
const TReal fSinYaw(std::sin(fYaw*static_cast<TReal>(0.5)));
|
||||||
const TReal fCosYaw(cos(fYaw*static_cast<TReal>(0.5)));
|
const TReal fCosYaw(std::cos(fYaw*static_cast<TReal>(0.5)));
|
||||||
const TReal fSinRoll(sin(fRoll*static_cast<TReal>(0.5)));
|
const TReal fSinRoll(std::sin(fRoll*static_cast<TReal>(0.5)));
|
||||||
const TReal fCosRoll(cos(fRoll*static_cast<TReal>(0.5)));
|
const TReal fCosRoll(std::cos(fRoll*static_cast<TReal>(0.5)));
|
||||||
const TReal fCosPitchCosYaw(fCosPitch*fCosYaw);
|
const TReal fCosPitchCosYaw(fCosPitch*fCosYaw);
|
||||||
const TReal fSinPitchSinYaw(fSinPitch*fSinYaw);
|
const TReal fSinPitchSinYaw(fSinPitch*fSinYaw);
|
||||||
x = fSinRoll * fCosPitchCosYaw - fCosRoll * fSinPitchSinYaw;
|
x = fSinRoll * fCosPitchCosYaw - fCosRoll * fSinPitchSinYaw;
|
||||||
y = fCosRoll * fSinPitch * fCosYaw + fSinRoll * fCosPitch * fSinYaw;
|
y = fCosRoll * fSinPitch * fCosYaw + fSinRoll * fCosPitch * fSinYaw;
|
||||||
z = fCosRoll * fCosPitch * fSinYaw - fSinRoll * fSinPitch * fCosYaw;
|
z = fCosRoll * fCosPitch * fSinYaw - fSinRoll * fSinPitch * fCosYaw;
|
||||||
w = fCosRoll * fCosPitchCosYaw + fSinRoll * fSinPitchSinYaw;
|
w = fCosRoll * fCosPitchCosYaw + fSinRoll * fSinPitchSinYaw;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@@ -142,18 +142,18 @@ inline aiQuaterniont<TReal>::aiQuaterniont( TReal fPitch, TReal fYaw, TReal fRol
|
|||||||
template<typename TReal>
|
template<typename TReal>
|
||||||
inline aiMatrix3x3t<TReal> aiQuaterniont<TReal>::GetMatrix() const
|
inline aiMatrix3x3t<TReal> aiQuaterniont<TReal>::GetMatrix() const
|
||||||
{
|
{
|
||||||
aiMatrix3x3t<TReal> resMatrix;
|
aiMatrix3x3t<TReal> resMatrix;
|
||||||
resMatrix.a1 = static_cast<TReal>(1.0) - static_cast<TReal>(2.0) * (y * y + z * z);
|
resMatrix.a1 = static_cast<TReal>(1.0) - static_cast<TReal>(2.0) * (y * y + z * z);
|
||||||
resMatrix.a2 = static_cast<TReal>(2.0) * (x * y - z * w);
|
resMatrix.a2 = static_cast<TReal>(2.0) * (x * y - z * w);
|
||||||
resMatrix.a3 = static_cast<TReal>(2.0) * (x * z + y * w);
|
resMatrix.a3 = static_cast<TReal>(2.0) * (x * z + y * w);
|
||||||
resMatrix.b1 = static_cast<TReal>(2.0) * (x * y + z * w);
|
resMatrix.b1 = static_cast<TReal>(2.0) * (x * y + z * w);
|
||||||
resMatrix.b2 = static_cast<TReal>(1.0) - static_cast<TReal>(2.0) * (x * x + z * z);
|
resMatrix.b2 = static_cast<TReal>(1.0) - static_cast<TReal>(2.0) * (x * x + z * z);
|
||||||
resMatrix.b3 = static_cast<TReal>(2.0) * (y * z - x * w);
|
resMatrix.b3 = static_cast<TReal>(2.0) * (y * z - x * w);
|
||||||
resMatrix.c1 = static_cast<TReal>(2.0) * (x * z - y * w);
|
resMatrix.c1 = static_cast<TReal>(2.0) * (x * z - y * w);
|
||||||
resMatrix.c2 = static_cast<TReal>(2.0) * (y * z + x * w);
|
resMatrix.c2 = static_cast<TReal>(2.0) * (y * z + x * w);
|
||||||
resMatrix.c3 = static_cast<TReal>(1.0) - static_cast<TReal>(2.0) * (x * x + y * y);
|
resMatrix.c3 = static_cast<TReal>(1.0) - static_cast<TReal>(2.0) * (x * x + y * y);
|
||||||
|
|
||||||
return resMatrix;
|
return resMatrix;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
@@ -161,123 +161,122 @@ inline aiMatrix3x3t<TReal> aiQuaterniont<TReal>::GetMatrix() const
|
|||||||
template<typename TReal>
|
template<typename TReal>
|
||||||
inline aiQuaterniont<TReal>::aiQuaterniont( aiVector3t<TReal> axis, TReal angle)
|
inline aiQuaterniont<TReal>::aiQuaterniont( aiVector3t<TReal> axis, TReal angle)
|
||||||
{
|
{
|
||||||
axis.Normalize();
|
axis.Normalize();
|
||||||
|
|
||||||
const TReal sin_a = sin( angle / 2 );
|
const TReal sin_a = std::sin( angle / 2 );
|
||||||
const TReal cos_a = cos( angle / 2 );
|
const TReal cos_a = std::cos( angle / 2 );
|
||||||
x = axis.x * sin_a;
|
x = axis.x * sin_a;
|
||||||
y = axis.y * sin_a;
|
y = axis.y * sin_a;
|
||||||
z = axis.z * sin_a;
|
z = axis.z * sin_a;
|
||||||
w = cos_a;
|
w = cos_a;
|
||||||
}
|
}
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
// Construction from am existing, normalized quaternion
|
// Construction from am existing, normalized quaternion
|
||||||
template<typename TReal>
|
template<typename TReal>
|
||||||
inline aiQuaterniont<TReal>::aiQuaterniont( aiVector3t<TReal> normalized)
|
inline aiQuaterniont<TReal>::aiQuaterniont( aiVector3t<TReal> normalized)
|
||||||
{
|
{
|
||||||
x = normalized.x;
|
x = normalized.x;
|
||||||
y = normalized.y;
|
y = normalized.y;
|
||||||
z = normalized.z;
|
z = normalized.z;
|
||||||
|
|
||||||
const TReal t = static_cast<TReal>(1.0) - (x*x) - (y*y) - (z*z);
|
const TReal t = static_cast<TReal>(1.0) - (x*x) - (y*y) - (z*z);
|
||||||
|
|
||||||
if (t < static_cast<TReal>(0.0)) {
|
if (t < static_cast<TReal>(0.0)) {
|
||||||
w = static_cast<TReal>(0.0);
|
w = static_cast<TReal>(0.0);
|
||||||
}
|
}
|
||||||
else w = sqrt (t);
|
else w = std::sqrt (t);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
// Performs a spherical interpolation between two quaternions
|
// Performs a spherical interpolation between two quaternions
|
||||||
// Implementation adopted from the gmtl project. All others I found on the net fail in some cases.
|
// Implementation adopted from the gmtl project. All others I found on the net fail in some cases.
|
||||||
// Congrats, gmtl!
|
// Congrats, gmtl!
|
||||||
template<typename TReal>
|
template<typename TReal>
|
||||||
inline void aiQuaterniont<TReal>::Interpolate( aiQuaterniont& pOut, const aiQuaterniont& pStart, const aiQuaterniont& pEnd, TReal pFactor)
|
inline void aiQuaterniont<TReal>::Interpolate( aiQuaterniont& pOut, const aiQuaterniont& pStart, const aiQuaterniont& pEnd, TReal pFactor)
|
||||||
{
|
{
|
||||||
// calc cosine theta
|
// calc cosine theta
|
||||||
TReal cosom = pStart.x * pEnd.x + pStart.y * pEnd.y + pStart.z * pEnd.z + pStart.w * pEnd.w;
|
TReal cosom = pStart.x * pEnd.x + pStart.y * pEnd.y + pStart.z * pEnd.z + pStart.w * pEnd.w;
|
||||||
|
|
||||||
// adjust signs (if necessary)
|
// adjust signs (if necessary)
|
||||||
aiQuaterniont end = pEnd;
|
aiQuaterniont end = pEnd;
|
||||||
if( cosom < static_cast<TReal>(0.0))
|
if( cosom < static_cast<TReal>(0.0))
|
||||||
{
|
{
|
||||||
cosom = -cosom;
|
cosom = -cosom;
|
||||||
end.x = -end.x; // Reverse all signs
|
end.x = -end.x; // Reverse all signs
|
||||||
end.y = -end.y;
|
end.y = -end.y;
|
||||||
end.z = -end.z;
|
end.z = -end.z;
|
||||||
end.w = -end.w;
|
end.w = -end.w;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate coefficients
|
// Calculate coefficients
|
||||||
TReal sclp, sclq;
|
TReal sclp, sclq;
|
||||||
if( (static_cast<TReal>(1.0) - cosom) > static_cast<TReal>(0.0001)) // 0.0001 -> some epsillon
|
if( (static_cast<TReal>(1.0) - cosom) > static_cast<TReal>(0.0001)) // 0.0001 -> some epsillon
|
||||||
{
|
{
|
||||||
// Standard case (slerp)
|
// Standard case (slerp)
|
||||||
TReal omega, sinom;
|
TReal omega, sinom;
|
||||||
omega = acos( cosom); // extract theta from dot product's cos theta
|
omega = std::acos( cosom); // extract theta from dot product's cos theta
|
||||||
sinom = sin( omega);
|
sinom = std::sin( omega);
|
||||||
sclp = sin( (static_cast<TReal>(1.0) - pFactor) * omega) / sinom;
|
sclp = std::sin( (static_cast<TReal>(1.0) - pFactor) * omega) / sinom;
|
||||||
sclq = sin( pFactor * omega) / sinom;
|
sclq = std::sin( pFactor * omega) / sinom;
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
// Very close, do linear interp (because it's faster)
|
// Very close, do linear interp (because it's faster)
|
||||||
sclp = static_cast<TReal>(1.0) - pFactor;
|
sclp = static_cast<TReal>(1.0) - pFactor;
|
||||||
sclq = pFactor;
|
sclq = pFactor;
|
||||||
}
|
}
|
||||||
|
|
||||||
pOut.x = sclp * pStart.x + sclq * end.x;
|
pOut.x = sclp * pStart.x + sclq * end.x;
|
||||||
pOut.y = sclp * pStart.y + sclq * end.y;
|
pOut.y = sclp * pStart.y + sclq * end.y;
|
||||||
pOut.z = sclp * pStart.z + sclq * end.z;
|
pOut.z = sclp * pStart.z + sclq * end.z;
|
||||||
pOut.w = sclp * pStart.w + sclq * end.w;
|
pOut.w = sclp * pStart.w + sclq * end.w;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
template<typename TReal>
|
template<typename TReal>
|
||||||
inline aiQuaterniont<TReal>& aiQuaterniont<TReal>::Normalize()
|
inline aiQuaterniont<TReal>& aiQuaterniont<TReal>::Normalize()
|
||||||
{
|
{
|
||||||
// compute the magnitude and divide through it
|
// compute the magnitude and divide through it
|
||||||
const TReal mag = sqrt(x*x + y*y + z*z + w*w);
|
const TReal mag = std::sqrt(x*x + y*y + z*z + w*w);
|
||||||
if (mag)
|
if (mag)
|
||||||
{
|
{
|
||||||
const TReal invMag = static_cast<TReal>(1.0)/mag;
|
const TReal invMag = static_cast<TReal>(1.0)/mag;
|
||||||
x *= invMag;
|
x *= invMag;
|
||||||
y *= invMag;
|
y *= invMag;
|
||||||
z *= invMag;
|
z *= invMag;
|
||||||
w *= invMag;
|
w *= invMag;
|
||||||
}
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
template<typename TReal>
|
template<typename TReal>
|
||||||
inline aiQuaterniont<TReal> aiQuaterniont<TReal>::operator* (const aiQuaterniont& t) const
|
inline aiQuaterniont<TReal> aiQuaterniont<TReal>::operator* (const aiQuaterniont& t) const
|
||||||
{
|
{
|
||||||
return aiQuaterniont(w*t.w - x*t.x - y*t.y - z*t.z,
|
return aiQuaterniont(w*t.w - x*t.x - y*t.y - z*t.z,
|
||||||
w*t.x + x*t.w + y*t.z - z*t.y,
|
w*t.x + x*t.w + y*t.z - z*t.y,
|
||||||
w*t.y + y*t.w + z*t.x - x*t.z,
|
w*t.y + y*t.w + z*t.x - x*t.z,
|
||||||
w*t.z + z*t.w + x*t.y - y*t.x);
|
w*t.z + z*t.w + x*t.y - y*t.x);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
template<typename TReal>
|
template<typename TReal>
|
||||||
inline aiQuaterniont<TReal>& aiQuaterniont<TReal>::Conjugate ()
|
inline aiQuaterniont<TReal>& aiQuaterniont<TReal>::Conjugate ()
|
||||||
{
|
{
|
||||||
x = -x;
|
x = -x;
|
||||||
y = -y;
|
y = -y;
|
||||||
z = -z;
|
z = -z;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
template<typename TReal>
|
template<typename TReal>
|
||||||
inline aiVector3t<TReal> aiQuaterniont<TReal>::Rotate (const aiVector3t<TReal>& v)
|
inline aiVector3t<TReal> aiQuaterniont<TReal>::Rotate (const aiVector3t<TReal>& v)
|
||||||
{
|
{
|
||||||
aiQuaterniont q2(0.f,v.x,v.y,v.z), q = *this, qinv = q;
|
aiQuaterniont q2(0.f,v.x,v.y,v.z), q = *this, qinv = q;
|
||||||
q.Conjugate();
|
qinv.Conjugate();
|
||||||
|
|
||||||
q = q*q2*qinv;
|
|
||||||
return aiVector3t<TReal>(q.x,q.y,q.z);
|
|
||||||
|
|
||||||
|
q = q*q2*qinv;
|
||||||
|
return aiVector3t<TReal>(q.x,q.y,q.z);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,21 +25,21 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @file aiScene.h
|
/** @file scene.h
|
||||||
* @brief Defines the data structures in which the imported scene is returned.
|
* @brief Defines the data structures in which the imported scene is returned.
|
||||||
*/
|
*/
|
||||||
#ifndef __AI_SCENE_H_INC__
|
#ifndef __AI_SCENE_H_INC__
|
||||||
@@ -60,199 +60,199 @@ extern "C" {
|
|||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------
|
||||||
/** A node in the imported hierarchy.
|
/** A node in the imported hierarchy.
|
||||||
*
|
*
|
||||||
* Each node has name, a parent node (except for the root node),
|
* Each node has name, a parent node (except for the root node),
|
||||||
* a transformation relative to its parent and possibly several child nodes.
|
* a transformation relative to its parent and possibly several child nodes.
|
||||||
* Simple file formats don't support hierarchical structures - for these formats
|
* Simple file formats don't support hierarchical structures - for these formats
|
||||||
* the imported scene does consist of only a single root node without children.
|
* the imported scene does consist of only a single root node without children.
|
||||||
*/
|
*/
|
||||||
// -------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------
|
||||||
struct aiNode
|
struct aiNode
|
||||||
{
|
{
|
||||||
/** The name of the node.
|
/** The name of the node.
|
||||||
*
|
*
|
||||||
* The name might be empty (length of zero) but all nodes which
|
* The name might be empty (length of zero) but all nodes which
|
||||||
* need to be referenced by either bones or animations are named.
|
* need to be referenced by either bones or animations are named.
|
||||||
* Multiple nodes may have the same name, except for nodes which are referenced
|
* Multiple nodes may have the same name, except for nodes which are referenced
|
||||||
* by bones (see #aiBone and #aiMesh::mBones). Their names *must* be unique.
|
* by bones (see #aiBone and #aiMesh::mBones). Their names *must* be unique.
|
||||||
*
|
*
|
||||||
* Cameras and lights reference a specific node by name - if there
|
* Cameras and lights reference a specific node by name - if there
|
||||||
* are multiple nodes with this name, they are assigned to each of them.
|
* are multiple nodes with this name, they are assigned to each of them.
|
||||||
* <br>
|
* <br>
|
||||||
* There are no limitations with regard to the characters contained in
|
* There are no limitations with regard to the characters contained in
|
||||||
* the name string as it is usually taken directly from the source file.
|
* the name string as it is usually taken directly from the source file.
|
||||||
*
|
*
|
||||||
* Implementations should be able to handle tokens such as whitespace, tabs,
|
* Implementations should be able to handle tokens such as whitespace, tabs,
|
||||||
* line feeds, quotation marks, ampersands etc.
|
* line feeds, quotation marks, ampersands etc.
|
||||||
*
|
*
|
||||||
* Sometimes assimp introduces new nodes not present in the source file
|
* Sometimes assimp introduces new nodes not present in the source file
|
||||||
* into the hierarchy (usually out of necessity because sometimes the
|
* into the hierarchy (usually out of necessity because sometimes the
|
||||||
* source hierarchy format is simply not compatible). Their names are
|
* source hierarchy format is simply not compatible). Their names are
|
||||||
* surrounded by @verbatim <> @endverbatim e.g.
|
* surrounded by @verbatim <> @endverbatim e.g.
|
||||||
* @verbatim<DummyRootNode> @endverbatim.
|
* @verbatim<DummyRootNode> @endverbatim.
|
||||||
*/
|
*/
|
||||||
C_STRUCT aiString mName;
|
C_STRUCT aiString mName;
|
||||||
|
|
||||||
/** The transformation relative to the node's parent. */
|
/** The transformation relative to the node's parent. */
|
||||||
C_STRUCT aiMatrix4x4 mTransformation;
|
C_STRUCT aiMatrix4x4 mTransformation;
|
||||||
|
|
||||||
/** Parent node. NULL if this node is the root node. */
|
/** Parent node. NULL if this node is the root node. */
|
||||||
C_STRUCT aiNode* mParent;
|
C_STRUCT aiNode* mParent;
|
||||||
|
|
||||||
/** The number of child nodes of this node. */
|
/** The number of child nodes of this node. */
|
||||||
unsigned int mNumChildren;
|
unsigned int mNumChildren;
|
||||||
|
|
||||||
/** The child nodes of this node. NULL if mNumChildren is 0. */
|
/** The child nodes of this node. NULL if mNumChildren is 0. */
|
||||||
C_STRUCT aiNode** mChildren;
|
C_STRUCT aiNode** mChildren;
|
||||||
|
|
||||||
/** The number of meshes of this node. */
|
/** The number of meshes of this node. */
|
||||||
unsigned int mNumMeshes;
|
unsigned int mNumMeshes;
|
||||||
|
|
||||||
/** The meshes of this node. Each entry is an index into the mesh */
|
/** The meshes of this node. Each entry is an index into the
|
||||||
unsigned int* mMeshes;
|
* mesh list of the #aiScene.
|
||||||
|
*/
|
||||||
|
unsigned int* mMeshes;
|
||||||
|
|
||||||
/** Metadata associated with this node or NULL if there is no metadata.
|
/** Metadata associated with this node or NULL if there is no metadata.
|
||||||
* Whether any metadata is generated depends on the source file format. See the
|
* Whether any metadata is generated depends on the source file format. See the
|
||||||
* @link importer_notes @endlink page for more information on every source file
|
* @link importer_notes @endlink page for more information on every source file
|
||||||
* format. Importers that don't document any metadata don't write any.
|
* format. Importers that don't document any metadata don't write any.
|
||||||
*/
|
*/
|
||||||
C_STRUCT aiMetadata* mMetaData;
|
C_STRUCT aiMetadata* mMetaData;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
/** Constructor */
|
/** Constructor */
|
||||||
aiNode()
|
aiNode()
|
||||||
// set all members to zero by default
|
// set all members to zero by default
|
||||||
: mName("")
|
: mName("")
|
||||||
, mParent(NULL)
|
, mParent(NULL)
|
||||||
, mNumChildren(0)
|
, mNumChildren(0)
|
||||||
, mChildren(NULL)
|
, mChildren(NULL)
|
||||||
, mNumMeshes(0)
|
, mNumMeshes(0)
|
||||||
, mMeshes(NULL)
|
, mMeshes(NULL)
|
||||||
, mMetaData(NULL)
|
, mMetaData(NULL)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** Construction from a specific name */
|
|
||||||
aiNode(const std::string& name)
|
|
||||||
// set all members to zero by default
|
|
||||||
: mName(name)
|
|
||||||
, mParent(NULL)
|
|
||||||
, mNumChildren(0)
|
|
||||||
, mChildren(NULL)
|
|
||||||
, mNumMeshes(0)
|
|
||||||
, mMeshes(NULL)
|
|
||||||
, mMetaData(NULL)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Destructor */
|
|
||||||
~aiNode()
|
|
||||||
{
|
|
||||||
// delete all children recursively
|
|
||||||
// to make sure we won't crash if the data is invalid ...
|
|
||||||
if (mChildren && mNumChildren)
|
|
||||||
{
|
|
||||||
for( unsigned int a = 0; a < mNumChildren; a++)
|
|
||||||
delete mChildren[a];
|
|
||||||
}
|
|
||||||
delete [] mChildren;
|
|
||||||
delete [] mMeshes;
|
|
||||||
delete mMetaData;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/** Searches for a node with a specific name, beginning at this
|
/** Construction from a specific name */
|
||||||
* nodes. Normally you will call this method on the root node
|
explicit aiNode(const std::string& name)
|
||||||
* of the scene.
|
// set all members to zero by default
|
||||||
*
|
: mName(name)
|
||||||
* @param name Name to search for
|
, mParent(NULL)
|
||||||
* @return NULL or a valid Node if the search was successful.
|
, mNumChildren(0)
|
||||||
*/
|
, mChildren(NULL)
|
||||||
inline const aiNode* FindNode(const aiString& name) const
|
, mNumMeshes(0)
|
||||||
{
|
, mMeshes(NULL)
|
||||||
return FindNode(name.data);
|
, mMetaData(NULL)
|
||||||
}
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Destructor */
|
||||||
|
~aiNode()
|
||||||
|
{
|
||||||
|
// delete all children recursively
|
||||||
|
// to make sure we won't crash if the data is invalid ...
|
||||||
|
if (mChildren && mNumChildren)
|
||||||
|
{
|
||||||
|
for( unsigned int a = 0; a < mNumChildren; a++)
|
||||||
|
delete mChildren[a];
|
||||||
|
}
|
||||||
|
delete [] mChildren;
|
||||||
|
delete [] mMeshes;
|
||||||
|
delete mMetaData;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
inline aiNode* FindNode(const aiString& name)
|
/** Searches for a node with a specific name, beginning at this
|
||||||
{
|
* nodes. Normally you will call this method on the root node
|
||||||
return FindNode(name.data);
|
* of the scene.
|
||||||
}
|
*
|
||||||
|
* @param name Name to search for
|
||||||
|
* @return NULL or a valid Node if the search was successful.
|
||||||
|
*/
|
||||||
|
inline const aiNode* FindNode(const aiString& name) const
|
||||||
|
{
|
||||||
|
return FindNode(name.data);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/** @override
|
inline aiNode* FindNode(const aiString& name)
|
||||||
*/
|
{
|
||||||
inline const aiNode* FindNode(const char* name) const
|
return FindNode(name.data);
|
||||||
{
|
}
|
||||||
if (!::strcmp( mName.data,name))return this;
|
|
||||||
for (unsigned int i = 0; i < mNumChildren;++i)
|
|
||||||
{
|
|
||||||
const aiNode* const p = mChildren[i]->FindNode(name);
|
|
||||||
if (p) {
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// there is definitely no sub-node with this name
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline aiNode* FindNode(const char* name)
|
|
||||||
{
|
inline const aiNode* FindNode(const char* name) const
|
||||||
if (!::strcmp( mName.data,name))return this;
|
{
|
||||||
for (unsigned int i = 0; i < mNumChildren;++i)
|
if (!::strcmp( mName.data,name))return this;
|
||||||
{
|
for (unsigned int i = 0; i < mNumChildren;++i)
|
||||||
aiNode* const p = mChildren[i]->FindNode(name);
|
{
|
||||||
if (p) {
|
const aiNode* const p = mChildren[i]->FindNode(name);
|
||||||
return p;
|
if (p) {
|
||||||
}
|
return p;
|
||||||
}
|
}
|
||||||
// there is definitely no sub-node with this name
|
}
|
||||||
return NULL;
|
// there is definitely no sub-node with this name
|
||||||
}
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline aiNode* FindNode(const char* name)
|
||||||
|
{
|
||||||
|
if (!::strcmp( mName.data,name))return this;
|
||||||
|
for (unsigned int i = 0; i < mNumChildren;++i)
|
||||||
|
{
|
||||||
|
aiNode* const p = mChildren[i]->FindNode(name);
|
||||||
|
if (p) {
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// there is definitely no sub-node with this name
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------
|
||||||
/** @def AI_SCENE_FLAGS_INCOMPLETE
|
/**
|
||||||
* Specifies that the scene data structure that was imported is not complete.
|
* Specifies that the scene data structure that was imported is not complete.
|
||||||
* This flag bypasses some internal validations and allows the import
|
* This flag bypasses some internal validations and allows the import
|
||||||
* of animation skeletons, material libraries or camera animation paths
|
* of animation skeletons, material libraries or camera animation paths
|
||||||
* using Assimp. Most applications won't support such data.
|
* using Assimp. Most applications won't support such data.
|
||||||
*/
|
*/
|
||||||
#define AI_SCENE_FLAGS_INCOMPLETE 0x1
|
#define AI_SCENE_FLAGS_INCOMPLETE 0x1
|
||||||
|
|
||||||
/** @def AI_SCENE_FLAGS_VALIDATED
|
/**
|
||||||
* This flag is set by the validation postprocess-step (aiPostProcess_ValidateDS)
|
* This flag is set by the validation postprocess-step (aiPostProcess_ValidateDS)
|
||||||
* if the validation is successful. In a validated scene you can be sure that
|
* if the validation is successful. In a validated scene you can be sure that
|
||||||
* any cross references in the data structure (e.g. vertex indices) are valid.
|
* any cross references in the data structure (e.g. vertex indices) are valid.
|
||||||
*/
|
*/
|
||||||
#define AI_SCENE_FLAGS_VALIDATED 0x2
|
#define AI_SCENE_FLAGS_VALIDATED 0x2
|
||||||
|
|
||||||
/** @def AI_SCENE_FLAGS_VALIDATION_WARNING
|
/**
|
||||||
* This flag is set by the validation postprocess-step (aiPostProcess_ValidateDS)
|
* This flag is set by the validation postprocess-step (aiPostProcess_ValidateDS)
|
||||||
* if the validation is successful but some issues have been found.
|
* if the validation is successful but some issues have been found.
|
||||||
* This can for example mean that a texture that does not exist is referenced
|
* This can for example mean that a texture that does not exist is referenced
|
||||||
* by a material or that the bone weights for a vertex don't sum to 1.0 ... .
|
* by a material or that the bone weights for a vertex don't sum to 1.0 ... .
|
||||||
* In most cases you should still be able to use the import. This flag could
|
* In most cases you should still be able to use the import. This flag could
|
||||||
* be useful for applications which don't capture Assimp's log output.
|
* be useful for applications which don't capture Assimp's log output.
|
||||||
*/
|
*/
|
||||||
#define AI_SCENE_FLAGS_VALIDATION_WARNING 0x4
|
#define AI_SCENE_FLAGS_VALIDATION_WARNING 0x4
|
||||||
|
|
||||||
/** @def AI_SCENE_FLAGS_NON_VERBOSE_FORMAT
|
/**
|
||||||
* This flag is currently only set by the aiProcess_JoinIdenticalVertices step.
|
* This flag is currently only set by the aiProcess_JoinIdenticalVertices step.
|
||||||
* It indicates that the vertices of the output meshes aren't in the internal
|
* It indicates that the vertices of the output meshes aren't in the internal
|
||||||
* verbose format anymore. In the verbose format all vertices are unique,
|
* verbose format anymore. In the verbose format all vertices are unique,
|
||||||
* no vertex is ever referenced by more than one face.
|
* no vertex is ever referenced by more than one face.
|
||||||
*/
|
*/
|
||||||
#define AI_SCENE_FLAGS_NON_VERBOSE_FORMAT 0x8
|
#define AI_SCENE_FLAGS_NON_VERBOSE_FORMAT 0x8
|
||||||
|
|
||||||
/** @def AI_SCENE_FLAGS_TERRAIN
|
/**
|
||||||
* Denotes pure height-map terrain data. Pure terrains usually consist of quads,
|
* Denotes pure height-map terrain data. Pure terrains usually consist of quads,
|
||||||
* sometimes triangles, in a regular grid. The x,y coordinates of all vertex
|
* sometimes triangles, in a regular grid. The x,y coordinates of all vertex
|
||||||
* positions refer to the x,y coordinates on the terrain height map, the z-axis
|
* positions refer to the x,y coordinates on the terrain height map, the z-axis
|
||||||
* stores the elevation at a specific point.
|
* stores the elevation at a specific point.
|
||||||
*
|
*
|
||||||
@@ -266,8 +266,8 @@ struct aiNode
|
|||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------
|
||||||
/** The root structure of the imported data.
|
/** The root structure of the imported data.
|
||||||
*
|
*
|
||||||
* Everything that was imported from the given file can be accessed from here.
|
* Everything that was imported from the given file can be accessed from here.
|
||||||
* Objects of this class are generally maintained and owned by Assimp, not
|
* Objects of this class are generally maintained and owned by Assimp, not
|
||||||
* by the caller. You shouldn't want to instance it, nor should you ever try to
|
* by the caller. You shouldn't want to instance it, nor should you ever try to
|
||||||
@@ -277,146 +277,146 @@ struct aiNode
|
|||||||
struct aiScene
|
struct aiScene
|
||||||
{
|
{
|
||||||
|
|
||||||
/** Any combination of the AI_SCENE_FLAGS_XXX flags. By default
|
/** Any combination of the AI_SCENE_FLAGS_XXX flags. By default
|
||||||
* this value is 0, no flags are set. Most applications will
|
* this value is 0, no flags are set. Most applications will
|
||||||
* want to reject all scenes with the AI_SCENE_FLAGS_INCOMPLETE
|
* want to reject all scenes with the AI_SCENE_FLAGS_INCOMPLETE
|
||||||
* bit set.
|
* bit set.
|
||||||
*/
|
*/
|
||||||
unsigned int mFlags;
|
unsigned int mFlags;
|
||||||
|
|
||||||
|
|
||||||
/** The root node of the hierarchy.
|
/** The root node of the hierarchy.
|
||||||
*
|
*
|
||||||
* There will always be at least the root node if the import
|
* There will always be at least the root node if the import
|
||||||
* was successful (and no special flags have been set).
|
* was successful (and no special flags have been set).
|
||||||
* Presence of further nodes depends on the format and content
|
* Presence of further nodes depends on the format and content
|
||||||
* of the imported file.
|
* of the imported file.
|
||||||
*/
|
*/
|
||||||
C_STRUCT aiNode* mRootNode;
|
C_STRUCT aiNode* mRootNode;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** The number of meshes in the scene. */
|
/** The number of meshes in the scene. */
|
||||||
unsigned int mNumMeshes;
|
unsigned int mNumMeshes;
|
||||||
|
|
||||||
/** The array of meshes.
|
/** The array of meshes.
|
||||||
*
|
*
|
||||||
* Use the indices given in the aiNode structure to access
|
* Use the indices given in the aiNode structure to access
|
||||||
* this array. The array is mNumMeshes in size. If the
|
* this array. The array is mNumMeshes in size. If the
|
||||||
* AI_SCENE_FLAGS_INCOMPLETE flag is not set there will always
|
* AI_SCENE_FLAGS_INCOMPLETE flag is not set there will always
|
||||||
* be at least ONE material.
|
* be at least ONE material.
|
||||||
*/
|
*/
|
||||||
C_STRUCT aiMesh** mMeshes;
|
C_STRUCT aiMesh** mMeshes;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** The number of materials in the scene. */
|
/** The number of materials in the scene. */
|
||||||
unsigned int mNumMaterials;
|
unsigned int mNumMaterials;
|
||||||
|
|
||||||
/** The array of materials.
|
/** The array of materials.
|
||||||
*
|
*
|
||||||
* Use the index given in each aiMesh structure to access this
|
* Use the index given in each aiMesh structure to access this
|
||||||
* array. The array is mNumMaterials in size. If the
|
* array. The array is mNumMaterials in size. If the
|
||||||
* AI_SCENE_FLAGS_INCOMPLETE flag is not set there will always
|
* AI_SCENE_FLAGS_INCOMPLETE flag is not set there will always
|
||||||
* be at least ONE material.
|
* be at least ONE material.
|
||||||
*/
|
*/
|
||||||
C_STRUCT aiMaterial** mMaterials;
|
C_STRUCT aiMaterial** mMaterials;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** The number of animations in the scene. */
|
/** The number of animations in the scene. */
|
||||||
unsigned int mNumAnimations;
|
unsigned int mNumAnimations;
|
||||||
|
|
||||||
/** The array of animations.
|
/** The array of animations.
|
||||||
*
|
*
|
||||||
* All animations imported from the given file are listed here.
|
* All animations imported from the given file are listed here.
|
||||||
* The array is mNumAnimations in size.
|
* The array is mNumAnimations in size.
|
||||||
*/
|
*/
|
||||||
C_STRUCT aiAnimation** mAnimations;
|
C_STRUCT aiAnimation** mAnimations;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** The number of textures embedded into the file */
|
/** The number of textures embedded into the file */
|
||||||
unsigned int mNumTextures;
|
unsigned int mNumTextures;
|
||||||
|
|
||||||
/** The array of embedded textures.
|
/** The array of embedded textures.
|
||||||
*
|
*
|
||||||
* Not many file formats embed their textures into the file.
|
* Not many file formats embed their textures into the file.
|
||||||
* An example is Quake's MDL format (which is also used by
|
* An example is Quake's MDL format (which is also used by
|
||||||
* some GameStudio versions)
|
* some GameStudio versions)
|
||||||
*/
|
*/
|
||||||
C_STRUCT aiTexture** mTextures;
|
C_STRUCT aiTexture** mTextures;
|
||||||
|
|
||||||
|
|
||||||
/** The number of light sources in the scene. Light sources
|
/** The number of light sources in the scene. Light sources
|
||||||
* are fully optional, in most cases this attribute will be 0
|
* are fully optional, in most cases this attribute will be 0
|
||||||
*/
|
*/
|
||||||
unsigned int mNumLights;
|
unsigned int mNumLights;
|
||||||
|
|
||||||
/** The array of light sources.
|
/** The array of light sources.
|
||||||
*
|
*
|
||||||
* All light sources imported from the given file are
|
* All light sources imported from the given file are
|
||||||
* listed here. The array is mNumLights in size.
|
* listed here. The array is mNumLights in size.
|
||||||
*/
|
*/
|
||||||
C_STRUCT aiLight** mLights;
|
C_STRUCT aiLight** mLights;
|
||||||
|
|
||||||
|
|
||||||
/** The number of cameras in the scene. Cameras
|
/** The number of cameras in the scene. Cameras
|
||||||
* are fully optional, in most cases this attribute will be 0
|
* are fully optional, in most cases this attribute will be 0
|
||||||
*/
|
*/
|
||||||
unsigned int mNumCameras;
|
unsigned int mNumCameras;
|
||||||
|
|
||||||
/** The array of cameras.
|
/** The array of cameras.
|
||||||
*
|
*
|
||||||
* All cameras imported from the given file are listed here.
|
* All cameras imported from the given file are listed here.
|
||||||
* The array is mNumCameras in size. The first camera in the
|
* The array is mNumCameras in size. The first camera in the
|
||||||
* array (if existing) is the default camera view into
|
* array (if existing) is the default camera view into
|
||||||
* the scene.
|
* the scene.
|
||||||
*/
|
*/
|
||||||
C_STRUCT aiCamera** mCameras;
|
C_STRUCT aiCamera** mCameras;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
||||||
//! Default constructor - set everything to 0/NULL
|
//! Default constructor - set everything to 0/NULL
|
||||||
ASSIMP_API aiScene();
|
ASSIMP_API aiScene();
|
||||||
|
|
||||||
//! Destructor
|
//! Destructor
|
||||||
ASSIMP_API ~aiScene();
|
ASSIMP_API ~aiScene();
|
||||||
|
|
||||||
//! Check whether the scene contains meshes
|
//! Check whether the scene contains meshes
|
||||||
//! Unless no special scene flags are set this will always be true.
|
//! Unless no special scene flags are set this will always be true.
|
||||||
inline bool HasMeshes() const
|
inline bool HasMeshes() const
|
||||||
{ return mMeshes != NULL && mNumMeshes > 0; }
|
{ return mMeshes != NULL && mNumMeshes > 0; }
|
||||||
|
|
||||||
//! Check whether the scene contains materials
|
//! Check whether the scene contains materials
|
||||||
//! Unless no special scene flags are set this will always be true.
|
//! Unless no special scene flags are set this will always be true.
|
||||||
inline bool HasMaterials() const
|
inline bool HasMaterials() const
|
||||||
{ return mMaterials != NULL && mNumMaterials > 0; }
|
{ return mMaterials != NULL && mNumMaterials > 0; }
|
||||||
|
|
||||||
//! Check whether the scene contains lights
|
//! Check whether the scene contains lights
|
||||||
inline bool HasLights() const
|
inline bool HasLights() const
|
||||||
{ return mLights != NULL && mNumLights > 0; }
|
{ return mLights != NULL && mNumLights > 0; }
|
||||||
|
|
||||||
//! Check whether the scene contains textures
|
//! Check whether the scene contains textures
|
||||||
inline bool HasTextures() const
|
inline bool HasTextures() const
|
||||||
{ return mTextures != NULL && mNumTextures > 0; }
|
{ return mTextures != NULL && mNumTextures > 0; }
|
||||||
|
|
||||||
//! Check whether the scene contains cameras
|
//! Check whether the scene contains cameras
|
||||||
inline bool HasCameras() const
|
inline bool HasCameras() const
|
||||||
{ return mCameras != NULL && mNumCameras > 0; }
|
{ return mCameras != NULL && mNumCameras > 0; }
|
||||||
|
|
||||||
//! Check whether the scene contains animations
|
//! Check whether the scene contains animations
|
||||||
inline bool HasAnimations() const
|
inline bool HasAnimations() const
|
||||||
{ return mAnimations != NULL && mNumAnimations > 0; }
|
{ return mAnimations != NULL && mNumAnimations > 0; }
|
||||||
|
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
|
||||||
/** Internal data, do not touch */
|
/** Internal data, do not touch */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
void* mPrivate;
|
void* mPrivate;
|
||||||
#else
|
#else
|
||||||
char* mPrivate;
|
char* mPrivate;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,16 +25,16 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@@ -60,13 +60,13 @@ extern "C" {
|
|||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** @def AI_MAKE_EMBEDDED_TEXNAME
|
/** @def AI_MAKE_EMBEDDED_TEXNAME
|
||||||
* Used to build the reserved path name used by the material system to
|
* Used to build the reserved path name used by the material system to
|
||||||
* reference textures that are embedded into their corresponding
|
* reference textures that are embedded into their corresponding
|
||||||
* model files. The parameter specifies the index of the texture
|
* model files. The parameter specifies the index of the texture
|
||||||
* (zero-based, in the aiScene::mTextures array)
|
* (zero-based, in the aiScene::mTextures array)
|
||||||
*/
|
*/
|
||||||
#if (!defined AI_MAKE_EMBEDDED_TEXNAME)
|
#if (!defined AI_MAKE_EMBEDDED_TEXNAME)
|
||||||
# define AI_MAKE_EMBEDDED_TEXNAME(_n_) "*" # _n_
|
# define AI_MAKE_EMBEDDED_TEXNAME(_n_) "*" # _n_
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@@ -74,33 +74,33 @@ extern "C" {
|
|||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** @brief Helper structure to represent a texel in a ARGB8888 format
|
/** @brief Helper structure to represent a texel in a ARGB8888 format
|
||||||
*
|
*
|
||||||
* Used by aiTexture.
|
* Used by aiTexture.
|
||||||
*/
|
*/
|
||||||
struct aiTexel
|
struct aiTexel
|
||||||
{
|
{
|
||||||
unsigned char b,g,r,a;
|
unsigned char b,g,r,a;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
//! Comparison operator
|
//! Comparison operator
|
||||||
bool operator== (const aiTexel& other) const
|
bool operator== (const aiTexel& other) const
|
||||||
{
|
{
|
||||||
return b == other.b && r == other.r &&
|
return b == other.b && r == other.r &&
|
||||||
g == other.g && a == other.a;
|
g == other.g && a == other.a;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Inverse comparison operator
|
//! Inverse comparison operator
|
||||||
bool operator!= (const aiTexel& other) const
|
bool operator!= (const aiTexel& other) const
|
||||||
{
|
{
|
||||||
return b != other.b || r != other.r ||
|
return b != other.b || r != other.r ||
|
||||||
g != other.g || a != other.a;
|
g != other.g || a != other.a;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Conversion to a floating-point 4d color
|
//! Conversion to a floating-point 4d color
|
||||||
operator aiColor4D() const
|
operator aiColor4D() const
|
||||||
{
|
{
|
||||||
return aiColor4D(r/255.f,g/255.f,b/255.f,a/255.f);
|
return aiColor4D(r/255.f,g/255.f,b/255.f,a/255.f);
|
||||||
}
|
}
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
|
|
||||||
} PACK_STRUCT;
|
} PACK_STRUCT;
|
||||||
@@ -109,83 +109,87 @@ struct aiTexel
|
|||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
/** Helper structure to describe an embedded texture
|
/** Helper structure to describe an embedded texture
|
||||||
*
|
*
|
||||||
* Normally textures are contained in external files but some file formats embed
|
* Normally textures are contained in external files but some file formats embed
|
||||||
* them directly in the model file. There are two types of embedded textures:
|
* them directly in the model file. There are two types of embedded textures:
|
||||||
* 1. Uncompressed textures. The color data is given in an uncompressed format.
|
* 1. Uncompressed textures. The color data is given in an uncompressed format.
|
||||||
* 2. Compressed textures stored in a file format like png or jpg. The raw file
|
* 2. Compressed textures stored in a file format like png or jpg. The raw file
|
||||||
* bytes are given so the application must utilize an image decoder (e.g. DevIL) to
|
* bytes are given so the application must utilize an image decoder (e.g. DevIL) to
|
||||||
* get access to the actual color data.
|
* get access to the actual color data.
|
||||||
|
*
|
||||||
|
* Embedded textures are referenced from materials using strings like "*0", "*1", etc.
|
||||||
|
* as the texture paths (a single asterisk character followed by the
|
||||||
|
* zero-based index of the texture in the aiScene::mTextures array).
|
||||||
*/
|
*/
|
||||||
struct aiTexture
|
struct aiTexture
|
||||||
{
|
{
|
||||||
/** Width of the texture, in pixels
|
/** Width of the texture, in pixels
|
||||||
*
|
*
|
||||||
* If mHeight is zero the texture is compressed in a format
|
* If mHeight is zero the texture is compressed in a format
|
||||||
* like JPEG. In this case mWidth specifies the size of the
|
* like JPEG. In this case mWidth specifies the size of the
|
||||||
* memory area pcData is pointing to, in bytes.
|
* memory area pcData is pointing to, in bytes.
|
||||||
*/
|
*/
|
||||||
unsigned int mWidth;
|
unsigned int mWidth;
|
||||||
|
|
||||||
/** Height of the texture, in pixels
|
/** Height of the texture, in pixels
|
||||||
*
|
*
|
||||||
* If this value is zero, pcData points to an compressed texture
|
* If this value is zero, pcData points to an compressed texture
|
||||||
* in any format (e.g. JPEG).
|
* in any format (e.g. JPEG).
|
||||||
*/
|
*/
|
||||||
unsigned int mHeight;
|
unsigned int mHeight;
|
||||||
|
|
||||||
/** A hint from the loader to make it easier for applications
|
/** A hint from the loader to make it easier for applications
|
||||||
* to determine the type of embedded compressed textures.
|
* to determine the type of embedded compressed textures.
|
||||||
*
|
*
|
||||||
* If mHeight != 0 this member is undefined. Otherwise it
|
* If mHeight != 0 this member is undefined. Otherwise it
|
||||||
* is set set to '\\0\\0\\0\\0' if the loader has no additional
|
* is set set to '\\0\\0\\0\\0' if the loader has no additional
|
||||||
* information about the texture file format used OR the
|
* information about the texture file format used OR the
|
||||||
* file extension of the format without a trailing dot. If there
|
* file extension of the format without a trailing dot. If there
|
||||||
* are multiple file extensions for a format, the shortest
|
* are multiple file extensions for a format, the shortest
|
||||||
* extension is chosen (JPEG maps to 'jpg', not to 'jpeg').
|
* extension is chosen (JPEG maps to 'jpg', not to 'jpeg').
|
||||||
* E.g. 'dds\\0', 'pcx\\0', 'jpg\\0'. All characters are lower-case.
|
* E.g. 'dds\\0', 'pcx\\0', 'jpg\\0'. All characters are lower-case.
|
||||||
* The fourth character will always be '\\0'.
|
* The fourth character will always be '\\0'.
|
||||||
*/
|
*/
|
||||||
char achFormatHint[4];
|
char achFormatHint[4];
|
||||||
|
|
||||||
/** Data of the texture.
|
/** Data of the texture.
|
||||||
*
|
*
|
||||||
* Points to an array of mWidth * mHeight aiTexel's.
|
* Points to an array of mWidth * mHeight aiTexel's.
|
||||||
* The format of the texture data is always ARGB8888 to
|
* The format of the texture data is always ARGB8888 to
|
||||||
* make the implementation for user of the library as easy
|
* make the implementation for user of the library as easy
|
||||||
* as possible. If mHeight = 0 this is a pointer to a memory
|
* as possible. If mHeight = 0 this is a pointer to a memory
|
||||||
* buffer of size mWidth containing the compressed texture
|
* buffer of size mWidth containing the compressed texture
|
||||||
* data. Good luck, have fun!
|
* data. Good luck, have fun!
|
||||||
*/
|
*/
|
||||||
C_STRUCT aiTexel* pcData;
|
C_STRUCT aiTexel* pcData;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
||||||
//! For compressed textures (mHeight == 0): compare the
|
//! For compressed textures (mHeight == 0): compare the
|
||||||
//! format hint against a given string.
|
//! format hint against a given string.
|
||||||
//! @param s Input string. 3 characters are maximally processed.
|
//! @param s Input string. 3 characters are maximally processed.
|
||||||
//! Example values: "jpg", "png"
|
//! Example values: "jpg", "png"
|
||||||
//! @return true if the given string matches the format hint
|
//! @return true if the given string matches the format hint
|
||||||
bool CheckFormat(const char* s) const
|
bool CheckFormat(const char* s) const
|
||||||
{
|
{
|
||||||
return (0 == ::strncmp(achFormatHint,s,3));
|
return (0 == ::strncmp(achFormatHint,s,3));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Construction
|
// Construction
|
||||||
aiTexture ()
|
aiTexture ()
|
||||||
: mWidth (0)
|
: mWidth (0)
|
||||||
, mHeight (0)
|
, mHeight (0)
|
||||||
, pcData (NULL)
|
, pcData (NULL)
|
||||||
{
|
{
|
||||||
achFormatHint[0] = achFormatHint[1] = 0;
|
achFormatHint[0] = achFormatHint[1] = 0;
|
||||||
achFormatHint[2] = achFormatHint[3] = 0;
|
achFormatHint[2] = achFormatHint[3] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Destruction
|
// Destruction
|
||||||
~aiTexture ()
|
~aiTexture ()
|
||||||
{
|
{
|
||||||
delete[] pcData;
|
delete[] pcData;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,29 +25,28 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @file types.h
|
/** @file types.h
|
||||||
* Basic data types and primitives, such as vectors or colors.
|
* Basic data types and primitives, such as vectors or colors.
|
||||||
*/
|
*/
|
||||||
#ifndef AI_TYPES_H_INC
|
#ifndef AI_TYPES_H_INC
|
||||||
#define AI_TYPES_H_INC
|
#define AI_TYPES_H_INC
|
||||||
|
|
||||||
// Some runtime headers
|
// Some runtime headers
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <memory.h>
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -66,43 +65,43 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <new> // for std::nothrow_t
|
#include <new> // for std::nothrow_t
|
||||||
#include <string> // for aiString::Set(const std::string&)
|
#include <string> // for aiString::Set(const std::string&)
|
||||||
|
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
//! @cond never
|
//! @cond never
|
||||||
namespace Intern {
|
namespace Intern {
|
||||||
// --------------------------------------------------------------------
|
// --------------------------------------------------------------------
|
||||||
/** @brief Internal helper class to utilize our internal new/delete
|
/** @brief Internal helper class to utilize our internal new/delete
|
||||||
* routines for allocating object of this and derived classes.
|
* routines for allocating object of this and derived classes.
|
||||||
*
|
*
|
||||||
* By doing this you can safely share class objects between Assimp
|
* By doing this you can safely share class objects between Assimp
|
||||||
* and the application - it works even over DLL boundaries. A good
|
* and the application - it works even over DLL boundaries. A good
|
||||||
* example is the #IOSystem where the application allocates its custom
|
* example is the #IOSystem where the application allocates its custom
|
||||||
* #IOSystem, then calls #Importer::SetIOSystem(). When the Importer
|
* #IOSystem, then calls #Importer::SetIOSystem(). When the Importer
|
||||||
* destructs, Assimp calls operator delete on the stored #IOSystem.
|
* destructs, Assimp calls operator delete on the stored #IOSystem.
|
||||||
* If it lies on a different heap than Assimp is working with,
|
* If it lies on a different heap than Assimp is working with,
|
||||||
* the application is determined to crash.
|
* the application is determined to crash.
|
||||||
*/
|
*/
|
||||||
// --------------------------------------------------------------------
|
// --------------------------------------------------------------------
|
||||||
#ifndef SWIG
|
#ifndef SWIG
|
||||||
struct ASSIMP_API AllocateFromAssimpHeap {
|
struct ASSIMP_API AllocateFromAssimpHeap {
|
||||||
// http://www.gotw.ca/publications/mill15.htm
|
// http://www.gotw.ca/publications/mill15.htm
|
||||||
|
|
||||||
// new/delete overload
|
// new/delete overload
|
||||||
void *operator new ( size_t num_bytes) /* throw( std::bad_alloc ) */;
|
void *operator new ( size_t num_bytes) /* throw( std::bad_alloc ) */;
|
||||||
void *operator new ( size_t num_bytes, const std::nothrow_t& ) throw();
|
void *operator new ( size_t num_bytes, const std::nothrow_t& ) throw();
|
||||||
void operator delete ( void* data);
|
void operator delete ( void* data);
|
||||||
|
|
||||||
// array new/delete overload
|
// array new/delete overload
|
||||||
void *operator new[] ( size_t num_bytes) /* throw( std::bad_alloc ) */;
|
void *operator new[] ( size_t num_bytes) /* throw( std::bad_alloc ) */;
|
||||||
void *operator new[] ( size_t num_bytes, const std::nothrow_t& ) throw();
|
void *operator new[] ( size_t num_bytes, const std::nothrow_t& ) throw();
|
||||||
void operator delete[] ( void* data);
|
void operator delete[] ( void* data);
|
||||||
|
|
||||||
}; // struct AllocateFromAssimpHeap
|
}; // struct AllocateFromAssimpHeap
|
||||||
#endif
|
#endif
|
||||||
} // namespace Intern
|
} // namespace Intern
|
||||||
//! @endcond
|
//! @endcond
|
||||||
} // namespace Assimp
|
} // namespace Assimp
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@@ -112,7 +111,7 @@ extern "C" {
|
|||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
const size_t MAXLEN = 1024;
|
const size_t MAXLEN = 1024;
|
||||||
#else
|
#else
|
||||||
# define MAXLEN 1024
|
# define MAXLEN 1024
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "./Compiler/pushpack1.h"
|
#include "./Compiler/pushpack1.h"
|
||||||
@@ -123,16 +122,16 @@ const size_t MAXLEN = 1024;
|
|||||||
struct aiPlane
|
struct aiPlane
|
||||||
{
|
{
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
aiPlane () : a(0.f), b(0.f), c(0.f), d(0.f) {}
|
aiPlane () : a(0.f), b(0.f), c(0.f), d(0.f) {}
|
||||||
aiPlane (float _a, float _b, float _c, float _d)
|
aiPlane (float _a, float _b, float _c, float _d)
|
||||||
: a(_a), b(_b), c(_c), d(_d) {}
|
: a(_a), b(_b), c(_c), d(_d) {}
|
||||||
|
|
||||||
aiPlane (const aiPlane& o) : a(o.a), b(o.b), c(o.c), d(o.d) {}
|
aiPlane (const aiPlane& o) : a(o.a), b(o.b), c(o.c), d(o.d) {}
|
||||||
|
|
||||||
#endif // !__cplusplus
|
#endif // !__cplusplus
|
||||||
|
|
||||||
//! Plane equation
|
//! Plane equation
|
||||||
float a,b,c,d;
|
float a,b,c,d;
|
||||||
} PACK_STRUCT; // !struct aiPlane
|
} PACK_STRUCT; // !struct aiPlane
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
@@ -141,89 +140,89 @@ struct aiPlane
|
|||||||
struct aiRay
|
struct aiRay
|
||||||
{
|
{
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
aiRay () {}
|
aiRay () {}
|
||||||
aiRay (const aiVector3D& _pos, const aiVector3D& _dir)
|
aiRay (const aiVector3D& _pos, const aiVector3D& _dir)
|
||||||
: pos(_pos), dir(_dir) {}
|
: pos(_pos), dir(_dir) {}
|
||||||
|
|
||||||
aiRay (const aiRay& o) : pos (o.pos), dir (o.dir) {}
|
aiRay (const aiRay& o) : pos (o.pos), dir (o.dir) {}
|
||||||
|
|
||||||
#endif // !__cplusplus
|
#endif // !__cplusplus
|
||||||
|
|
||||||
//! Position and direction of the ray
|
//! Position and direction of the ray
|
||||||
C_STRUCT aiVector3D pos, dir;
|
C_STRUCT aiVector3D pos, dir;
|
||||||
} PACK_STRUCT; // !struct aiRay
|
} PACK_STRUCT; // !struct aiRay
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
/** Represents a color in Red-Green-Blue space.
|
/** Represents a color in Red-Green-Blue space.
|
||||||
*/
|
*/
|
||||||
struct aiColor3D
|
struct aiColor3D
|
||||||
{
|
{
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
aiColor3D () : r(0.0f), g(0.0f), b(0.0f) {}
|
aiColor3D () : r(0.0f), g(0.0f), b(0.0f) {}
|
||||||
aiColor3D (float _r, float _g, float _b) : r(_r), g(_g), b(_b) {}
|
aiColor3D (float _r, float _g, float _b) : r(_r), g(_g), b(_b) {}
|
||||||
aiColor3D (float _r) : r(_r), g(_r), b(_r) {}
|
explicit aiColor3D (float _r) : r(_r), g(_r), b(_r) {}
|
||||||
aiColor3D (const aiColor3D& o) : r(o.r), g(o.g), b(o.b) {}
|
aiColor3D (const aiColor3D& o) : r(o.r), g(o.g), b(o.b) {}
|
||||||
|
|
||||||
/** Component-wise comparison */
|
|
||||||
// TODO: add epsilon?
|
|
||||||
bool operator == (const aiColor3D& other) const
|
|
||||||
{return r == other.r && g == other.g && b == other.b;}
|
|
||||||
|
|
||||||
/** Component-wise inverse comparison */
|
/** Component-wise comparison */
|
||||||
// TODO: add epsilon?
|
// TODO: add epsilon?
|
||||||
bool operator != (const aiColor3D& other) const
|
bool operator == (const aiColor3D& other) const
|
||||||
{return r != other.r || g != other.g || b != other.b;}
|
{return r == other.r && g == other.g && b == other.b;}
|
||||||
|
|
||||||
/** Component-wise comparison */
|
/** Component-wise inverse comparison */
|
||||||
// TODO: add epsilon?
|
// TODO: add epsilon?
|
||||||
bool operator < (const aiColor3D& other) const {
|
bool operator != (const aiColor3D& other) const
|
||||||
return r < other.r || (
|
{return r != other.r || g != other.g || b != other.b;}
|
||||||
r == other.r && (g < other.g ||
|
|
||||||
(g == other.g && b < other.b)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Component-wise addition */
|
/** Component-wise comparison */
|
||||||
aiColor3D operator+(const aiColor3D& c) const {
|
// TODO: add epsilon?
|
||||||
return aiColor3D(r+c.r,g+c.g,b+c.b);
|
bool operator < (const aiColor3D& other) const {
|
||||||
}
|
return r < other.r || (
|
||||||
|
r == other.r && (g < other.g ||
|
||||||
|
(g == other.g && b < other.b)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/** Component-wise subtraction */
|
/** Component-wise addition */
|
||||||
aiColor3D operator-(const aiColor3D& c) const {
|
aiColor3D operator+(const aiColor3D& c) const {
|
||||||
return aiColor3D(r-c.r,g-c.g,b-c.b);
|
return aiColor3D(r+c.r,g+c.g,b+c.b);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Component-wise multiplication */
|
/** Component-wise subtraction */
|
||||||
aiColor3D operator*(const aiColor3D& c) const {
|
aiColor3D operator-(const aiColor3D& c) const {
|
||||||
return aiColor3D(r*c.r,g*c.g,b*c.b);
|
return aiColor3D(r-c.r,g-c.g,b-c.b);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Multiply with a scalar */
|
|
||||||
aiColor3D operator*(float f) const {
|
|
||||||
return aiColor3D(r*f,g*f,b*f);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Access a specific color component */
|
/** Component-wise multiplication */
|
||||||
float operator[](unsigned int i) const {
|
aiColor3D operator*(const aiColor3D& c) const {
|
||||||
return *(&r + i);
|
return aiColor3D(r*c.r,g*c.g,b*c.b);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Access a specific color component */
|
/** Multiply with a scalar */
|
||||||
float& operator[](unsigned int i) {
|
aiColor3D operator*(float f) const {
|
||||||
return *(&r + i);
|
return aiColor3D(r*f,g*f,b*f);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Check whether a color is black */
|
/** Access a specific color component */
|
||||||
bool IsBlack() const {
|
float operator[](unsigned int i) const {
|
||||||
static const float epsilon = 10e-3f;
|
return *(&r + i);
|
||||||
return fabs( r ) < epsilon && fabs( g ) < epsilon && fabs( b ) < epsilon;
|
}
|
||||||
}
|
|
||||||
|
/** Access a specific color component */
|
||||||
|
float& operator[](unsigned int i) {
|
||||||
|
return *(&r + i);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Check whether a color is black */
|
||||||
|
bool IsBlack() const {
|
||||||
|
static const float epsilon = 10e-3f;
|
||||||
|
return std::fabs( r ) < epsilon && std::fabs( g ) < epsilon && std::fabs( b ) < epsilon;
|
||||||
|
}
|
||||||
|
|
||||||
#endif // !__cplusplus
|
#endif // !__cplusplus
|
||||||
|
|
||||||
//! Red, green and blue color values
|
//! Red, green and blue color values
|
||||||
float r, g, b;
|
float r, g, b;
|
||||||
} PACK_STRUCT; // !struct aiColor3D
|
} PACK_STRUCT; // !struct aiColor3D
|
||||||
#include "./Compiler/poppack1.h"
|
#include "./Compiler/poppack1.h"
|
||||||
|
|
||||||
@@ -233,161 +232,163 @@ struct aiColor3D
|
|||||||
* The character set of an aiString is explicitly defined to be UTF-8. This Unicode
|
* The character set of an aiString is explicitly defined to be UTF-8. This Unicode
|
||||||
* transformation was chosen in the belief that most strings in 3d files are limited
|
* transformation was chosen in the belief that most strings in 3d files are limited
|
||||||
* to ASCII, thus the character set needed to be strictly ASCII compatible.
|
* to ASCII, thus the character set needed to be strictly ASCII compatible.
|
||||||
*
|
*
|
||||||
* Most text file loaders provide proper Unicode input file handling, special unicode
|
* Most text file loaders provide proper Unicode input file handling, special unicode
|
||||||
* characters are correctly transcoded to UTF8 and are kept throughout the libraries'
|
* characters are correctly transcoded to UTF8 and are kept throughout the libraries'
|
||||||
* import pipeline.
|
* import pipeline.
|
||||||
*
|
*
|
||||||
* For most applications, it will be absolutely sufficient to interpret the
|
* For most applications, it will be absolutely sufficient to interpret the
|
||||||
* aiString as ASCII data and work with it as one would work with a plain char*.
|
* aiString as ASCII data and work with it as one would work with a plain char*.
|
||||||
* Windows users in need of proper support for i.e asian characters can use the
|
* Windows users in need of proper support for i.e asian characters can use the
|
||||||
* #MultiByteToWideChar(), #WideCharToMultiByte() WinAPI functionality to convert the
|
* MultiByteToWideChar(), WideCharToMultiByte() WinAPI functionality to convert the
|
||||||
* UTF-8 strings to their working character set (i.e. MBCS, WideChar).
|
* UTF-8 strings to their working character set (i.e. MBCS, WideChar).
|
||||||
*
|
*
|
||||||
* We use this representation instead of std::string to be C-compatible. The
|
* We use this representation instead of std::string to be C-compatible. The
|
||||||
* (binary) length of such a string is limited to MAXLEN characters (including the
|
* (binary) length of such a string is limited to MAXLEN characters (including the
|
||||||
* the terminating zero).
|
* the terminating zero).
|
||||||
*/
|
*/
|
||||||
struct aiString
|
struct aiString
|
||||||
{
|
{
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
/** Default constructor, the string is set to have zero length */
|
/** Default constructor, the string is set to have zero length */
|
||||||
aiString() :
|
aiString() :
|
||||||
length(0)
|
length(0)
|
||||||
{
|
{
|
||||||
data[0] = '\0';
|
data[0] = '\0';
|
||||||
|
|
||||||
#ifdef ASSIMP_BUILD_DEBUG
|
#ifdef ASSIMP_BUILD_DEBUG
|
||||||
// Debug build: overwrite the string on its full length with ESC (27)
|
// Debug build: overwrite the string on its full length with ESC (27)
|
||||||
memset(data+1,27,MAXLEN-1);
|
memset(data+1,27,MAXLEN-1);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Copy constructor */
|
/** Copy constructor */
|
||||||
aiString(const aiString& rOther) :
|
aiString(const aiString& rOther) :
|
||||||
length(rOther.length)
|
length(rOther.length)
|
||||||
{
|
{
|
||||||
// Crop the string to the maximum length
|
// Crop the string to the maximum length
|
||||||
length = length>=MAXLEN?MAXLEN-1:length;
|
length = length>=MAXLEN?MAXLEN-1:length;
|
||||||
memcpy( data, rOther.data, length);
|
memcpy( data, rOther.data, length);
|
||||||
data[length] = '\0';
|
data[length] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Constructor from std::string */
|
/** Constructor from std::string */
|
||||||
explicit aiString(const std::string& pString) :
|
explicit aiString(const std::string& pString) :
|
||||||
length(pString.length())
|
length(pString.length())
|
||||||
{
|
{
|
||||||
length = length>=MAXLEN?MAXLEN-1:length;
|
length = length>=MAXLEN?MAXLEN-1:length;
|
||||||
memcpy( data, pString.c_str(), length);
|
memcpy( data, pString.c_str(), length);
|
||||||
data[length] = '\0';
|
data[length] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Copy a std::string to the aiString */
|
/** Copy a std::string to the aiString */
|
||||||
void Set( const std::string& pString) {
|
void Set( const std::string& pString) {
|
||||||
if( pString.length() > MAXLEN - 1) {
|
if( pString.length() > MAXLEN - 1) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
length = pString.length();
|
length = pString.length();
|
||||||
memcpy( data, pString.c_str(), length);
|
memcpy( data, pString.c_str(), length);
|
||||||
data[length] = 0;
|
data[length] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Copy a const char* to the aiString */
|
/** Copy a const char* to the aiString */
|
||||||
void Set( const char* sz) {
|
void Set( const char* sz) {
|
||||||
const size_t len = ::strlen(sz);
|
const size_t len = ::strlen(sz);
|
||||||
if( len > MAXLEN - 1) {
|
if( len > MAXLEN - 1) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
length = len;
|
length = len;
|
||||||
memcpy( data, sz, len);
|
memcpy( data, sz, len);
|
||||||
data[len] = 0;
|
data[len] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Assign a const char* to the string */
|
/** Assign a const char* to the string */
|
||||||
aiString& operator = (const char* sz) {
|
aiString& operator = (const char* sz) {
|
||||||
Set(sz);
|
Set(sz);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Assign a cstd::string to the string */
|
/** Assign a cstd::string to the string */
|
||||||
aiString& operator = ( const std::string& pString) {
|
aiString& operator = ( const std::string& pString) {
|
||||||
Set(pString);
|
Set(pString);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Comparison operator */
|
/** Comparison operator */
|
||||||
bool operator==(const aiString& other) const {
|
bool operator==(const aiString& other) const {
|
||||||
return (length == other.length && 0 == memcmp(data,other.data,length));
|
return (length == other.length && 0 == memcmp(data,other.data,length));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Inverse comparison operator */
|
/** Inverse comparison operator */
|
||||||
bool operator!=(const aiString& other) const {
|
bool operator!=(const aiString& other) const {
|
||||||
return (length != other.length || 0 != memcmp(data,other.data,length));
|
return (length != other.length || 0 != memcmp(data,other.data,length));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Append a string to the string */
|
/** Append a string to the string */
|
||||||
void Append (const char* app) {
|
void Append (const char* app) {
|
||||||
const size_t len = ::strlen(app);
|
const size_t len = ::strlen(app);
|
||||||
if (!len) {
|
if (!len) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (length + len >= MAXLEN) {
|
if (length + len >= MAXLEN) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(&data[length],app,len+1);
|
memcpy(&data[length],app,len+1);
|
||||||
length += len;
|
length += len;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Clear the string - reset its length to zero */
|
/** Clear the string - reset its length to zero */
|
||||||
void Clear () {
|
void Clear () {
|
||||||
length = 0;
|
length = 0;
|
||||||
data[0] = '\0';
|
data[0] = '\0';
|
||||||
|
|
||||||
#ifdef ASSIMP_BUILD_DEBUG
|
#ifdef ASSIMP_BUILD_DEBUG
|
||||||
// Debug build: overwrite the string on its full length with ESC (27)
|
// Debug build: overwrite the string on its full length with ESC (27)
|
||||||
memset(data+1,27,MAXLEN-1);
|
memset(data+1,27,MAXLEN-1);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns a pointer to the underlying zero-terminated array of characters */
|
/** Returns a pointer to the underlying zero-terminated array of characters */
|
||||||
const char* C_Str() const {
|
const char* C_Str() const {
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // !__cplusplus
|
#endif // !__cplusplus
|
||||||
|
|
||||||
/** Binary length of the string excluding the terminal 0. This is NOT the
|
/** Binary length of the string excluding the terminal 0. This is NOT the
|
||||||
* logical length of strings containing UTF-8 multibyte sequences! It's
|
* logical length of strings containing UTF-8 multibyte sequences! It's
|
||||||
* the number of bytes from the beginning of the string to its end.*/
|
* the number of bytes from the beginning of the string to its end.*/
|
||||||
size_t length;
|
size_t length;
|
||||||
|
|
||||||
/** String buffer. Size limit is MAXLEN */
|
/** String buffer. Size limit is MAXLEN */
|
||||||
char data[MAXLEN];
|
char data[MAXLEN];
|
||||||
} ; // !struct aiString
|
} ; // !struct aiString
|
||||||
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
/** Standard return type for some library functions.
|
/** Standard return type for some library functions.
|
||||||
* Rarely used, and if, mostly in the C API.
|
* Rarely used, and if, mostly in the C API.
|
||||||
*/
|
*/
|
||||||
typedef enum aiReturn
|
typedef enum aiReturn
|
||||||
{
|
{
|
||||||
/** Indicates that a function was successful */
|
/** Indicates that a function was successful */
|
||||||
aiReturn_SUCCESS = 0x0,
|
aiReturn_SUCCESS = 0x0,
|
||||||
|
|
||||||
/** Indicates that a function failed */
|
/** Indicates that a function failed */
|
||||||
aiReturn_FAILURE = -0x1,
|
aiReturn_FAILURE = -0x1,
|
||||||
|
|
||||||
/** Indicates that not enough memory was available
|
/** Indicates that not enough memory was available
|
||||||
* to perform the requested operation
|
* to perform the requested operation
|
||||||
*/
|
*/
|
||||||
aiReturn_OUTOFMEMORY = -0x3,
|
aiReturn_OUTOFMEMORY = -0x3,
|
||||||
|
|
||||||
/** @cond never
|
/** @cond never
|
||||||
* Force 32-bit size enum
|
* Force 32-bit size enum
|
||||||
*/
|
*/
|
||||||
_AI_ENFORCE_ENUM_SIZE = 0x7fffffff
|
_AI_ENFORCE_ENUM_SIZE = 0x7fffffff
|
||||||
|
|
||||||
|
/// @endcond
|
||||||
} aiReturn; // !enum aiReturn
|
} aiReturn; // !enum aiReturn
|
||||||
|
|
||||||
// just for backwards compatibility, don't use these constants anymore
|
// just for backwards compatibility, don't use these constants anymore
|
||||||
@@ -401,47 +402,49 @@ typedef enum aiReturn
|
|||||||
*/
|
*/
|
||||||
enum aiOrigin
|
enum aiOrigin
|
||||||
{
|
{
|
||||||
/** Beginning of the file */
|
/** Beginning of the file */
|
||||||
aiOrigin_SET = 0x0,
|
aiOrigin_SET = 0x0,
|
||||||
|
|
||||||
/** Current position of the file pointer */
|
/** Current position of the file pointer */
|
||||||
aiOrigin_CUR = 0x1,
|
aiOrigin_CUR = 0x1,
|
||||||
|
|
||||||
/** End of the file, offsets must be negative */
|
/** End of the file, offsets must be negative */
|
||||||
aiOrigin_END = 0x2,
|
aiOrigin_END = 0x2,
|
||||||
|
|
||||||
/** @cond never
|
/** @cond never
|
||||||
* Force 32-bit size enum
|
* Force 32-bit size enum
|
||||||
*/
|
*/
|
||||||
_AI_ORIGIN_ENFORCE_ENUM_SIZE = 0x7fffffff
|
_AI_ORIGIN_ENFORCE_ENUM_SIZE = 0x7fffffff
|
||||||
|
|
||||||
|
/// @endcond
|
||||||
}; // !enum aiOrigin
|
}; // !enum aiOrigin
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
/** @brief Enumerates predefined log streaming destinations.
|
/** @brief Enumerates predefined log streaming destinations.
|
||||||
* Logging to these streams can be enabled with a single call to
|
* Logging to these streams can be enabled with a single call to
|
||||||
* #LogStream::createDefaultStream or #aiAttachPredefinedLogStream(),
|
* #LogStream::createDefaultStream.
|
||||||
* respectively.
|
|
||||||
*/
|
*/
|
||||||
enum aiDefaultLogStream
|
enum aiDefaultLogStream
|
||||||
{
|
{
|
||||||
/** Stream the log to a file */
|
/** Stream the log to a file */
|
||||||
aiDefaultLogStream_FILE = 0x1,
|
aiDefaultLogStream_FILE = 0x1,
|
||||||
|
|
||||||
/** Stream the log to std::cout */
|
/** Stream the log to std::cout */
|
||||||
aiDefaultLogStream_STDOUT = 0x2,
|
aiDefaultLogStream_STDOUT = 0x2,
|
||||||
|
|
||||||
/** Stream the log to std::cerr */
|
/** Stream the log to std::cerr */
|
||||||
aiDefaultLogStream_STDERR = 0x4,
|
aiDefaultLogStream_STDERR = 0x4,
|
||||||
|
|
||||||
/** MSVC only: Stream the log the the debugger
|
/** MSVC only: Stream the log the the debugger
|
||||||
* (this relies on OutputDebugString from the Win32 SDK)
|
* (this relies on OutputDebugString from the Win32 SDK)
|
||||||
*/
|
*/
|
||||||
aiDefaultLogStream_DEBUGGER = 0x8,
|
aiDefaultLogStream_DEBUGGER = 0x8,
|
||||||
|
|
||||||
/** @cond never
|
/** @cond never
|
||||||
* Force 32-bit size enum
|
* Force 32-bit size enum
|
||||||
*/
|
*/
|
||||||
_AI_DLS_ENFORCE_ENUM_SIZE = 0x7fffffff
|
_AI_DLS_ENFORCE_ENUM_SIZE = 0x7fffffff
|
||||||
|
/// @endcond
|
||||||
}; // !enum aiDefaultLogStream
|
}; // !enum aiDefaultLogStream
|
||||||
|
|
||||||
// just for backwards compatibility, don't use these constants anymore
|
// just for backwards compatibility, don't use these constants anymore
|
||||||
@@ -459,44 +462,44 @@ struct aiMemoryInfo
|
|||||||
{
|
{
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
||||||
/** Default constructor */
|
/** Default constructor */
|
||||||
aiMemoryInfo()
|
aiMemoryInfo()
|
||||||
: textures (0)
|
: textures (0)
|
||||||
, materials (0)
|
, materials (0)
|
||||||
, meshes (0)
|
, meshes (0)
|
||||||
, nodes (0)
|
, nodes (0)
|
||||||
, animations (0)
|
, animations (0)
|
||||||
, cameras (0)
|
, cameras (0)
|
||||||
, lights (0)
|
, lights (0)
|
||||||
, total (0)
|
, total (0)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** Storage allocated for texture data */
|
/** Storage allocated for texture data */
|
||||||
unsigned int textures;
|
unsigned int textures;
|
||||||
|
|
||||||
/** Storage allocated for material data */
|
/** Storage allocated for material data */
|
||||||
unsigned int materials;
|
unsigned int materials;
|
||||||
|
|
||||||
/** Storage allocated for mesh data */
|
/** Storage allocated for mesh data */
|
||||||
unsigned int meshes;
|
unsigned int meshes;
|
||||||
|
|
||||||
/** Storage allocated for node data */
|
/** Storage allocated for node data */
|
||||||
unsigned int nodes;
|
unsigned int nodes;
|
||||||
|
|
||||||
/** Storage allocated for animation data */
|
/** Storage allocated for animation data */
|
||||||
unsigned int animations;
|
unsigned int animations;
|
||||||
|
|
||||||
/** Storage allocated for camera data */
|
/** Storage allocated for camera data */
|
||||||
unsigned int cameras;
|
unsigned int cameras;
|
||||||
|
|
||||||
/** Storage allocated for light data */
|
/** Storage allocated for light data */
|
||||||
unsigned int lights;
|
unsigned int lights;
|
||||||
|
|
||||||
/** Total storage allocated for the full import. */
|
/** Total storage allocated for the full import. */
|
||||||
unsigned int total;
|
unsigned int total;
|
||||||
}; // !struct aiMemoryInfo
|
}; // !struct aiMemoryInfo
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
@@ -509,4 +512,4 @@ struct aiMemoryInfo
|
|||||||
#include "quaternion.inl"
|
#include "quaternion.inl"
|
||||||
#include "matrix3x3.inl"
|
#include "matrix3x3.inl"
|
||||||
#include "matrix4x4.inl"
|
#include "matrix4x4.inl"
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,20 +25,20 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
/** @file aiVector2t.h
|
/** @file vector2.h
|
||||||
* @brief 2D vector structure, including operators when compiling in C++
|
* @brief 2D vector structure, including operators when compiling in C++
|
||||||
*/
|
*/
|
||||||
#ifndef AI_VECTOR2D_H_INC
|
#ifndef AI_VECTOR2D_H_INC
|
||||||
@@ -53,7 +53,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include "./Compiler/pushpack1.h"
|
#include "./Compiler/pushpack1.h"
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
/** Represents a two-dimensional vector.
|
/** Represents a two-dimensional vector.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@@ -62,40 +62,40 @@ class aiVector2t
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
aiVector2t () : x(), y() {}
|
aiVector2t () : x(), y() {}
|
||||||
aiVector2t (TReal _x, TReal _y) : x(_x), y(_y) {}
|
aiVector2t (TReal _x, TReal _y) : x(_x), y(_y) {}
|
||||||
explicit aiVector2t (TReal _xyz) : x(_xyz), y(_xyz) {}
|
explicit aiVector2t (TReal _xyz) : x(_xyz), y(_xyz) {}
|
||||||
aiVector2t (const aiVector2t& o) : x(o.x), y(o.y) {}
|
aiVector2t (const aiVector2t& o) : x(o.x), y(o.y) {}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
void Set( TReal pX, TReal pY);
|
void Set( TReal pX, TReal pY);
|
||||||
TReal SquareLength() const ;
|
TReal SquareLength() const ;
|
||||||
TReal Length() const ;
|
TReal Length() const ;
|
||||||
aiVector2t& Normalize();
|
aiVector2t& Normalize();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
const aiVector2t& operator += (const aiVector2t& o);
|
const aiVector2t& operator += (const aiVector2t& o);
|
||||||
const aiVector2t& operator -= (const aiVector2t& o);
|
const aiVector2t& operator -= (const aiVector2t& o);
|
||||||
const aiVector2t& operator *= (TReal f);
|
const aiVector2t& operator *= (TReal f);
|
||||||
const aiVector2t& operator /= (TReal f);
|
const aiVector2t& operator /= (TReal f);
|
||||||
|
|
||||||
TReal operator[](unsigned int i) const;
|
TReal operator[](unsigned int i) const;
|
||||||
TReal& operator[](unsigned int i);
|
TReal& operator[](unsigned int i);
|
||||||
|
|
||||||
bool operator== (const aiVector2t& other) const;
|
bool operator== (const aiVector2t& other) const;
|
||||||
bool operator!= (const aiVector2t& other) const;
|
bool operator!= (const aiVector2t& other) const;
|
||||||
|
|
||||||
bool Equal(const aiVector2t& other, TReal epsilon = 1e-6) const;
|
bool Equal(const aiVector2t& other, TReal epsilon = 1e-6) const;
|
||||||
|
|
||||||
aiVector2t& operator= (TReal f);
|
aiVector2t& operator= (TReal f);
|
||||||
const aiVector2t SymMul(const aiVector2t& o);
|
const aiVector2t SymMul(const aiVector2t& o);
|
||||||
|
|
||||||
template <typename TOther>
|
template <typename TOther>
|
||||||
operator aiVector2t<TOther> () const;
|
operator aiVector2t<TOther> () const;
|
||||||
|
|
||||||
TReal x, y;
|
TReal x, y;
|
||||||
} PACK_STRUCT;
|
} PACK_STRUCT;
|
||||||
|
|
||||||
typedef aiVector2t<float> aiVector2D;
|
typedef aiVector2t<float> aiVector2D;
|
||||||
@@ -103,7 +103,7 @@ typedef aiVector2t<float> aiVector2D;
|
|||||||
#else
|
#else
|
||||||
|
|
||||||
struct aiVector2D {
|
struct aiVector2D {
|
||||||
float x,y;
|
float x, y;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,21 +25,21 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @file aiVector2D.inl
|
/** @file vector2.inl
|
||||||
* @brief Inline implementation of aiVector2t<TReal> operators
|
* @brief Inline implementation of aiVector2t<TReal> operators
|
||||||
*/
|
*/
|
||||||
#ifndef AI_VECTOR2D_INL_INC
|
#ifndef AI_VECTOR2D_INL_INC
|
||||||
@@ -54,104 +54,104 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
template <typename TOther>
|
template <typename TOther>
|
||||||
aiVector2t<TReal>::operator aiVector2t<TOther> () const {
|
aiVector2t<TReal>::operator aiVector2t<TOther> () const {
|
||||||
return aiVector2t<TOther>(static_cast<TOther>(x),static_cast<TOther>(y));
|
return aiVector2t<TOther>(static_cast<TOther>(x),static_cast<TOther>(y));
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
void aiVector2t<TReal>::Set( TReal pX, TReal pY) {
|
void aiVector2t<TReal>::Set( TReal pX, TReal pY) {
|
||||||
x = pX; y = pY;
|
x = pX; y = pY;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
TReal aiVector2t<TReal>::SquareLength() const {
|
TReal aiVector2t<TReal>::SquareLength() const {
|
||||||
return x*x + y*y;
|
return x*x + y*y;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
TReal aiVector2t<TReal>::Length() const {
|
TReal aiVector2t<TReal>::Length() const {
|
||||||
return ::sqrt( SquareLength());
|
return std::sqrt( SquareLength());
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
aiVector2t<TReal>& aiVector2t<TReal>::Normalize() {
|
aiVector2t<TReal>& aiVector2t<TReal>::Normalize() {
|
||||||
*this /= Length();
|
*this /= Length();
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
const aiVector2t<TReal>& aiVector2t<TReal>::operator += (const aiVector2t& o) {
|
const aiVector2t<TReal>& aiVector2t<TReal>::operator += (const aiVector2t& o) {
|
||||||
x += o.x; y += o.y;
|
x += o.x; y += o.y;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
const aiVector2t<TReal>& aiVector2t<TReal>::operator -= (const aiVector2t& o) {
|
const aiVector2t<TReal>& aiVector2t<TReal>::operator -= (const aiVector2t& o) {
|
||||||
x -= o.x; y -= o.y;
|
x -= o.x; y -= o.y;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
const aiVector2t<TReal>& aiVector2t<TReal>::operator *= (TReal f) {
|
const aiVector2t<TReal>& aiVector2t<TReal>::operator *= (TReal f) {
|
||||||
x *= f; y *= f;
|
x *= f; y *= f;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
const aiVector2t<TReal>& aiVector2t<TReal>::operator /= (TReal f) {
|
const aiVector2t<TReal>& aiVector2t<TReal>::operator /= (TReal f) {
|
||||||
x /= f; y /= f;
|
x /= f; y /= f;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
TReal aiVector2t<TReal>::operator[](unsigned int i) const {
|
TReal aiVector2t<TReal>::operator[](unsigned int i) const {
|
||||||
return *(&x + i);
|
return *(&x + i);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
TReal& aiVector2t<TReal>::operator[](unsigned int i) {
|
TReal& aiVector2t<TReal>::operator[](unsigned int i) {
|
||||||
return *(&x + i);
|
return *(&x + i);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
bool aiVector2t<TReal>::operator== (const aiVector2t& other) const {
|
bool aiVector2t<TReal>::operator== (const aiVector2t& other) const {
|
||||||
return x == other.x && y == other.y;
|
return x == other.x && y == other.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
bool aiVector2t<TReal>::operator!= (const aiVector2t& other) const {
|
bool aiVector2t<TReal>::operator!= (const aiVector2t& other) const {
|
||||||
return x != other.x || y != other.y;
|
return x != other.x || y != other.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
template<typename TReal>
|
template<typename TReal>
|
||||||
bool aiVector2t<TReal>::Equal(const aiVector2t& other, TReal epsilon) const {
|
bool aiVector2t<TReal>::Equal(const aiVector2t& other, TReal epsilon) const {
|
||||||
return
|
return
|
||||||
std::abs(x - other.x) <= epsilon &&
|
std::abs(x - other.x) <= epsilon &&
|
||||||
std::abs(y - other.y) <= epsilon;
|
std::abs(y - other.y) <= epsilon;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
aiVector2t<TReal>& aiVector2t<TReal>::operator= (TReal f) {
|
aiVector2t<TReal>& aiVector2t<TReal>::operator= (TReal f) {
|
||||||
x = y = f;
|
x = y = f;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
const aiVector2t<TReal> aiVector2t<TReal>::SymMul(const aiVector2t& o) {
|
const aiVector2t<TReal> aiVector2t<TReal>::SymMul(const aiVector2t& o) {
|
||||||
return aiVector2t(x*o.x,y*o.y);
|
return aiVector2t(x*o.x,y*o.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -160,7 +160,7 @@ const aiVector2t<TReal> aiVector2t<TReal>::SymMul(const aiVector2t& o) {
|
|||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiVector2t<TReal> operator + (const aiVector2t<TReal>& v1, const aiVector2t<TReal>& v2)
|
inline aiVector2t<TReal> operator + (const aiVector2t<TReal>& v1, const aiVector2t<TReal>& v2)
|
||||||
{
|
{
|
||||||
return aiVector2t<TReal>( v1.x + v2.x, v1.y + v2.y);
|
return aiVector2t<TReal>( v1.x + v2.x, v1.y + v2.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
@@ -168,7 +168,7 @@ inline aiVector2t<TReal> operator + (const aiVector2t<TReal>& v1, const aiVector
|
|||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiVector2t<TReal> operator - (const aiVector2t<TReal>& v1, const aiVector2t<TReal>& v2)
|
inline aiVector2t<TReal> operator - (const aiVector2t<TReal>& v1, const aiVector2t<TReal>& v2)
|
||||||
{
|
{
|
||||||
return aiVector2t<TReal>( v1.x - v2.x, v1.y - v2.y);
|
return aiVector2t<TReal>( v1.x - v2.x, v1.y - v2.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
@@ -176,7 +176,7 @@ inline aiVector2t<TReal> operator - (const aiVector2t<TReal>& v1, const aiVector
|
|||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline TReal operator * (const aiVector2t<TReal>& v1, const aiVector2t<TReal>& v2)
|
inline TReal operator * (const aiVector2t<TReal>& v1, const aiVector2t<TReal>& v2)
|
||||||
{
|
{
|
||||||
return v1.x*v2.x + v1.y*v2.y;
|
return v1.x*v2.x + v1.y*v2.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
@@ -184,7 +184,7 @@ inline TReal operator * (const aiVector2t<TReal>& v1, const aiVector2t<TReal>& v
|
|||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiVector2t<TReal> operator * ( TReal f, const aiVector2t<TReal>& v)
|
inline aiVector2t<TReal> operator * ( TReal f, const aiVector2t<TReal>& v)
|
||||||
{
|
{
|
||||||
return aiVector2t<TReal>( f*v.x, f*v.y);
|
return aiVector2t<TReal>( f*v.x, f*v.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
@@ -192,7 +192,7 @@ inline aiVector2t<TReal> operator * ( TReal f, const aiVector2t<TReal>& v)
|
|||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiVector2t<TReal> operator * ( const aiVector2t<TReal>& v, TReal f)
|
inline aiVector2t<TReal> operator * ( const aiVector2t<TReal>& v, TReal f)
|
||||||
{
|
{
|
||||||
return aiVector2t<TReal>( f*v.x, f*v.y);
|
return aiVector2t<TReal>( f*v.x, f*v.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
@@ -201,7 +201,7 @@ template <typename TReal>
|
|||||||
inline aiVector2t<TReal> operator / ( const aiVector2t<TReal>& v, TReal f)
|
inline aiVector2t<TReal> operator / ( const aiVector2t<TReal>& v, TReal f)
|
||||||
{
|
{
|
||||||
|
|
||||||
return v * (1/f);
|
return v * (1/f);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
@@ -209,7 +209,7 @@ inline aiVector2t<TReal> operator / ( const aiVector2t<TReal>& v, TReal f)
|
|||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiVector2t<TReal> operator / ( const aiVector2t<TReal>& v, const aiVector2t<TReal>& v2)
|
inline aiVector2t<TReal> operator / ( const aiVector2t<TReal>& v, const aiVector2t<TReal>& v2)
|
||||||
{
|
{
|
||||||
return aiVector2t<TReal>(v.x / v2.x,v.y / v2.y);
|
return aiVector2t<TReal>(v.x / v2.x,v.y / v2.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
@@ -217,8 +217,8 @@ inline aiVector2t<TReal> operator / ( const aiVector2t<TReal>& v, const aiVector
|
|||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiVector2t<TReal> operator - ( const aiVector2t<TReal>& v)
|
inline aiVector2t<TReal> operator - ( const aiVector2t<TReal>& v)
|
||||||
{
|
{
|
||||||
return aiVector2t<TReal>( -v.x, -v.y);
|
return aiVector2t<TReal>( -v.x, -v.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,20 +25,20 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
/** @file aiVector3D.h
|
/** @file vector3.h
|
||||||
* @brief 3D vector structure, including operators when compiling in C++
|
* @brief 3D vector structure, including operators when compiling in C++
|
||||||
*/
|
*/
|
||||||
#ifndef AI_VECTOR3D_H_INC
|
#ifndef AI_VECTOR3D_H_INC
|
||||||
@@ -60,70 +60,72 @@ template<typename TReal> class aiMatrix4x4t;
|
|||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** Represents a three-dimensional vector. */
|
/** Represents a three-dimensional vector. */
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
class aiVector3t
|
class aiVector3t
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
aiVector3t () : x(), y(), z() {}
|
aiVector3t () : x(), y(), z() {}
|
||||||
aiVector3t (TReal _x, TReal _y, TReal _z) : x(_x), y(_y), z(_z) {}
|
aiVector3t (TReal _x, TReal _y, TReal _z) : x(_x), y(_y), z(_z) {}
|
||||||
explicit aiVector3t (TReal _xyz) : x(_xyz), y(_xyz), z(_xyz) {}
|
explicit aiVector3t (TReal _xyz) : x(_xyz), y(_xyz), z(_xyz) {}
|
||||||
aiVector3t (const aiVector3t& o) : x(o.x), y(o.y), z(o.z) {}
|
aiVector3t (const aiVector3t& o) : x(o.x), y(o.y), z(o.z) {}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// combined operators
|
// combined operators
|
||||||
const aiVector3t& operator += (const aiVector3t& o);
|
const aiVector3t& operator += (const aiVector3t& o);
|
||||||
const aiVector3t& operator -= (const aiVector3t& o);
|
const aiVector3t& operator -= (const aiVector3t& o);
|
||||||
const aiVector3t& operator *= (TReal f);
|
const aiVector3t& operator *= (TReal f);
|
||||||
const aiVector3t& operator /= (TReal f);
|
const aiVector3t& operator /= (TReal f);
|
||||||
|
|
||||||
// transform vector by matrix
|
// transform vector by matrix
|
||||||
aiVector3t& operator *= (const aiMatrix3x3t<TReal>& mat);
|
aiVector3t& operator *= (const aiMatrix3x3t<TReal>& mat);
|
||||||
aiVector3t& operator *= (const aiMatrix4x4t<TReal>& mat);
|
aiVector3t& operator *= (const aiMatrix4x4t<TReal>& mat);
|
||||||
|
|
||||||
// access a single element
|
// access a single element
|
||||||
TReal operator[](unsigned int i) const;
|
TReal operator[](unsigned int i) const;
|
||||||
TReal& operator[](unsigned int i);
|
TReal& operator[](unsigned int i);
|
||||||
|
|
||||||
// comparison
|
// comparison
|
||||||
bool operator== (const aiVector3t& other) const;
|
bool operator== (const aiVector3t& other) const;
|
||||||
bool operator!= (const aiVector3t& other) const;
|
bool operator!= (const aiVector3t& other) const;
|
||||||
bool operator < (const aiVector3t& other) const;
|
bool operator < (const aiVector3t& other) const;
|
||||||
|
|
||||||
bool Equal(const aiVector3t& other, TReal epsilon = 1e-6) const;
|
bool Equal(const aiVector3t& other, TReal epsilon = 1e-6) const;
|
||||||
|
|
||||||
template <typename TOther>
|
template <typename TOther>
|
||||||
operator aiVector3t<TOther> () const;
|
operator aiVector3t<TOther> () const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/** @brief Set the components of a vector
|
/** @brief Set the components of a vector
|
||||||
* @param pX X component
|
* @param pX X component
|
||||||
* @param pY Y component
|
* @param pY Y component
|
||||||
* @param pZ Z component */
|
* @param pZ Z component */
|
||||||
void Set( TReal pX, TReal pY, TReal pZ);
|
void Set( TReal pX, TReal pY, TReal pZ);
|
||||||
|
|
||||||
/** @brief Get the squared length of the vector
|
/** @brief Get the squared length of the vector
|
||||||
* @return Square length */
|
* @return Square length */
|
||||||
TReal SquareLength() const;
|
TReal SquareLength() const;
|
||||||
|
|
||||||
|
|
||||||
/** @brief Get the length of the vector
|
/** @brief Get the length of the vector
|
||||||
* @return length */
|
* @return length */
|
||||||
TReal Length() const;
|
TReal Length() const;
|
||||||
|
|
||||||
|
|
||||||
/** @brief Normalize the vector */
|
/** @brief Normalize the vector */
|
||||||
aiVector3t& Normalize();
|
aiVector3t& Normalize();
|
||||||
|
|
||||||
|
/** @brief Normalize the vector with extra check for zero vectors */
|
||||||
/** @brief Componentwise multiplication of two vectors
|
aiVector3t& NormalizeSafe();
|
||||||
*
|
|
||||||
* Note that vec*vec yields the dot product.
|
|
||||||
* @param o Second factor */
|
|
||||||
const aiVector3t SymMul(const aiVector3t& o);
|
|
||||||
|
|
||||||
TReal x, y, z;
|
/** @brief Componentwise multiplication of two vectors
|
||||||
|
*
|
||||||
|
* Note that vec*vec yields the dot product.
|
||||||
|
* @param o Second factor */
|
||||||
|
const aiVector3t SymMul(const aiVector3t& o);
|
||||||
|
|
||||||
|
TReal x, y, z;
|
||||||
} PACK_STRUCT;
|
} PACK_STRUCT;
|
||||||
|
|
||||||
|
|
||||||
@@ -132,8 +134,7 @@ typedef aiVector3t<float> aiVector3D;
|
|||||||
#else
|
#else
|
||||||
|
|
||||||
struct aiVector3D {
|
struct aiVector3D {
|
||||||
|
float x, y, z;
|
||||||
float x,y,z;
|
|
||||||
} PACK_STRUCT;
|
} PACK_STRUCT;
|
||||||
|
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,21 +25,21 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @file aiVector3D.inl
|
/** @file vector3.inl
|
||||||
* @brief Inline implementation of aiVector3t<TReal> operators
|
* @brief Inline implementation of aiVector3t<TReal> operators
|
||||||
*/
|
*/
|
||||||
#ifndef AI_VECTOR3D_INL_INC
|
#ifndef AI_VECTOR3D_INL_INC
|
||||||
@@ -55,11 +55,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiVector3t<TReal> operator * (const aiMatrix3x3t<TReal>& pMatrix, const aiVector3t<TReal>& pVector)
|
inline aiVector3t<TReal> operator * (const aiMatrix3x3t<TReal>& pMatrix, const aiVector3t<TReal>& pVector)
|
||||||
{
|
{
|
||||||
aiVector3t<TReal> res;
|
aiVector3t<TReal> res;
|
||||||
res.x = pMatrix.a1 * pVector.x + pMatrix.a2 * pVector.y + pMatrix.a3 * pVector.z;
|
res.x = pMatrix.a1 * pVector.x + pMatrix.a2 * pVector.y + pMatrix.a3 * pVector.z;
|
||||||
res.y = pMatrix.b1 * pVector.x + pMatrix.b2 * pVector.y + pMatrix.b3 * pVector.z;
|
res.y = pMatrix.b1 * pVector.x + pMatrix.b2 * pVector.y + pMatrix.b3 * pVector.z;
|
||||||
res.z = pMatrix.c1 * pVector.x + pMatrix.c2 * pVector.y + pMatrix.c3 * pVector.z;
|
res.z = pMatrix.c1 * pVector.x + pMatrix.c2 * pVector.y + pMatrix.c3 * pVector.z;
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
@@ -67,159 +67,167 @@ inline aiVector3t<TReal> operator * (const aiMatrix3x3t<TReal>& pMatrix, const a
|
|||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
inline aiVector3t<TReal> operator * (const aiMatrix4x4t<TReal>& pMatrix, const aiVector3t<TReal>& pVector)
|
inline aiVector3t<TReal> operator * (const aiMatrix4x4t<TReal>& pMatrix, const aiVector3t<TReal>& pVector)
|
||||||
{
|
{
|
||||||
aiVector3t<TReal> res;
|
aiVector3t<TReal> res;
|
||||||
res.x = pMatrix.a1 * pVector.x + pMatrix.a2 * pVector.y + pMatrix.a3 * pVector.z + pMatrix.a4;
|
res.x = pMatrix.a1 * pVector.x + pMatrix.a2 * pVector.y + pMatrix.a3 * pVector.z + pMatrix.a4;
|
||||||
res.y = pMatrix.b1 * pVector.x + pMatrix.b2 * pVector.y + pMatrix.b3 * pVector.z + pMatrix.b4;
|
res.y = pMatrix.b1 * pVector.x + pMatrix.b2 * pVector.y + pMatrix.b3 * pVector.z + pMatrix.b4;
|
||||||
res.z = pMatrix.c1 * pVector.x + pMatrix.c2 * pVector.y + pMatrix.c3 * pVector.z + pMatrix.c4;
|
res.z = pMatrix.c1 * pVector.x + pMatrix.c2 * pVector.y + pMatrix.c3 * pVector.z + pMatrix.c4;
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
template <typename TOther>
|
template <typename TOther>
|
||||||
aiVector3t<TReal>::operator aiVector3t<TOther> () const {
|
aiVector3t<TReal>::operator aiVector3t<TOther> () const {
|
||||||
return aiVector3t<TOther>(static_cast<TOther>(x),static_cast<TOther>(y),static_cast<TOther>(z));
|
return aiVector3t<TOther>(static_cast<TOther>(x),static_cast<TOther>(y),static_cast<TOther>(z));
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE void aiVector3t<TReal>::Set( TReal pX, TReal pY, TReal pZ) {
|
AI_FORCE_INLINE void aiVector3t<TReal>::Set( TReal pX, TReal pY, TReal pZ) {
|
||||||
x = pX; y = pY; z = pZ;
|
x = pX; y = pY; z = pZ;
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE TReal aiVector3t<TReal>::SquareLength() const {
|
AI_FORCE_INLINE TReal aiVector3t<TReal>::SquareLength() const {
|
||||||
return x*x + y*y + z*z;
|
return x*x + y*y + z*z;
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE TReal aiVector3t<TReal>::Length() const {
|
AI_FORCE_INLINE TReal aiVector3t<TReal>::Length() const {
|
||||||
return ::sqrt( SquareLength());
|
return std::sqrt( SquareLength());
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE aiVector3t<TReal>& aiVector3t<TReal>::Normalize() {
|
AI_FORCE_INLINE aiVector3t<TReal>& aiVector3t<TReal>::Normalize() {
|
||||||
*this /= Length(); return *this;
|
*this /= Length(); return *this;
|
||||||
|
}
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
template <typename TReal>
|
||||||
|
AI_FORCE_INLINE aiVector3t<TReal>& aiVector3t<TReal>::NormalizeSafe() {
|
||||||
|
TReal len = Length();
|
||||||
|
if (len > static_cast<TReal>(0))
|
||||||
|
*this /= len;
|
||||||
|
return *this;
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE const aiVector3t<TReal>& aiVector3t<TReal>::operator += (const aiVector3t<TReal>& o) {
|
AI_FORCE_INLINE const aiVector3t<TReal>& aiVector3t<TReal>::operator += (const aiVector3t<TReal>& o) {
|
||||||
x += o.x; y += o.y; z += o.z; return *this;
|
x += o.x; y += o.y; z += o.z; return *this;
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE const aiVector3t<TReal>& aiVector3t<TReal>::operator -= (const aiVector3t<TReal>& o) {
|
AI_FORCE_INLINE const aiVector3t<TReal>& aiVector3t<TReal>::operator -= (const aiVector3t<TReal>& o) {
|
||||||
x -= o.x; y -= o.y; z -= o.z; return *this;
|
x -= o.x; y -= o.y; z -= o.z; return *this;
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE const aiVector3t<TReal>& aiVector3t<TReal>::operator *= (TReal f) {
|
AI_FORCE_INLINE const aiVector3t<TReal>& aiVector3t<TReal>::operator *= (TReal f) {
|
||||||
x *= f; y *= f; z *= f; return *this;
|
x *= f; y *= f; z *= f; return *this;
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE const aiVector3t<TReal>& aiVector3t<TReal>::operator /= (TReal f) {
|
AI_FORCE_INLINE const aiVector3t<TReal>& aiVector3t<TReal>::operator /= (TReal f) {
|
||||||
x /= f; y /= f; z /= f; return *this;
|
x /= f; y /= f; z /= f; return *this;
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE aiVector3t<TReal>& aiVector3t<TReal>::operator *= (const aiMatrix3x3t<TReal>& mat){
|
AI_FORCE_INLINE aiVector3t<TReal>& aiVector3t<TReal>::operator *= (const aiMatrix3x3t<TReal>& mat){
|
||||||
return(*this = mat * (*this));
|
return(*this = mat * (*this));
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE aiVector3t<TReal>& aiVector3t<TReal>::operator *= (const aiMatrix4x4t<TReal>& mat){
|
AI_FORCE_INLINE aiVector3t<TReal>& aiVector3t<TReal>::operator *= (const aiMatrix4x4t<TReal>& mat){
|
||||||
return(*this = mat * (*this));
|
return(*this = mat * (*this));
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE TReal aiVector3t<TReal>::operator[](unsigned int i) const {
|
AI_FORCE_INLINE TReal aiVector3t<TReal>::operator[](unsigned int i) const {
|
||||||
return *(&x + i);
|
return *(&x + i);
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE TReal& aiVector3t<TReal>::operator[](unsigned int i) {
|
AI_FORCE_INLINE TReal& aiVector3t<TReal>::operator[](unsigned int i) {
|
||||||
return *(&x + i);
|
return *(&x + i);
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE bool aiVector3t<TReal>::operator== (const aiVector3t<TReal>& other) const {
|
AI_FORCE_INLINE bool aiVector3t<TReal>::operator== (const aiVector3t<TReal>& other) const {
|
||||||
return x == other.x && y == other.y && z == other.z;
|
return x == other.x && y == other.y && z == other.z;
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE bool aiVector3t<TReal>::operator!= (const aiVector3t<TReal>& other) const {
|
AI_FORCE_INLINE bool aiVector3t<TReal>::operator!= (const aiVector3t<TReal>& other) const {
|
||||||
return x != other.x || y != other.y || z != other.z;
|
return x != other.x || y != other.y || z != other.z;
|
||||||
}
|
}
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
template<typename TReal>
|
template<typename TReal>
|
||||||
AI_FORCE_INLINE bool aiVector3t<TReal>::Equal(const aiVector3t<TReal>& other, TReal epsilon) const {
|
AI_FORCE_INLINE bool aiVector3t<TReal>::Equal(const aiVector3t<TReal>& other, TReal epsilon) const {
|
||||||
return
|
return
|
||||||
std::abs(x - other.x) <= epsilon &&
|
std::abs(x - other.x) <= epsilon &&
|
||||||
std::abs(y - other.y) <= epsilon &&
|
std::abs(y - other.y) <= epsilon &&
|
||||||
std::abs(z - other.z) <= epsilon;
|
std::abs(z - other.z) <= epsilon;
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE bool aiVector3t<TReal>::operator < (const aiVector3t<TReal>& other) const {
|
AI_FORCE_INLINE bool aiVector3t<TReal>::operator < (const aiVector3t<TReal>& other) const {
|
||||||
return x != other.x ? x < other.x : y != other.y ? y < other.y : z < other.z;
|
return x != other.x ? x < other.x : y != other.y ? y < other.y : z < other.z;
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE const aiVector3t<TReal> aiVector3t<TReal>::SymMul(const aiVector3t<TReal>& o) {
|
AI_FORCE_INLINE const aiVector3t<TReal> aiVector3t<TReal>::SymMul(const aiVector3t<TReal>& o) {
|
||||||
return aiVector3t<TReal>(x*o.x,y*o.y,z*o.z);
|
return aiVector3t<TReal>(x*o.x,y*o.y,z*o.z);
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// symmetric addition
|
// symmetric addition
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE aiVector3t<TReal> operator + (const aiVector3t<TReal>& v1, const aiVector3t<TReal>& v2) {
|
AI_FORCE_INLINE aiVector3t<TReal> operator + (const aiVector3t<TReal>& v1, const aiVector3t<TReal>& v2) {
|
||||||
return aiVector3t<TReal>( v1.x + v2.x, v1.y + v2.y, v1.z + v2.z);
|
return aiVector3t<TReal>( v1.x + v2.x, v1.y + v2.y, v1.z + v2.z);
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// symmetric subtraction
|
// symmetric subtraction
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE aiVector3t<TReal> operator - (const aiVector3t<TReal>& v1, const aiVector3t<TReal>& v2) {
|
AI_FORCE_INLINE aiVector3t<TReal> operator - (const aiVector3t<TReal>& v1, const aiVector3t<TReal>& v2) {
|
||||||
return aiVector3t<TReal>( v1.x - v2.x, v1.y - v2.y, v1.z - v2.z);
|
return aiVector3t<TReal>( v1.x - v2.x, v1.y - v2.y, v1.z - v2.z);
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// scalar product
|
// scalar product
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE TReal operator * (const aiVector3t<TReal>& v1, const aiVector3t<TReal>& v2) {
|
AI_FORCE_INLINE TReal operator * (const aiVector3t<TReal>& v1, const aiVector3t<TReal>& v2) {
|
||||||
return v1.x*v2.x + v1.y*v2.y + v1.z*v2.z;
|
return v1.x*v2.x + v1.y*v2.y + v1.z*v2.z;
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// scalar multiplication
|
// scalar multiplication
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE aiVector3t<TReal> operator * ( TReal f, const aiVector3t<TReal>& v) {
|
AI_FORCE_INLINE aiVector3t<TReal> operator * ( TReal f, const aiVector3t<TReal>& v) {
|
||||||
return aiVector3t<TReal>( f*v.x, f*v.y, f*v.z);
|
return aiVector3t<TReal>( f*v.x, f*v.y, f*v.z);
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// and the other way around
|
// and the other way around
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE aiVector3t<TReal> operator * ( const aiVector3t<TReal>& v, TReal f) {
|
AI_FORCE_INLINE aiVector3t<TReal> operator * ( const aiVector3t<TReal>& v, TReal f) {
|
||||||
return aiVector3t<TReal>( f*v.x, f*v.y, f*v.z);
|
return aiVector3t<TReal>( f*v.x, f*v.y, f*v.z);
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// scalar division
|
// scalar division
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE aiVector3t<TReal> operator / ( const aiVector3t<TReal>& v, TReal f) {
|
AI_FORCE_INLINE aiVector3t<TReal> operator / ( const aiVector3t<TReal>& v, TReal f) {
|
||||||
return v * (1/f);
|
return v * (1/f);
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// vector division
|
// vector division
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE aiVector3t<TReal> operator / ( const aiVector3t<TReal>& v, const aiVector3t<TReal>& v2) {
|
AI_FORCE_INLINE aiVector3t<TReal> operator / ( const aiVector3t<TReal>& v, const aiVector3t<TReal>& v2) {
|
||||||
return aiVector3t<TReal>(v.x / v2.x,v.y / v2.y,v.z / v2.z);
|
return aiVector3t<TReal>(v.x / v2.x,v.y / v2.y,v.z / v2.z);
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// cross product
|
// cross product
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE aiVector3t<TReal> operator ^ ( const aiVector3t<TReal>& v1, const aiVector3t<TReal>& v2) {
|
AI_FORCE_INLINE aiVector3t<TReal> operator ^ ( const aiVector3t<TReal>& v1, const aiVector3t<TReal>& v2) {
|
||||||
return aiVector3t<TReal>( v1.y*v2.z - v1.z*v2.y, v1.z*v2.x - v1.x*v2.z, v1.x*v2.y - v1.y*v2.x);
|
return aiVector3t<TReal>( v1.y*v2.z - v1.z*v2.y, v1.z*v2.x - v1.x*v2.z, v1.x*v2.y - v1.y*v2.x);
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// vector negation
|
// vector negation
|
||||||
template <typename TReal>
|
template <typename TReal>
|
||||||
AI_FORCE_INLINE aiVector3t<TReal> operator - ( const aiVector3t<TReal>& v) {
|
AI_FORCE_INLINE aiVector3t<TReal> operator - ( const aiVector3t<TReal>& v) {
|
||||||
return aiVector3t<TReal>( -v.x, -v.y, -v.z);
|
return aiVector3t<TReal>( -v.x, -v.y, -v.z);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2012, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
with or without modification, are permitted provided that the following
|
with or without modification, are permitted provided that the following
|
||||||
conditions are met:
|
conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above
|
* Redistributions of source code must retain the above
|
||||||
@@ -25,33 +25,35 @@ conditions are met:
|
|||||||
derived from this software without specific prior
|
derived from this software without specific prior
|
||||||
written permission of the assimp team.
|
written permission of the assimp team.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @file aiVersion.h
|
/** @file version.h
|
||||||
* @brief Functions to query the version of the Assimp runtime, check
|
* @brief Functions to query the version of the Assimp runtime, check
|
||||||
* compile flags, ...
|
* compile flags, ...
|
||||||
*/
|
*/
|
||||||
#ifndef INCLUDED_AI_VERSION_H
|
#ifndef INCLUDED_AI_VERSION_H
|
||||||
#define INCLUDED_AI_VERSION_H
|
#define INCLUDED_AI_VERSION_H
|
||||||
|
|
||||||
|
#include "defs.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Returns a string with legal copyright and licensing information
|
/** @brief Returns a string with legal copyright and licensing information
|
||||||
* about Assimp. The string may include multiple lines.
|
* about Assimp. The string may include multiple lines.
|
||||||
* @return Pointer to static string.
|
* @return Pointer to static string.
|
||||||
*/
|
*/
|
||||||
@@ -73,13 +75,13 @@ ASSIMP_API unsigned int aiGetVersionMajor (void);
|
|||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Returns the repository revision of the Assimp runtime.
|
/** @brief Returns the repository revision of the Assimp runtime.
|
||||||
* @return SVN Repository revision number of the Assimp runtime the
|
* @return SVN Repository revision number of the Assimp runtime the
|
||||||
* application was linked/built against.
|
* application was linked/built against.
|
||||||
*/
|
*/
|
||||||
ASSIMP_API unsigned int aiGetVersionRevision (void);
|
ASSIMP_API unsigned int aiGetVersionRevision (void);
|
||||||
|
|
||||||
//! Assimp was compiled as a shared object (Windows: DLL)
|
//! Assimp was compiled as a shared object (Windows: DLL)
|
||||||
#define ASSIMP_CFLAGS_SHARED 0x1
|
#define ASSIMP_CFLAGS_SHARED 0x1
|
||||||
//! Assimp was compiled against STLport
|
//! Assimp was compiled against STLport
|
||||||
#define ASSIMP_CFLAGS_STLPORT 0x2
|
#define ASSIMP_CFLAGS_STLPORT 0x2
|
||||||
//! Assimp was compiled as a debug build
|
//! Assimp was compiled as a debug build
|
||||||
|
|||||||
BIN
lib/assimp.lib
BIN
lib/assimp.lib
Binary file not shown.
BIN
lib/glfw3.lib
BIN
lib/glfw3.lib
Binary file not shown.
Reference in New Issue
Block a user