Merge branch 'master' into coverity_scan
commit
6cf639956a
18
CHANGES
18
CHANGES
|
@ -2,6 +2,24 @@
|
||||||
CHANGELOG
|
CHANGELOG
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
|
3.2.0 (2015-11-03)
|
||||||
|
|
||||||
|
FEATURES:
|
||||||
|
- OpenDDL-Parser is part of contrib-source.
|
||||||
|
- Experimental OpenGEX-support
|
||||||
|
- CI-check for linux and windows
|
||||||
|
- Coverity check added
|
||||||
|
- New regression testsuite.
|
||||||
|
|
||||||
|
FIXES/HOUSEKEEPING:
|
||||||
|
- Hundreds of bugfixes in all parts of the library
|
||||||
|
- Unified line endings
|
||||||
|
|
||||||
|
|
||||||
|
API COMPATIBILITY:
|
||||||
|
- Removed precompiled header to increase build speed for linux
|
||||||
|
|
||||||
|
|
||||||
3.1.1 (2014-06-15)
|
3.1.1 (2014-06-15)
|
||||||
|
|
||||||
FEATURES:
|
FEATURES:
|
||||||
|
|
|
@ -98,10 +98,10 @@ SET( ASSIMP_INCLUDE_INSTALL_DIR "include" CACHE PATH
|
||||||
SET( ASSIMP_BIN_INSTALL_DIR "bin" CACHE PATH
|
SET( ASSIMP_BIN_INSTALL_DIR "bin" CACHE PATH
|
||||||
"Path the tool executables are installed to." )
|
"Path the tool executables are installed to." )
|
||||||
|
|
||||||
IF (CMAKE_BUILD_TYPE STREQUAL "Release")
|
IF (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
SET(CMAKE_DEBUG_POSTFIX "" CACHE STRING "Debug Postfix for lib, samples and tools")
|
|
||||||
ELSE()
|
|
||||||
SET(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "Debug Postfix for lib, samples and tools")
|
SET(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "Debug Postfix for lib, samples and tools")
|
||||||
|
ELSE()
|
||||||
|
SET(CMAKE_DEBUG_POSTFIX "" CACHE STRING "Debug Postfix for lib, samples and tools")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
# Only generate this target if no higher-level project already has
|
# Only generate this target if no higher-level project already has
|
||||||
|
|
17
Readme.md
17
Readme.md
|
@ -1,6 +1,5 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
========
|
==================================
|
||||||
|
|
||||||
Open Asset Import Library is a library to load various 3d file formats into a shared, in-memory format. It supports more than __40 file formats__ for import and a growing selection of file formats for export.
|
Open Asset Import Library is a library to load various 3d file formats into a shared, in-memory format. It supports more than __40 file formats__ for import and a growing selection of file formats for export.
|
||||||
|
|
||||||
APIs are provided for C and C++. There are various bindings to other languages (C#, Java, Python, Delphi, D). Assimp also runs on Android and iOS.
|
APIs are provided for C and C++. There are various bindings to other languages (C#, Java, Python, Delphi, D). Assimp also runs on Android and iOS.
|
||||||
|
@ -80,14 +79,15 @@ __Exporters__:
|
||||||
- glTF
|
- glTF
|
||||||
|
|
||||||
### Building ###
|
### Building ###
|
||||||
|
|
||||||
|
|
||||||
Take a look into the `INSTALL` file. Our build system is CMake, if you used CMake before there is a good chance you know what to do.
|
Take a look into the `INSTALL` file. Our build system is CMake, if you used CMake before there is a good chance you know what to do.
|
||||||
|
|
||||||
|
### Ports ###
|
||||||
|
* [Android](port/AndroidJNI/README.md)
|
||||||
|
* [Python](port/PyAssimp/README.md)
|
||||||
|
* [.NET](port/AssimpNET/Readme.md)
|
||||||
|
* [Pascal](port/AssimpPascal/Readme.md)
|
||||||
|
|
||||||
#### Repository structure ####
|
#### Repository structure ####
|
||||||
|
|
||||||
|
|
||||||
Open Asset Import Library is implemented in C++. The directory structure is:
|
Open Asset Import Library is implemented in C++. The directory structure is:
|
||||||
|
|
||||||
/code Source code
|
/code Source code
|
||||||
|
@ -105,8 +105,6 @@ Open Asset Import Library is implemented in C++. The directory structure is:
|
||||||
|
|
||||||
|
|
||||||
### Where to get help ###
|
### Where to get help ###
|
||||||
|
|
||||||
|
|
||||||
For more information, visit [our website](http://assimp.sourceforge.net/). Or check out the `./doc`- folder, which contains the official documentation in HTML format.
|
For more information, visit [our website](http://assimp.sourceforge.net/). Or check out the `./doc`- folder, which contains the official documentation in HTML format.
|
||||||
(CHMs for Windows are included in some release packages and should be located right here in the root folder).
|
(CHMs for Windows are included in some release packages and should be located right here in the root folder).
|
||||||
|
|
||||||
|
@ -119,12 +117,10 @@ And we also have an IRC-channel at freenode: #assetimporterlib . You can easily
|
||||||
> /join #assetimporterlib
|
> /join #assetimporterlib
|
||||||
|
|
||||||
### Contributing ###
|
### Contributing ###
|
||||||
|
|
||||||
Contributions to assimp are highly appreciated. The easiest way to get involved is to submit
|
Contributions to assimp are highly appreciated. The easiest way to get involved is to submit
|
||||||
a pull request with your changes against the main repository's `master` branch.
|
a pull request with your changes against the main repository's `master` branch.
|
||||||
|
|
||||||
### License ###
|
### License ###
|
||||||
|
|
||||||
Our license is based on the modified, __3-clause BSD__-License.
|
Our license is based on the modified, __3-clause BSD__-License.
|
||||||
|
|
||||||
An _informal_ summary is: do whatever you want, but include Assimp's license text with your product -
|
An _informal_ summary is: do whatever you want, but include Assimp's license text with your product -
|
||||||
|
@ -132,5 +128,4 @@ and don't sue us if our code doesn't work. Note that, unlike LGPLed code, you ma
|
||||||
For the legal details, see the `LICENSE` file.
|
For the legal details, see the `LICENSE` file.
|
||||||
|
|
||||||
### Why this name ###
|
### Why this name ###
|
||||||
|
|
||||||
Sorry, we're germans :-), no english native speakers ...
|
Sorry, we're germans :-), no english native speakers ...
|
||||||
|
|
23
appveyor.yml
23
appveyor.yml
|
@ -13,11 +13,28 @@ branches:
|
||||||
platform:
|
platform:
|
||||||
- x86
|
- x86
|
||||||
- x64
|
- x64
|
||||||
configuration: Release
|
|
||||||
|
|
||||||
build:
|
configuration:
|
||||||
|
- 14 2015
|
||||||
|
- 12 2013
|
||||||
|
#- MinGW
|
||||||
|
- 10 2010 # only works for x86
|
||||||
|
|
||||||
|
init:
|
||||||
|
- if "%platform%" EQU "x64" ( for %%a in (2008 2010 MinGW) do ( if "%Configuration%"=="%%a" (echo "Skipping unsupported configuration" && exit /b 1 ) ) )
|
||||||
|
|
||||||
|
install:
|
||||||
|
# Make compiler command line tools available
|
||||||
|
- call c:\projects\assimp\scripts\appveyor\compiler_setup.bat
|
||||||
|
|
||||||
build_script:
|
build_script:
|
||||||
- cd c:\projects\assimp
|
- cd c:\projects\assimp
|
||||||
- cmake CMakeLists.txt -G "Visual Studio 11"
|
- cmake CMakeLists.txt -G "Visual Studio %Configuration%"
|
||||||
- msbuild /m /p:Configuration=Release /p:Platform="Win32" Assimp.sln
|
- msbuild /m /p:Configuration=Release /p:Platform="Win32" Assimp.sln
|
||||||
|
|
||||||
|
after_build:
|
||||||
|
- 7z a assimp.7z c:\projects\assimp\bin\release\* c:\projects\assimp\lib\release\*
|
||||||
|
|
||||||
|
artifacts:
|
||||||
|
- path: assimp.7z
|
||||||
|
name: assimp_lib
|
||||||
|
|
|
@ -21,7 +21,8 @@ endif()
|
||||||
set(GTEST_CMAKE_ARGS
|
set(GTEST_CMAKE_ARGS
|
||||||
"-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
|
"-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
|
||||||
"-Dgtest_force_shared_crt=ON"
|
"-Dgtest_force_shared_crt=ON"
|
||||||
"-Dgtest_disable_pthreads:BOOL=${DISABLE_PTHREADS}")
|
"-Dgtest_disable_pthreads:BOOL=${DISABLE_PTHREADS}"
|
||||||
|
"-DBUILD_GTEST=ON")
|
||||||
set(GTEST_RELEASE_LIB_DIR "")
|
set(GTEST_RELEASE_LIB_DIR "")
|
||||||
set(GTEST_DEBUGLIB_DIR "")
|
set(GTEST_DEBUGLIB_DIR "")
|
||||||
if (MSVC)
|
if (MSVC)
|
||||||
|
@ -41,7 +42,7 @@ else(NOT GIT_FOUND)
|
||||||
set(AddGTest_FOUND true CACHE BOOL "Was gtest setup correctly?")
|
set(AddGTest_FOUND true CACHE BOOL "Was gtest setup correctly?")
|
||||||
|
|
||||||
ExternalProject_Add(gtest
|
ExternalProject_Add(gtest
|
||||||
GIT_REPOSITORY https://chromium.googlesource.com/external/googletest
|
GIT_REPOSITORY https://github.com/google/googletest.git
|
||||||
TIMEOUT 10
|
TIMEOUT 10
|
||||||
PREFIX "${GTEST_PREFIX}"
|
PREFIX "${GTEST_PREFIX}"
|
||||||
CMAKE_ARGS "${GTEST_CMAKE_ARGS}"
|
CMAKE_ARGS "${GTEST_CMAKE_ARGS}"
|
||||||
|
@ -56,10 +57,10 @@ else(NOT GIT_FOUND)
|
||||||
set(LIB_SUFFIX "${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
set(LIB_SUFFIX "${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||||
set(GTEST_LOCATION "${GTEST_PREFIX}/src/gtest-build")
|
set(GTEST_LOCATION "${GTEST_PREFIX}/src/gtest-build")
|
||||||
set(GTEST_DEBUG_LIBRARIES
|
set(GTEST_DEBUG_LIBRARIES
|
||||||
"${GTEST_LOCATION}/${DEBUG_LIB_DIR}/${LIB_PREFIX}gtest${LIB_SUFFIX}"
|
"${LIB_PREFIX}gtest${LIB_SUFFIX}"
|
||||||
"${CMAKE_THREAD_LIBS_INIT}")
|
"${CMAKE_THREAD_LIBS_INIT}")
|
||||||
SET(GTEST_RELEASE_LIBRARIES
|
SET(GTEST_RELEASE_LIBRARIES
|
||||||
"${GTEST_LOCATION}/${RELEASE_LIB_DIR}/${LIB_PREFIX}gtest${LIB_SUFFIX}"
|
"${LIB_PREFIX}gtest${LIB_SUFFIX}"
|
||||||
"${CMAKE_THREAD_LIBS_INIT}")
|
"${CMAKE_THREAD_LIBS_INIT}")
|
||||||
|
|
||||||
if(MSVC_VERSION EQUAL 1700)
|
if(MSVC_VERSION EQUAL 1700)
|
||||||
|
@ -67,9 +68,11 @@ else(NOT GIT_FOUND)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
ExternalProject_Get_Property(gtest source_dir)
|
ExternalProject_Get_Property(gtest source_dir)
|
||||||
include_directories(${source_dir}/include)
|
include_directories(${source_dir}/googletest/include)
|
||||||
include_directories(${source_dir}/gtest/include)
|
include_directories(${source_dir}/gtest/include)
|
||||||
|
|
||||||
ExternalProject_Get_Property(gtest binary_dir)
|
ExternalProject_Get_Property(gtest binary_dir)
|
||||||
link_directories(${binary_dir})
|
link_directories(${binary_dir}/googlemock/gtest)
|
||||||
|
link_directories(${binary_dir}/googlemock/gtest/${RELEASE_LIB_DIR})
|
||||||
|
link_directories(${binary_dir}/googlemock/gtest/${DEBUG_LIB_DIR})
|
||||||
endif(NOT GIT_FOUND)
|
endif(NOT GIT_FOUND)
|
||||||
|
|
|
@ -70,8 +70,9 @@ void Discreet3DSImporter::ReplaceDefaultMaterial()
|
||||||
for (unsigned int i = 0; i < mScene->mMaterials.size();++i)
|
for (unsigned int i = 0; i < mScene->mMaterials.size();++i)
|
||||||
{
|
{
|
||||||
std::string s = mScene->mMaterials[i].mName;
|
std::string s = mScene->mMaterials[i].mName;
|
||||||
for (std::string::iterator it = s.begin(); it != s.end(); ++it)
|
for ( std::string::iterator it = s.begin(); it != s.end(); ++it ) {
|
||||||
*it = ::tolower(*it);
|
*it = static_cast< char >( ::tolower( *it ) );
|
||||||
|
}
|
||||||
|
|
||||||
if (std::string::npos == s.find("default"))continue;
|
if (std::string::npos == s.find("default"))continue;
|
||||||
|
|
||||||
|
@ -663,14 +664,14 @@ void Discreet3DSImporter::AddNodeToGraph(aiScene* pcSOut,aiNode* pcOut,
|
||||||
nda->mRotationKeys = new aiQuatKey[nda->mNumRotationKeys];
|
nda->mRotationKeys = new aiQuatKey[nda->mNumRotationKeys];
|
||||||
|
|
||||||
// Rotations are quaternion offsets
|
// Rotations are quaternion offsets
|
||||||
aiQuaternion abs;
|
aiQuaternion abs1;
|
||||||
for (unsigned int n = 0; n < nda->mNumRotationKeys;++n)
|
for (unsigned int n = 0; n < nda->mNumRotationKeys;++n)
|
||||||
{
|
{
|
||||||
const aiQuatKey& q = pcIn->aRotationKeys[n];
|
const aiQuatKey& q = pcIn->aRotationKeys[n];
|
||||||
|
|
||||||
abs = (n ? abs * q.mValue : q.mValue);
|
abs1 = (n ? abs1 * q.mValue : q.mValue);
|
||||||
nda->mRotationKeys[n].mTime = q.mTime;
|
nda->mRotationKeys[n].mTime = q.mTime;
|
||||||
nda->mRotationKeys[n].mValue = abs.Normalize();
|
nda->mRotationKeys[n].mValue = abs1.Normalize();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -485,9 +485,9 @@ struct aiFloatKey
|
||||||
/** Helper structure to represent a 3ds file node */
|
/** Helper structure to represent a 3ds file node */
|
||||||
struct Node
|
struct Node
|
||||||
{
|
{
|
||||||
Node()
|
Node():
|
||||||
: mParent()
|
mParent(NULL)
|
||||||
, mInstanceNumber()
|
, mInstanceNumber(0)
|
||||||
, mHierarchyPos (0)
|
, mHierarchyPos (0)
|
||||||
, mHierarchyIndex (0)
|
, mHierarchyIndex (0)
|
||||||
, mInstanceCount (1)
|
, mInstanceCount (1)
|
||||||
|
|
|
@ -96,11 +96,13 @@ namespace Assimp
|
||||||
/** will return all registered importers. */
|
/** will return all registered importers. */
|
||||||
void GetImporterInstanceList(std::vector< BaseImporter* >& out);
|
void GetImporterInstanceList(std::vector< BaseImporter* >& out);
|
||||||
|
|
||||||
|
/** will delete all registered importers. */
|
||||||
|
void DeleteImporterInstanceList(std::vector< BaseImporter* >& out);
|
||||||
} // namespace assimp
|
} // namespace assimp
|
||||||
|
|
||||||
|
|
||||||
#ifndef ASSIMP_BUILD_SINGLETHREADED
|
#ifndef ASSIMP_BUILD_SINGLETHREADED
|
||||||
/** Global mutex to manage the access to the logstream map */
|
/** Global mutex to manage the access to the log-stream map */
|
||||||
static boost::mutex gLogStreamMutex;
|
static boost::mutex gLogStreamMutex;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -228,7 +230,8 @@ const aiScene* aiImportFileFromMemoryWithProperties(
|
||||||
const char* pHint,
|
const char* pHint,
|
||||||
const aiPropertyStore* props)
|
const aiPropertyStore* props)
|
||||||
{
|
{
|
||||||
ai_assert(NULL != pBuffer && 0 != pLength);
|
ai_assert( NULL != pBuffer );
|
||||||
|
ai_assert( 0 != pLength );
|
||||||
|
|
||||||
const aiScene* scene = NULL;
|
const aiScene* scene = NULL;
|
||||||
ASSIMP_BEGIN_EXCEPTION_REGION();
|
ASSIMP_BEGIN_EXCEPTION_REGION();
|
||||||
|
@ -317,10 +320,38 @@ ASSIMP_API const aiScene* aiApplyPostProcessing(const aiScene* pScene,
|
||||||
return sc;
|
return sc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
ASSIMP_API const aiScene *aiApplyCustomizedPostProcessing( const aiScene *scene,
|
||||||
|
BaseProcess* process,
|
||||||
|
bool requestValidation ) {
|
||||||
|
const aiScene* sc( NULL );
|
||||||
|
|
||||||
|
ASSIMP_BEGIN_EXCEPTION_REGION();
|
||||||
|
|
||||||
|
// find the importer associated with this data
|
||||||
|
const ScenePrivateData* priv = ScenePriv( scene );
|
||||||
|
if ( NULL == priv || NULL == priv->mOrigImporter ) {
|
||||||
|
ReportSceneNotFoundError();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
sc = priv->mOrigImporter->ApplyCustomizedPostProcessing( process, requestValidation );
|
||||||
|
|
||||||
|
if ( !sc ) {
|
||||||
|
aiReleaseImport( scene );
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSIMP_END_EXCEPTION_REGION( const aiScene* );
|
||||||
|
|
||||||
|
return sc;
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void CallbackToLogRedirector (const char* msg, char* dt)
|
void CallbackToLogRedirector (const char* msg, char* dt)
|
||||||
{
|
{
|
||||||
ai_assert(NULL != msg && NULL != dt);
|
ai_assert( NULL != msg );
|
||||||
|
ai_assert( NULL != dt );
|
||||||
LogStream* s = (LogStream*)dt;
|
LogStream* s = (LogStream*)dt;
|
||||||
|
|
||||||
s->write(msg);
|
s->write(msg);
|
||||||
|
@ -373,7 +404,7 @@ ASSIMP_API aiReturn aiDetachLogStream( const aiLogStream* stream)
|
||||||
#ifndef ASSIMP_BUILD_SINGLETHREADED
|
#ifndef ASSIMP_BUILD_SINGLETHREADED
|
||||||
boost::mutex::scoped_lock lock(gLogStreamMutex);
|
boost::mutex::scoped_lock lock(gLogStreamMutex);
|
||||||
#endif
|
#endif
|
||||||
// find the logstream associated with this data
|
// find the log-stream associated with this data
|
||||||
LogStreamMap::iterator it = gActiveLogStreams.find( *stream);
|
LogStreamMap::iterator it = gActiveLogStreams.find( *stream);
|
||||||
// it should be there... else the user is playing fools with us
|
// it should be there... else the user is playing fools with us
|
||||||
if( it == gActiveLogStreams.end()) {
|
if( it == gActiveLogStreams.end()) {
|
||||||
|
@ -398,12 +429,18 @@ ASSIMP_API void aiDetachAllLogStreams(void)
|
||||||
#ifndef ASSIMP_BUILD_SINGLETHREADED
|
#ifndef ASSIMP_BUILD_SINGLETHREADED
|
||||||
boost::mutex::scoped_lock lock(gLogStreamMutex);
|
boost::mutex::scoped_lock lock(gLogStreamMutex);
|
||||||
#endif
|
#endif
|
||||||
|
Logger *logger( DefaultLogger::get() );
|
||||||
|
if ( NULL == logger ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for (LogStreamMap::iterator it = gActiveLogStreams.begin(); it != gActiveLogStreams.end(); ++it) {
|
for (LogStreamMap::iterator it = gActiveLogStreams.begin(); it != gActiveLogStreams.end(); ++it) {
|
||||||
DefaultLogger::get()->detatchStream( it->second );
|
logger->detatchStream( it->second );
|
||||||
delete it->second;
|
delete it->second;
|
||||||
}
|
}
|
||||||
gActiveLogStreams.clear();
|
gActiveLogStreams.clear();
|
||||||
DefaultLogger::kill();
|
DefaultLogger::kill();
|
||||||
|
|
||||||
ASSIMP_END_EXCEPTION_REGION(void);
|
ASSIMP_END_EXCEPTION_REGION(void);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -437,7 +474,6 @@ size_t aiGetImportFormatCount(void)
|
||||||
return Importer().GetImporterCount();
|
return Importer().GetImporterCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Returns the error text of the last failed import process.
|
// Returns the error text of the last failed import process.
|
||||||
aiBool aiIsExtensionSupported(const char* szExtension)
|
aiBool aiIsExtensionSupported(const char* szExtension)
|
||||||
|
@ -492,7 +528,6 @@ ASSIMP_API aiPropertyStore* aiCreatePropertyStore(void)
|
||||||
return reinterpret_cast<aiPropertyStore*>( new PropertyMap() );
|
return reinterpret_cast<aiPropertyStore*>( new PropertyMap() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
ASSIMP_API void aiReleasePropertyStore(aiPropertyStore* p)
|
ASSIMP_API void aiReleasePropertyStore(aiPropertyStore* p)
|
||||||
{
|
{
|
||||||
|
@ -551,7 +586,8 @@ ASSIMP_API void aiSetImportPropertyMatrix(aiPropertyStore* p, const char* szName
|
||||||
// Rotation matrix to quaternion
|
// Rotation matrix to quaternion
|
||||||
ASSIMP_API void aiCreateQuaternionFromMatrix(aiQuaternion* quat,const aiMatrix3x3* mat)
|
ASSIMP_API void aiCreateQuaternionFromMatrix(aiQuaternion* quat,const aiMatrix3x3* mat)
|
||||||
{
|
{
|
||||||
ai_assert(NULL != quat && NULL != mat);
|
ai_assert( NULL != quat );
|
||||||
|
ai_assert( NULL != mat );
|
||||||
*quat = aiQuaternion(*mat);
|
*quat = aiQuaternion(*mat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -561,7 +597,10 @@ ASSIMP_API void aiDecomposeMatrix(const aiMatrix4x4* mat,aiVector3D* scaling,
|
||||||
aiQuaternion* rotation,
|
aiQuaternion* rotation,
|
||||||
aiVector3D* position)
|
aiVector3D* position)
|
||||||
{
|
{
|
||||||
ai_assert(NULL != rotation && NULL != position && NULL != scaling && NULL != mat);
|
ai_assert( NULL != rotation );
|
||||||
|
ai_assert( NULL != position );
|
||||||
|
ai_assert( NULL != scaling );
|
||||||
|
ai_assert( NULL != mat );
|
||||||
mat->Decompose(*scaling,*rotation,*position);
|
mat->Decompose(*scaling,*rotation,*position);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -585,7 +624,8 @@ ASSIMP_API void aiTransposeMatrix4(aiMatrix4x4* mat)
|
||||||
ASSIMP_API void aiTransformVecByMatrix3(aiVector3D* vec,
|
ASSIMP_API void aiTransformVecByMatrix3(aiVector3D* vec,
|
||||||
const aiMatrix3x3* mat)
|
const aiMatrix3x3* mat)
|
||||||
{
|
{
|
||||||
ai_assert(NULL != mat && NULL != vec);
|
ai_assert( NULL != mat );
|
||||||
|
ai_assert( NULL != vec);
|
||||||
*vec *= (*mat);
|
*vec *= (*mat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -593,7 +633,9 @@ ASSIMP_API void aiTransformVecByMatrix3(aiVector3D* vec,
|
||||||
ASSIMP_API void aiTransformVecByMatrix4(aiVector3D* vec,
|
ASSIMP_API void aiTransformVecByMatrix4(aiVector3D* vec,
|
||||||
const aiMatrix4x4* mat)
|
const aiMatrix4x4* mat)
|
||||||
{
|
{
|
||||||
ai_assert(NULL != mat && NULL != vec);
|
ai_assert( NULL != mat );
|
||||||
|
ai_assert( NULL != vec );
|
||||||
|
|
||||||
*vec *= (*mat);
|
*vec *= (*mat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -603,7 +645,8 @@ ASSIMP_API void aiMultiplyMatrix4(
|
||||||
aiMatrix4x4* dst,
|
aiMatrix4x4* dst,
|
||||||
const aiMatrix4x4* src)
|
const aiMatrix4x4* src)
|
||||||
{
|
{
|
||||||
ai_assert(NULL != dst && NULL != src);
|
ai_assert( NULL != dst );
|
||||||
|
ai_assert( NULL != src );
|
||||||
*dst = (*dst) * (*src);
|
*dst = (*dst) * (*src);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -612,7 +655,8 @@ ASSIMP_API void aiMultiplyMatrix3(
|
||||||
aiMatrix3x3* dst,
|
aiMatrix3x3* dst,
|
||||||
const aiMatrix3x3* src)
|
const aiMatrix3x3* src)
|
||||||
{
|
{
|
||||||
ai_assert(NULL != dst && NULL != src);
|
ai_assert( NULL != dst );
|
||||||
|
ai_assert( NULL != src );
|
||||||
*dst = (*dst) * (*src);
|
*dst = (*dst) * (*src);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -648,6 +692,8 @@ ASSIMP_API C_STRUCT const aiImporterDesc* aiGetImporterDesc( const char *extensi
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DeleteImporterInstanceList(out);
|
||||||
|
|
||||||
return desc;
|
return desc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1011,13 +1011,19 @@ void BlenderImporter::ConvertMesh(const Scene& /*in*/, const Object* /*obj*/, co
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
aiCamera* BlenderImporter::ConvertCamera(const Scene& /*in*/, const Object* obj, const Camera* /*camera*/, ConversionData& /*conv_data*/)
|
aiCamera* BlenderImporter::ConvertCamera(const Scene& /*in*/, const Object* obj, const Camera* cam, ConversionData& /*conv_data*/)
|
||||||
{
|
{
|
||||||
ScopeGuard<aiCamera> out(new aiCamera());
|
ScopeGuard<aiCamera> out(new aiCamera());
|
||||||
out->mName = obj->id.name+2;
|
out->mName = obj->id.name+2;
|
||||||
out->mPosition = aiVector3D(0.f, 0.f, 0.f);
|
out->mPosition = aiVector3D(0.f, 0.f, 0.f);
|
||||||
out->mUp = aiVector3D(0.f, 1.f, 0.f);
|
out->mUp = aiVector3D(0.f, 1.f, 0.f);
|
||||||
out->mLookAt = aiVector3D(0.f, 0.f, -1.f);
|
out->mLookAt = aiVector3D(0.f, 0.f, -1.f);
|
||||||
|
if (cam->sensor_x && cam->lens) {
|
||||||
|
out->mHorizontalFOV = atan2(cam->sensor_x, 2.f * cam->lens);
|
||||||
|
}
|
||||||
|
out->mClipPlaneNear = cam->clipsta;
|
||||||
|
out->mClipPlaneFar = cam->clipend;
|
||||||
|
|
||||||
return out.dismiss();
|
return out.dismiss();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -620,7 +620,10 @@ template <> void Structure :: Convert<Camera> (
|
||||||
ReadField<ErrorPolicy_Fail>(dest.id,"id",db);
|
ReadField<ErrorPolicy_Fail>(dest.id,"id",db);
|
||||||
ReadField<ErrorPolicy_Warn>((int&)dest.type,"type",db);
|
ReadField<ErrorPolicy_Warn>((int&)dest.type,"type",db);
|
||||||
ReadField<ErrorPolicy_Warn>((int&)dest.flag,"flag",db);
|
ReadField<ErrorPolicy_Warn>((int&)dest.flag,"flag",db);
|
||||||
ReadField<ErrorPolicy_Warn>(dest.angle,"angle",db);
|
ReadField<ErrorPolicy_Warn>(dest.lens,"lens",db);
|
||||||
|
ReadField<ErrorPolicy_Warn>(dest.sensor_x,"sensor_x",db);
|
||||||
|
ReadField<ErrorPolicy_Igno>(dest.clipsta,"clipsta",db);
|
||||||
|
ReadField<ErrorPolicy_Igno>(dest.clipend,"clipend",db);
|
||||||
|
|
||||||
db.reader->IncPtr(size);
|
db.reader->IncPtr(size);
|
||||||
}
|
}
|
||||||
|
|
|
@ -312,18 +312,10 @@ struct Camera : ElemBase {
|
||||||
|
|
||||||
ID id FAIL;
|
ID id FAIL;
|
||||||
|
|
||||||
// struct AnimData *adt;
|
|
||||||
|
|
||||||
Type type,flag WARN;
|
Type type,flag WARN;
|
||||||
float angle WARN;
|
float lens WARN;
|
||||||
//float passepartalpha, angle;
|
float sensor_x WARN;
|
||||||
//float clipsta, clipend;
|
float clipsta, clipend;
|
||||||
//float lens, ortho_scale, drawsize;
|
|
||||||
//float shiftx, shifty;
|
|
||||||
|
|
||||||
//float YF_dofdist, YF_aperture;
|
|
||||||
//short YF_bkhtype, YF_bkhbias;
|
|
||||||
//float YF_bkhrot;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -798,7 +798,7 @@ if (ASSIMP_ANDROID_JNIIOSYSTEM)
|
||||||
endif(ASSIMP_ANDROID_JNIIOSYSTEM)
|
endif(ASSIMP_ANDROID_JNIIOSYSTEM)
|
||||||
|
|
||||||
if(MSVC AND ASSIMP_INSTALL_PDB)
|
if(MSVC AND ASSIMP_INSTALL_PDB)
|
||||||
install(FILES ${Assimp_BINARY_DIR}/code/Debug/assimp${CMAKE_DEBUG_POSTFIX}.pdb
|
install(FILES ${Assimp_BINARY_DIR}/code/Debug/assimp${LIBRARY_SUFFIX}${CMAKE_DEBUG_POSTFIX}.pdb
|
||||||
DESTINATION ${ASSIMP_LIB_INSTALL_DIR}
|
DESTINATION ${ASSIMP_LIB_INSTALL_DIR}
|
||||||
CONFIGURATIONS Debug
|
CONFIGURATIONS Debug
|
||||||
)
|
)
|
||||||
|
|
|
@ -526,6 +526,13 @@ void ColladaExporter::ReadMaterialSurface( Surface& poSurface, const aiMaterial*
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
// Reimplementation of isalnum(,C locale), because AppVeyor does not see standard version.
|
||||||
|
static bool isalnum_C(char c)
|
||||||
|
{
|
||||||
|
return strchr("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",c);
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Writes an image entry for the given surface
|
// Writes an image entry for the given surface
|
||||||
void ColladaExporter::WriteImageEntry( const Surface& pSurface, const std::string& pNameAdd)
|
void ColladaExporter::WriteImageEntry( const Surface& pSurface, const std::string& pNameAdd)
|
||||||
|
@ -540,7 +547,7 @@ void ColladaExporter::WriteImageEntry( const Surface& pSurface, const std::strin
|
||||||
std::stringstream imageUrlEncoded;
|
std::stringstream imageUrlEncoded;
|
||||||
for( std::string::const_iterator it = pSurface.texture.begin(); it != pSurface.texture.end(); ++it )
|
for( std::string::const_iterator it = pSurface.texture.begin(); it != pSurface.texture.end(); ++it )
|
||||||
{
|
{
|
||||||
if( isalnum( *it) || *it == '_' || *it == '.' || *it == '/' || *it == '\\' )
|
if( isalnum_C( (unsigned char) *it) || *it == ':' || *it == '_' || *it == '.' || *it == '/' || *it == '\\' )
|
||||||
imageUrlEncoded << *it;
|
imageUrlEncoded << *it;
|
||||||
else
|
else
|
||||||
imageUrlEncoded << '%' << std::hex << size_t( (unsigned char) *it) << std::dec;
|
imageUrlEncoded << '%' << std::hex << size_t( (unsigned char) *it) << std::dec;
|
||||||
|
@ -631,9 +638,7 @@ void ColladaExporter::WriteMaterials()
|
||||||
name = "mat";
|
name = "mat";
|
||||||
materials[a].name = std::string( "m") + boost::lexical_cast<std::string> (a) + name.C_Str();
|
materials[a].name = std::string( "m") + boost::lexical_cast<std::string> (a) + name.C_Str();
|
||||||
for( std::string::iterator it = materials[a].name.begin(); it != materials[a].name.end(); ++it ) {
|
for( std::string::iterator it = materials[a].name.begin(); it != materials[a].name.end(); ++it ) {
|
||||||
// isalnum on MSVC asserts for code points outside [0,255]. Thus prevent unwanted promotion
|
if( !isalnum_C( *it ) ) {
|
||||||
// of char to signed int and take the unsigned char value.
|
|
||||||
if( !isalnum( static_cast<uint8_t>(*it) ) ) {
|
|
||||||
*it = '_';
|
*it = '_';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -597,6 +597,48 @@ struct Animation
|
||||||
for( std::vector<Animation*>::iterator it = mSubAnims.begin(); it != mSubAnims.end(); ++it)
|
for( std::vector<Animation*>::iterator it = mSubAnims.begin(); it != mSubAnims.end(); ++it)
|
||||||
delete *it;
|
delete *it;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Collect all channels in the animation hierarchy into a single channel list. */
|
||||||
|
void CollectChannelsRecursively(std::vector<AnimationChannel> &channels)
|
||||||
|
{
|
||||||
|
channels.insert(channels.end(), mChannels.begin(), mChannels.end());
|
||||||
|
|
||||||
|
for (std::vector<Animation*>::iterator it = mSubAnims.begin(); it != mSubAnims.end(); ++it)
|
||||||
|
{
|
||||||
|
Animation *pAnim = (*it);
|
||||||
|
|
||||||
|
pAnim->CollectChannelsRecursively(channels);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Combine all single-channel animations' channel into the same (parent) animation channel list. */
|
||||||
|
void CombineSingleChannelAnimations()
|
||||||
|
{
|
||||||
|
CombineSingleChannelAnimationsRecursively(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CombineSingleChannelAnimationsRecursively(Animation *pParent)
|
||||||
|
{
|
||||||
|
for (std::vector<Animation*>::iterator it = pParent->mSubAnims.begin(); it != pParent->mSubAnims.end();)
|
||||||
|
{
|
||||||
|
Animation *anim = *it;
|
||||||
|
|
||||||
|
CombineSingleChannelAnimationsRecursively(anim);
|
||||||
|
|
||||||
|
if (anim->mChannels.size() == 1)
|
||||||
|
{
|
||||||
|
pParent->mChannels.push_back(anim->mChannels[0]);
|
||||||
|
|
||||||
|
it = pParent->mSubAnims.erase(it);
|
||||||
|
|
||||||
|
delete anim;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
++it;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Description of a collada animation channel which has been determined to affect the current node */
|
/** Description of a collada animation channel which has been determined to affect the current node */
|
||||||
|
|
|
@ -187,6 +187,8 @@ void ColladaParser::ReadStructure()
|
||||||
ReadAssetInfo();
|
ReadAssetInfo();
|
||||||
else if( IsElement( "library_animations"))
|
else if( IsElement( "library_animations"))
|
||||||
ReadAnimationLibrary();
|
ReadAnimationLibrary();
|
||||||
|
else if (IsElement("library_animation_clips"))
|
||||||
|
ReadAnimationClipLibrary();
|
||||||
else if( IsElement( "library_controllers"))
|
else if( IsElement( "library_controllers"))
|
||||||
ReadControllerLibrary();
|
ReadControllerLibrary();
|
||||||
else if( IsElement( "library_images"))
|
else if( IsElement( "library_images"))
|
||||||
|
@ -215,6 +217,8 @@ void ColladaParser::ReadStructure()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PostProcessRootAnimations();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
@ -271,6 +275,131 @@ void ColladaParser::ReadAssetInfo()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
// Reads the animation clips
|
||||||
|
void ColladaParser::ReadAnimationClipLibrary()
|
||||||
|
{
|
||||||
|
if (mReader->isEmptyElement())
|
||||||
|
return;
|
||||||
|
|
||||||
|
while (mReader->read())
|
||||||
|
{
|
||||||
|
if (mReader->getNodeType() == irr::io::EXN_ELEMENT)
|
||||||
|
{
|
||||||
|
if (IsElement("animation_clip"))
|
||||||
|
{
|
||||||
|
// optional name given as an attribute
|
||||||
|
std::string animName;
|
||||||
|
int indexName = TestAttribute("name");
|
||||||
|
int indexID = TestAttribute("id");
|
||||||
|
if (indexName >= 0)
|
||||||
|
animName = mReader->getAttributeValue(indexName);
|
||||||
|
else if (indexID >= 0)
|
||||||
|
animName = mReader->getAttributeValue(indexID);
|
||||||
|
else
|
||||||
|
animName = "animation_" + mAnimationClipLibrary.size();
|
||||||
|
|
||||||
|
std::pair<std::string, std::vector<std::string> > clip;
|
||||||
|
|
||||||
|
clip.first = animName;
|
||||||
|
|
||||||
|
while (mReader->read())
|
||||||
|
{
|
||||||
|
if (mReader->getNodeType() == irr::io::EXN_ELEMENT)
|
||||||
|
{
|
||||||
|
if (IsElement("instance_animation"))
|
||||||
|
{
|
||||||
|
int indexUrl = TestAttribute("url");
|
||||||
|
if (indexUrl >= 0)
|
||||||
|
{
|
||||||
|
const char* url = mReader->getAttributeValue(indexUrl);
|
||||||
|
if (url[0] != '#')
|
||||||
|
ThrowException("Unknown reference format");
|
||||||
|
|
||||||
|
url++;
|
||||||
|
|
||||||
|
clip.second.push_back(url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// ignore the rest
|
||||||
|
SkipElement();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (mReader->getNodeType() == irr::io::EXN_ELEMENT_END)
|
||||||
|
{
|
||||||
|
if (strcmp(mReader->getNodeName(), "animation_clip") != 0)
|
||||||
|
ThrowException("Expected end of <animation_clip> element.");
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clip.second.size() > 0)
|
||||||
|
{
|
||||||
|
mAnimationClipLibrary.push_back(clip);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// ignore the rest
|
||||||
|
SkipElement();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (mReader->getNodeType() == irr::io::EXN_ELEMENT_END)
|
||||||
|
{
|
||||||
|
if (strcmp(mReader->getNodeName(), "library_animation_clips") != 0)
|
||||||
|
ThrowException("Expected end of <library_animation_clips> element.");
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
// Re-build animations from animation clip library, if present, otherwise combine single-channel animations
|
||||||
|
void ColladaParser::PostProcessRootAnimations()
|
||||||
|
{
|
||||||
|
if (mAnimationClipLibrary.size() > 0)
|
||||||
|
{
|
||||||
|
Animation temp;
|
||||||
|
|
||||||
|
for (AnimationClipLibrary::iterator it = mAnimationClipLibrary.begin(); it != mAnimationClipLibrary.end(); ++it)
|
||||||
|
{
|
||||||
|
std::string clipName = it->first;
|
||||||
|
|
||||||
|
Animation *clip = new Animation();
|
||||||
|
clip->mName = clipName;
|
||||||
|
|
||||||
|
temp.mSubAnims.push_back(clip);
|
||||||
|
|
||||||
|
for (std::vector<std::string>::iterator a = it->second.begin(); a != it->second.end(); ++a)
|
||||||
|
{
|
||||||
|
std::string animationID = *a;
|
||||||
|
|
||||||
|
AnimationLibrary::iterator animation = mAnimationLibrary.find(animationID);
|
||||||
|
|
||||||
|
if (animation != mAnimationLibrary.end())
|
||||||
|
{
|
||||||
|
Animation *pSourceAnimation = animation->second;
|
||||||
|
|
||||||
|
pSourceAnimation->CollectChannelsRecursively(clip->mChannels);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mAnims = temp;
|
||||||
|
|
||||||
|
// Ensure no double deletes.
|
||||||
|
temp.mSubAnims.clear();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mAnims.CombineSingleChannelAnimations();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Reads the animation library
|
// Reads the animation library
|
||||||
void ColladaParser::ReadAnimationLibrary()
|
void ColladaParser::ReadAnimationLibrary()
|
||||||
|
@ -318,12 +447,17 @@ void ColladaParser::ReadAnimation( Collada::Animation* pParent)
|
||||||
|
|
||||||
// optional name given as an attribute
|
// optional name given as an attribute
|
||||||
std::string animName;
|
std::string animName;
|
||||||
|
std::string animID;
|
||||||
int indexName = TestAttribute( "name");
|
int indexName = TestAttribute( "name");
|
||||||
int indexID = TestAttribute( "id");
|
int indexID = TestAttribute( "id");
|
||||||
|
|
||||||
|
if (indexID >= 0)
|
||||||
|
animID = mReader->getAttributeValue(indexID);
|
||||||
|
|
||||||
if( indexName >= 0)
|
if( indexName >= 0)
|
||||||
animName = mReader->getAttributeValue( indexName);
|
animName = mReader->getAttributeValue( indexName);
|
||||||
else if( indexID >= 0)
|
else if( indexID >= 0)
|
||||||
animName = mReader->getAttributeValue( indexID);
|
animName = animID;
|
||||||
else
|
else
|
||||||
animName = "animation";
|
animName = "animation";
|
||||||
|
|
||||||
|
@ -395,11 +529,19 @@ void ColladaParser::ReadAnimation( Collada::Animation* pParent)
|
||||||
// it turned out to have channels - add them
|
// it turned out to have channels - add them
|
||||||
if( !channels.empty())
|
if( !channels.empty())
|
||||||
{
|
{
|
||||||
|
// FIXME: Is this essentially doing the same as "single-anim-node" codepath in
|
||||||
|
// ColladaLoader::StoreAnimations? For now, this has been deferred to after
|
||||||
|
// all animations and all clips have been read. Due to handling of
|
||||||
|
// <library_animation_clips> this cannot be done here, as the channel owner
|
||||||
|
// is lost, and some exporters make up animations by referring to multiple
|
||||||
|
// single-channel animations from an <instance_animation>.
|
||||||
|
/*
|
||||||
// special filtering for stupid exporters packing each channel into a separate animation
|
// special filtering for stupid exporters packing each channel into a separate animation
|
||||||
if( channels.size() == 1)
|
if( channels.size() == 1)
|
||||||
{
|
{
|
||||||
pParent->mChannels.push_back( channels.begin()->second);
|
pParent->mChannels.push_back( channels.begin()->second);
|
||||||
} else
|
} else
|
||||||
|
*/
|
||||||
{
|
{
|
||||||
// else create the animation, if not done yet, and store the channels
|
// else create the animation, if not done yet, and store the channels
|
||||||
if( !anim)
|
if( !anim)
|
||||||
|
@ -410,6 +552,11 @@ void ColladaParser::ReadAnimation( Collada::Animation* pParent)
|
||||||
}
|
}
|
||||||
for( ChannelMap::const_iterator it = channels.begin(); it != channels.end(); ++it)
|
for( ChannelMap::const_iterator it = channels.begin(); it != channels.end(); ++it)
|
||||||
anim->mChannels.push_back( it->second);
|
anim->mChannels.push_back( it->second);
|
||||||
|
|
||||||
|
if (indexID >= 0)
|
||||||
|
{
|
||||||
|
mAnimationLibrary[animID] = anim;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,6 +83,12 @@ namespace Assimp
|
||||||
/** Reads the animation library */
|
/** Reads the animation library */
|
||||||
void ReadAnimationLibrary();
|
void ReadAnimationLibrary();
|
||||||
|
|
||||||
|
/** Reads the animation clip library */
|
||||||
|
void ReadAnimationClipLibrary();
|
||||||
|
|
||||||
|
/** Re-build animations from animation clip library, if present, otherwise combine single-channel animations */
|
||||||
|
void PostProcessRootAnimations();
|
||||||
|
|
||||||
/** Reads an animation into the given parent structure */
|
/** Reads an animation into the given parent structure */
|
||||||
void ReadAnimation( Collada::Animation* pParent);
|
void ReadAnimation( Collada::Animation* pParent);
|
||||||
|
|
||||||
|
@ -313,6 +319,14 @@ namespace Assimp
|
||||||
typedef std::map<std::string, Collada::Controller> ControllerLibrary;
|
typedef std::map<std::string, Collada::Controller> ControllerLibrary;
|
||||||
ControllerLibrary mControllerLibrary;
|
ControllerLibrary mControllerLibrary;
|
||||||
|
|
||||||
|
/** Animation library: animation references by ID */
|
||||||
|
typedef std::map<std::string, Collada::Animation*> AnimationLibrary;
|
||||||
|
AnimationLibrary mAnimationLibrary;
|
||||||
|
|
||||||
|
/** Animation clip library: clip animation references by ID */
|
||||||
|
typedef std::vector<std::pair<std::string, std::vector<std::string> > > AnimationClipLibrary;
|
||||||
|
AnimationClipLibrary mAnimationClipLibrary;
|
||||||
|
|
||||||
/** Pointer to the root node. Don't delete, it just points to one of
|
/** Pointer to the root node. Don't delete, it just points to one of
|
||||||
the nodes in the node library. */
|
the nodes in the node library. */
|
||||||
Collada::Node* mRootNode;
|
Collada::Node* mRootNode;
|
||||||
|
|
|
@ -471,32 +471,38 @@ void MeshGeometry::ReadVertexDataColors(std::vector<aiColor4D>& colors_out, cons
|
||||||
mappings);
|
mappings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
static const std::string TangentIndexToken = "TangentIndex";
|
||||||
|
static const std::string TangentsIndexToken = "TangentsIndex";
|
||||||
|
|
||||||
void MeshGeometry::ReadVertexDataTangents(std::vector<aiVector3D>& tangents_out, const Scope& source,
|
void MeshGeometry::ReadVertexDataTangents(std::vector<aiVector3D>& tangents_out, const Scope& source,
|
||||||
const std::string& MappingInformationType,
|
const std::string& MappingInformationType,
|
||||||
const std::string& ReferenceInformationType)
|
const std::string& ReferenceInformationType)
|
||||||
{
|
{
|
||||||
const char * str = source.Elements().count( "Tangents" ) > 0 ? "Tangents" : "Tangent";
|
const char * str = source.Elements().count( "Tangents" ) > 0 ? "Tangents" : "Tangent";
|
||||||
|
const char * strIdx = source.Elements().count( "Tangents" ) > 0 ? TangentsIndexToken.c_str() : TangentIndexToken.c_str();
|
||||||
ResolveVertexDataArray(tangents_out,source,MappingInformationType,ReferenceInformationType,
|
ResolveVertexDataArray(tangents_out,source,MappingInformationType,ReferenceInformationType,
|
||||||
str,
|
str,
|
||||||
"TangentIndex",
|
strIdx,
|
||||||
vertices.size(),
|
vertices.size(),
|
||||||
mapping_counts,
|
mapping_counts,
|
||||||
mapping_offsets,
|
mapping_offsets,
|
||||||
mappings);
|
mappings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
static const std::string BinormalIndexToken = "BinormalIndex";
|
||||||
|
static const std::string BinormalsIndexToken = "BinormalsIndex";
|
||||||
|
|
||||||
void MeshGeometry::ReadVertexDataBinormals(std::vector<aiVector3D>& binormals_out, const Scope& source,
|
void MeshGeometry::ReadVertexDataBinormals(std::vector<aiVector3D>& binormals_out, const Scope& source,
|
||||||
const std::string& MappingInformationType,
|
const std::string& MappingInformationType,
|
||||||
const std::string& ReferenceInformationType)
|
const std::string& ReferenceInformationType)
|
||||||
{
|
{
|
||||||
const char * str = source.Elements().count( "Binormals" ) > 0 ? "Binormals" : "Binormal";
|
const char * str = source.Elements().count( "Binormals" ) > 0 ? "Binormals" : "Binormal";
|
||||||
|
const char * strIdx = source.Elements().count( "Binormals" ) > 0 ? BinormalsIndexToken.c_str() : BinormalIndexToken.c_str();
|
||||||
ResolveVertexDataArray(binormals_out,source,MappingInformationType,ReferenceInformationType,
|
ResolveVertexDataArray(binormals_out,source,MappingInformationType,ReferenceInformationType,
|
||||||
str,
|
str,
|
||||||
"BinormalIndex",
|
strIdx,
|
||||||
vertices.size(),
|
vertices.size(),
|
||||||
mapping_counts,
|
mapping_counts,
|
||||||
mapping_offsets,
|
mapping_offsets,
|
||||||
|
|
|
@ -90,6 +90,8 @@ using namespace Assimp::Formatter;
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
// ImporterRegistry.cpp
|
// ImporterRegistry.cpp
|
||||||
void GetImporterInstanceList(std::vector< BaseImporter* >& out);
|
void GetImporterInstanceList(std::vector< BaseImporter* >& out);
|
||||||
|
void DeleteImporterInstanceList(std::vector< BaseImporter* >& out);
|
||||||
|
|
||||||
// PostStepRegistry.cpp
|
// PostStepRegistry.cpp
|
||||||
void GetPostProcessingStepInstanceList(std::vector< BaseProcess* >& out);
|
void GetPostProcessingStepInstanceList(std::vector< BaseProcess* >& out);
|
||||||
}
|
}
|
||||||
|
@ -173,8 +175,7 @@ Importer::Importer()
|
||||||
Importer::~Importer()
|
Importer::~Importer()
|
||||||
{
|
{
|
||||||
// Delete all import plugins
|
// Delete all import plugins
|
||||||
for( unsigned int a = 0; a < pimpl->mImporter.size(); a++)
|
DeleteImporterInstanceList(pimpl->mImporter);
|
||||||
delete pimpl->mImporter[a];
|
|
||||||
|
|
||||||
// Delete all post-processing plug-ins
|
// Delete all post-processing plug-ins
|
||||||
for( unsigned int a = 0; a < pimpl->mPostProcessingSteps.size(); a++)
|
for( unsigned int a = 0; a < pimpl->mPostProcessingSteps.size(); a++)
|
||||||
|
@ -832,6 +833,80 @@ const aiScene* Importer::ApplyPostProcessing(unsigned int pFlags)
|
||||||
return pimpl->mScene;
|
return pimpl->mScene;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
const aiScene* Importer::ApplyCustomizedPostProcessing( BaseProcess *rootProcess, bool requestValidation ) {
|
||||||
|
ASSIMP_BEGIN_EXCEPTION_REGION();
|
||||||
|
|
||||||
|
// Return immediately if no scene is active
|
||||||
|
if ( NULL == pimpl->mScene ) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If no flags are given, return the current scene with no further action
|
||||||
|
if ( NULL == rootProcess ) {
|
||||||
|
return pimpl->mScene;
|
||||||
|
}
|
||||||
|
|
||||||
|
// In debug builds: run basic flag validation
|
||||||
|
DefaultLogger::get()->info( "Entering customized post processing pipeline" );
|
||||||
|
|
||||||
|
#ifndef ASSIMP_BUILD_NO_VALIDATEDS_PROCESS
|
||||||
|
// The ValidateDS process plays an exceptional role. It isn't contained in the global
|
||||||
|
// list of post-processing steps, so we need to call it manually.
|
||||||
|
if ( requestValidation )
|
||||||
|
{
|
||||||
|
ValidateDSProcess ds;
|
||||||
|
ds.ExecuteOnScene( this );
|
||||||
|
if ( !pimpl->mScene ) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif // no validation
|
||||||
|
#ifdef ASSIMP_BUILD_DEBUG
|
||||||
|
if ( pimpl->bExtraVerbose )
|
||||||
|
{
|
||||||
|
#ifdef ASSIMP_BUILD_NO_VALIDATEDS_PROCESS
|
||||||
|
DefaultLogger::get()->error( "Verbose Import is not available due to build settings" );
|
||||||
|
#endif // no validation
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if ( pimpl->bExtraVerbose ) {
|
||||||
|
DefaultLogger::get()->warn( "Not a debug build, ignoring extra verbose setting" );
|
||||||
|
}
|
||||||
|
#endif // ! DEBUG
|
||||||
|
|
||||||
|
boost::scoped_ptr<Profiler> profiler( GetPropertyInteger( AI_CONFIG_GLOB_MEASURE_TIME, 0 ) ? new Profiler() : NULL );
|
||||||
|
|
||||||
|
if ( profiler ) {
|
||||||
|
profiler->BeginRegion( "postprocess" );
|
||||||
|
}
|
||||||
|
|
||||||
|
rootProcess->ExecuteOnScene( this );
|
||||||
|
|
||||||
|
if ( profiler ) {
|
||||||
|
profiler->EndRegion( "postprocess" );
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the extra verbose mode is active, execute the ValidateDataStructureStep again - after each step
|
||||||
|
if ( pimpl->bExtraVerbose || requestValidation ) {
|
||||||
|
DefaultLogger::get()->debug( "Verbose Import: revalidating data structures" );
|
||||||
|
|
||||||
|
ValidateDSProcess ds;
|
||||||
|
ds.ExecuteOnScene( this );
|
||||||
|
if ( !pimpl->mScene ) {
|
||||||
|
DefaultLogger::get()->error( "Verbose Import: failed to revalidate data structures" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// clear any data allocated by post-process steps
|
||||||
|
pimpl->mPPShared->Clean();
|
||||||
|
DefaultLogger::get()->info( "Leaving customized post processing pipeline" );
|
||||||
|
|
||||||
|
ASSIMP_END_EXCEPTION_REGION( const aiScene* );
|
||||||
|
|
||||||
|
return pimpl->mScene;
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Helper function to check whether an extension is supported by ASSIMP
|
// Helper function to check whether an extension is supported by ASSIMP
|
||||||
bool Importer::IsExtensionSupported(const char* szExtension) const
|
bool Importer::IsExtensionSupported(const char* szExtension) const
|
||||||
|
@ -1113,4 +1188,3 @@ void Importer::GetMemoryRequirements(aiMemoryInfo& in) const
|
||||||
}
|
}
|
||||||
in.total += in.materials;
|
in.total += in.materials;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -321,4 +321,12 @@ void GetImporterInstanceList(std::vector< BaseImporter* >& out)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** will delete all registered importers. */
|
||||||
|
void DeleteImporterInstanceList(std::vector< BaseImporter* >& deleteList){
|
||||||
|
for(size_t i= 0; i<deleteList.size();++i){
|
||||||
|
delete deleteList[i];
|
||||||
|
deleteList[i]=NULL;
|
||||||
|
}//for
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Assimp
|
} // namespace Assimp
|
||||||
|
|
|
@ -357,24 +357,25 @@ int JoinVerticesProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex)
|
||||||
}
|
}
|
||||||
|
|
||||||
// adjust bone vertex weights.
|
// adjust bone vertex weights.
|
||||||
for( int a = 0; a < (int)pMesh->mNumBones; a++)
|
for( int a = 0; a < (int)pMesh->mNumBones; a++) {
|
||||||
{
|
|
||||||
aiBone* bone = pMesh->mBones[a];
|
aiBone* bone = pMesh->mBones[a];
|
||||||
std::vector<aiVertexWeight> newWeights;
|
std::vector<aiVertexWeight> newWeights;
|
||||||
newWeights.reserve( bone->mNumWeights);
|
newWeights.reserve( bone->mNumWeights);
|
||||||
|
|
||||||
for( unsigned int b = 0; b < bone->mNumWeights; b++)
|
if ( NULL != bone->mWeights ) {
|
||||||
{
|
for ( unsigned int b = 0; b < bone->mNumWeights; b++ ) {
|
||||||
const aiVertexWeight& ow = bone->mWeights[ b ];
|
const aiVertexWeight& ow = bone->mWeights[ b ];
|
||||||
// if the vertex is a unique one, translate it
|
// if the vertex is a unique one, translate it
|
||||||
if( !(replaceIndex[ow.mVertexId] & 0x80000000))
|
if ( !( replaceIndex[ ow.mVertexId ] & 0x80000000 ) ) {
|
||||||
{
|
|
||||||
aiVertexWeight nw;
|
aiVertexWeight nw;
|
||||||
nw.mVertexId = replaceIndex[ ow.mVertexId ];
|
nw.mVertexId = replaceIndex[ ow.mVertexId ];
|
||||||
nw.mWeight = ow.mWeight;
|
nw.mWeight = ow.mWeight;
|
||||||
newWeights.push_back( nw );
|
newWeights.push_back( nw );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
DefaultLogger::get()->error( "X-Export: aiBone shall contain weights, but pointer to them is NULL." );
|
||||||
|
}
|
||||||
|
|
||||||
if (newWeights.size() > 0) {
|
if (newWeights.size() > 0) {
|
||||||
// kill the old and replace them with the translated weights
|
// kill the old and replace them with the translated weights
|
||||||
|
|
|
@ -328,7 +328,12 @@ void AnimResolver::DoInterpolation2(std::vector<LWO::Key>::const_iterator beg,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// linear interpolation - default
|
// linear interpolation - default
|
||||||
fill = (*beg).value + ((*end).value - (*beg).value)*(float)(((time - (*beg).time) / ((*end).time - (*beg).time)));
|
double duration = (*end).time - (*beg).time;
|
||||||
|
if (duration > 0.0) {
|
||||||
|
fill = (*beg).value + ((*end).value - (*beg).value)*(float)(((time - (*beg).time) / duration));
|
||||||
|
} else {
|
||||||
|
fill = (*beg).value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -53,7 +53,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "../include/assimp/DefaultLogger.hpp"
|
#include "../include/assimp/DefaultLogger.hpp"
|
||||||
#include "Macros.h"
|
#include "Macros.h"
|
||||||
|
|
||||||
|
|
||||||
using namespace Assimp;
|
using namespace Assimp;
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
@ -571,9 +570,11 @@ void aiMaterial::CopyPropertyList(aiMaterial* pcDest,
|
||||||
for (unsigned int i = 0; i < iOldNum;++i) {
|
for (unsigned int i = 0; i < iOldNum;++i) {
|
||||||
pcDest->mProperties[i] = pcOld[i];
|
pcDest->mProperties[i] = pcOld[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
delete[] pcOld;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(pcOld)
|
||||||
|
delete[] pcOld;
|
||||||
|
|
||||||
for (unsigned int i = iOldNum; i< pcDest->mNumProperties;++i) {
|
for (unsigned int i = iOldNum; i< pcDest->mNumProperties;++i) {
|
||||||
aiMaterialProperty* propSrc = pcSrc->mProperties[i];
|
aiMaterialProperty* propSrc = pcSrc->mProperties[i];
|
||||||
|
|
||||||
|
@ -605,4 +606,3 @@ void aiMaterial::CopyPropertyList(aiMaterial* pcDest,
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -178,7 +178,8 @@ public:
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** Closes the given file and releases all resources associated with it. */
|
/** Closes the given file and releases all resources associated with it. */
|
||||||
void Close( IOStream* /*pFile*/) {
|
void Close( IOStream* pFile) {
|
||||||
|
delete pFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
|
|
|
@ -114,35 +114,34 @@ const aiImporterDesc* ObjFileImporter::GetInfo () const
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Obj-file import implementation
|
// Obj-file import implementation
|
||||||
void ObjFileImporter::InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler)
|
void ObjFileImporter::InternReadFile( const std::string &file, aiScene* pScene, IOSystem* pIOHandler) {
|
||||||
{
|
|
||||||
// Read file into memory
|
// Read file into memory
|
||||||
const std::string mode = "rb";
|
static const std::string mode = "rb";
|
||||||
boost::scoped_ptr<IOStream> file( pIOHandler->Open( pFile, mode));
|
boost::scoped_ptr<IOStream> fileStream( pIOHandler->Open( file, mode));
|
||||||
if( !file.get() ) {
|
if( !fileStream.get() ) {
|
||||||
throw DeadlyImportError( "Failed to open file " + pFile + "." );
|
throw DeadlyImportError( "Failed to open file " + file + "." );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the file-size and validate it, throwing an exception when fails
|
// Get the file-size and validate it, throwing an exception when fails
|
||||||
size_t fileSize = file->FileSize();
|
size_t fileSize = fileStream->FileSize();
|
||||||
if( fileSize < ObjMinSize ) {
|
if( fileSize < ObjMinSize ) {
|
||||||
throw DeadlyImportError( "OBJ-file is too small.");
|
throw DeadlyImportError( "OBJ-file is too small.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Allocate buffer and read file into it
|
// Allocate buffer and read file into it
|
||||||
TextFileToBuffer(file.get(),m_Buffer);
|
TextFileToBuffer( fileStream.get(),m_Buffer);
|
||||||
|
|
||||||
// Get the model name
|
// Get the model name
|
||||||
std::string modelName, folderName;
|
std::string modelName, folderName;
|
||||||
std::string::size_type pos = pFile.find_last_of( "\\/" );
|
std::string::size_type pos = file.find_last_of( "\\/" );
|
||||||
if ( pos != std::string::npos ) {
|
if ( pos != std::string::npos ) {
|
||||||
modelName = pFile.substr(pos+1, pFile.size() - pos - 1);
|
modelName = file.substr(pos+1, file.size() - pos - 1);
|
||||||
folderName = pFile.substr( 0, pos );
|
folderName = file.substr( 0, pos );
|
||||||
if ( !folderName.empty() ) {
|
if ( !folderName.empty() ) {
|
||||||
pIOHandler->PushDirectory( folderName );
|
pIOHandler->PushDirectory( folderName );
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
modelName = pFile;
|
modelName = file;
|
||||||
}
|
}
|
||||||
|
|
||||||
// This next stage takes ~ 1/3th of the total readFile task
|
// This next stage takes ~ 1/3th of the total readFile task
|
||||||
|
|
|
@ -60,6 +60,7 @@ static const std::string AmbientTexture = "map_Ka";
|
||||||
static const std::string SpecularTexture = "map_Ks";
|
static const std::string SpecularTexture = "map_Ks";
|
||||||
static const std::string OpacityTexture = "map_d";
|
static const std::string OpacityTexture = "map_d";
|
||||||
static const std::string EmmissiveTexture = "map_emissive";
|
static const std::string EmmissiveTexture = "map_emissive";
|
||||||
|
static const std::string EmmissiveTexture_1 = "map_Ke";
|
||||||
static const std::string BumpTexture1 = "map_bump";
|
static const std::string BumpTexture1 = "map_bump";
|
||||||
static const std::string BumpTexture2 = "map_Bump";
|
static const std::string BumpTexture2 = "map_Bump";
|
||||||
static const std::string BumpTexture3 = "bump";
|
static const std::string BumpTexture3 = "bump";
|
||||||
|
@ -87,7 +88,7 @@ static const std::string TypeOption = "-type";
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
// Constructor
|
// Constructor
|
||||||
ObjFileMtlImporter::ObjFileMtlImporter( std::vector<char> &buffer,
|
ObjFileMtlImporter::ObjFileMtlImporter( std::vector<char> &buffer,
|
||||||
const std::string & /*strAbsPath*/,
|
const std::string &,
|
||||||
ObjFile::Model *pModel ) :
|
ObjFile::Model *pModel ) :
|
||||||
m_DataIt( buffer.begin() ),
|
m_DataIt( buffer.begin() ),
|
||||||
m_DataItEnd( buffer.end() ),
|
m_DataItEnd( buffer.end() ),
|
||||||
|
@ -112,14 +113,14 @@ ObjFileMtlImporter::~ObjFileMtlImporter()
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
// Private copy constructor
|
// Private copy constructor
|
||||||
ObjFileMtlImporter::ObjFileMtlImporter(const ObjFileMtlImporter & /* rOther */ )
|
ObjFileMtlImporter::ObjFileMtlImporter(const ObjFileMtlImporter & )
|
||||||
{
|
{
|
||||||
// empty
|
// empty
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
// Private copy constructor
|
// Private copy constructor
|
||||||
ObjFileMtlImporter &ObjFileMtlImporter::operator = ( const ObjFileMtlImporter & /*rOther */ )
|
ObjFileMtlImporter &ObjFileMtlImporter::operator = ( const ObjFileMtlImporter & )
|
||||||
{
|
{
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
@ -326,6 +327,10 @@ void ObjFileMtlImporter::getTexture() {
|
||||||
// Emissive texture
|
// Emissive texture
|
||||||
out = & m_pModel->m_pCurrentMaterial->textureEmissive;
|
out = & m_pModel->m_pCurrentMaterial->textureEmissive;
|
||||||
clampIndex = ObjFile::Material::TextureEmissiveType;
|
clampIndex = ObjFile::Material::TextureEmissiveType;
|
||||||
|
} else if ( !ASSIMP_strincmp( pPtr, EmmissiveTexture_1.c_str(), EmmissiveTexture_1.size() ) ) {
|
||||||
|
// Emissive texture
|
||||||
|
out = &m_pModel->m_pCurrentMaterial->textureEmissive;
|
||||||
|
clampIndex = ObjFile::Material::TextureEmissiveType;
|
||||||
} else if ( !ASSIMP_strincmp( pPtr, BumpTexture1.c_str(), BumpTexture1.size() ) ||
|
} else if ( !ASSIMP_strincmp( pPtr, BumpTexture1.c_str(), BumpTexture1.size() ) ||
|
||||||
!ASSIMP_strincmp( pPtr, BumpTexture2.c_str(), BumpTexture2.size() ) ||
|
!ASSIMP_strincmp( pPtr, BumpTexture2.c_str(), BumpTexture2.size() ) ||
|
||||||
!ASSIMP_strincmp( pPtr, BumpTexture3.c_str(), BumpTexture3.size() ) ) {
|
!ASSIMP_strincmp( pPtr, BumpTexture3.c_str(), BumpTexture3.size() ) ) {
|
||||||
|
@ -339,6 +344,7 @@ void ObjFileMtlImporter::getTexture() {
|
||||||
} else if(!ASSIMP_strincmp( pPtr, ReflectionTexture.c_str(), ReflectionTexture.size() ) ) {
|
} else if(!ASSIMP_strincmp( pPtr, ReflectionTexture.c_str(), ReflectionTexture.size() ) ) {
|
||||||
// Reflection texture(s)
|
// Reflection texture(s)
|
||||||
//Do nothing here
|
//Do nothing here
|
||||||
|
return;
|
||||||
} else if (!ASSIMP_strincmp( pPtr, DisplacementTexture.c_str(), DisplacementTexture.size() ) ) {
|
} else if (!ASSIMP_strincmp( pPtr, DisplacementTexture.c_str(), DisplacementTexture.size() ) ) {
|
||||||
// Displacement texture
|
// Displacement texture
|
||||||
out = &m_pModel->m_pCurrentMaterial->textureDisp;
|
out = &m_pModel->m_pCurrentMaterial->textureDisp;
|
||||||
|
|
|
@ -323,19 +323,18 @@ void ObjFileParser::getVector2( std::vector<aiVector2D> &point2d_array ) {
|
||||||
m_DataIt = skipLine<DataArrayIt>( m_DataIt, m_DataItEnd, m_uiLine );
|
m_DataIt = skipLine<DataArrayIt>( m_DataIt, m_DataItEnd, m_uiLine );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const std::string DefaultObjName = "defaultobject";
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
// Get values for a new face instance
|
// Get values for a new face instance
|
||||||
void ObjFileParser::getFace(aiPrimitiveType type)
|
void ObjFileParser::getFace(aiPrimitiveType type) {
|
||||||
{
|
|
||||||
copyNextLine(m_buffer, Buffersize);
|
copyNextLine(m_buffer, Buffersize);
|
||||||
if (m_DataIt == m_DataItEnd)
|
|
||||||
return;
|
|
||||||
|
|
||||||
char *pPtr = m_buffer;
|
char *pPtr = m_buffer;
|
||||||
char *pEnd = &pPtr[Buffersize];
|
char *pEnd = &pPtr[Buffersize];
|
||||||
pPtr = getNextToken<char*>(pPtr, pEnd);
|
pPtr = getNextToken<char*>(pPtr, pEnd);
|
||||||
if (pPtr == pEnd || *pPtr == '\0')
|
if ( pPtr == pEnd || *pPtr == '\0' ) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<unsigned int> *pIndices = new std::vector<unsigned int>;
|
std::vector<unsigned int> *pIndices = new std::vector<unsigned int>;
|
||||||
std::vector<unsigned int> *pTexID = new std::vector<unsigned int>;
|
std::vector<unsigned int> *pTexID = new std::vector<unsigned int>;
|
||||||
|
@ -349,20 +348,18 @@ void ObjFileParser::getFace(aiPrimitiveType type)
|
||||||
const bool vt = (!m_pModel->m_TextureCoord.empty());
|
const bool vt = (!m_pModel->m_TextureCoord.empty());
|
||||||
const bool vn = (!m_pModel->m_Normals.empty());
|
const bool vn = (!m_pModel->m_Normals.empty());
|
||||||
int iStep = 0, iPos = 0;
|
int iStep = 0, iPos = 0;
|
||||||
while (pPtr != pEnd)
|
while (pPtr != pEnd) {
|
||||||
{
|
|
||||||
iStep = 1;
|
iStep = 1;
|
||||||
|
|
||||||
if (IsLineEnd(*pPtr))
|
if ( IsLineEnd( *pPtr ) ) {
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (*pPtr=='/' )
|
if (*pPtr=='/' ) {
|
||||||
{
|
|
||||||
if (type == aiPrimitiveType_POINT) {
|
if (type == aiPrimitiveType_POINT) {
|
||||||
DefaultLogger::get()->error("Obj: Separator unexpected in point statement");
|
DefaultLogger::get()->error("Obj: Separator unexpected in point statement");
|
||||||
}
|
}
|
||||||
if (iPos == 0)
|
if (iPos == 0) {
|
||||||
{
|
|
||||||
//if there are no texture coordinates in the file, but normals
|
//if there are no texture coordinates in the file, but normals
|
||||||
if (!vt && vn) {
|
if (!vt && vn) {
|
||||||
iPos = 1;
|
iPos = 1;
|
||||||
|
@ -370,22 +367,20 @@ void ObjFileParser::getFace(aiPrimitiveType type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
iPos++;
|
iPos++;
|
||||||
}
|
} else if( IsSpaceOrNewLine( *pPtr ) ) {
|
||||||
else if( IsSpaceOrNewLine( *pPtr ) )
|
|
||||||
{
|
|
||||||
iPos = 0;
|
iPos = 0;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
//OBJ USES 1 Base ARRAYS!!!!
|
//OBJ USES 1 Base ARRAYS!!!!
|
||||||
const int iVal = atoi( pPtr );
|
const int iVal( ::atoi( pPtr ) );
|
||||||
|
|
||||||
// increment iStep position based off of the sign and # of digits
|
// increment iStep position based off of the sign and # of digits
|
||||||
int tmp = iVal;
|
int tmp = iVal;
|
||||||
if (iVal < 0)
|
if ( iVal < 0 ) {
|
||||||
++iStep;
|
++iStep;
|
||||||
while ( ( tmp = tmp / 10 )!=0 )
|
}
|
||||||
|
while ( ( tmp = tmp / 10 ) != 0 ) {
|
||||||
++iStep;
|
++iStep;
|
||||||
|
}
|
||||||
|
|
||||||
if ( iVal > 0 )
|
if ( iVal > 0 )
|
||||||
{
|
{
|
||||||
|
@ -455,12 +450,12 @@ void ObjFileParser::getFace(aiPrimitiveType type)
|
||||||
|
|
||||||
// Create a default object, if nothing is there
|
// Create a default object, if nothing is there
|
||||||
if( NULL == m_pModel->m_pCurrent ) {
|
if( NULL == m_pModel->m_pCurrent ) {
|
||||||
createObject( "defaultobject" );
|
createObject( DefaultObjName );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Assign face to mesh
|
// Assign face to mesh
|
||||||
if ( NULL == m_pModel->m_pCurrentMesh ) {
|
if ( NULL == m_pModel->m_pCurrentMesh ) {
|
||||||
createMesh( "defaultobject" );
|
createMesh( DefaultObjName );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store the face
|
// Store the face
|
||||||
|
@ -780,15 +775,15 @@ void ObjFileParser::createMesh( const std::string &meshName )
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
// Returns true, if a new mesh must be created.
|
// Returns true, if a new mesh must be created.
|
||||||
bool ObjFileParser::needsNewMesh( const std::string &rMaterialName )
|
bool ObjFileParser::needsNewMesh( const std::string &materialName )
|
||||||
{
|
{
|
||||||
|
// If no mesh data yet
|
||||||
if(m_pModel->m_pCurrentMesh == 0)
|
if(m_pModel->m_pCurrentMesh == 0)
|
||||||
{
|
{
|
||||||
// No mesh data yet
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
bool newMat = false;
|
bool newMat = false;
|
||||||
int matIdx = getMaterialIndex( rMaterialName );
|
int matIdx = getMaterialIndex( materialName );
|
||||||
int curMatIdx = m_pModel->m_pCurrentMesh->m_uiMaterialIndex;
|
int curMatIdx = m_pModel->m_pCurrentMesh->m_uiMaterialIndex;
|
||||||
if ( curMatIdx != int(ObjFile::Mesh::NoMaterial) && curMatIdx != matIdx )
|
if ( curMatIdx != int(ObjFile::Mesh::NoMaterial) && curMatIdx != matIdx )
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, 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,
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, 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,
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, 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,
|
||||||
|
@ -183,7 +183,9 @@ OpenGEXImporter::VertexContainer::VertexContainer()
|
||||||
, m_numNormals( 0 )
|
, m_numNormals( 0 )
|
||||||
, m_normals(NULL)
|
, m_normals(NULL)
|
||||||
, m_numUVComps()
|
, m_numUVComps()
|
||||||
, m_textureCoords() {
|
, m_textureCoords()
|
||||||
|
{
|
||||||
|
// empty
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------
|
||||||
|
@ -217,11 +219,13 @@ OpenGEXImporter::OpenGEXImporter()
|
||||||
, m_ctx( NULL )
|
, m_ctx( NULL )
|
||||||
, m_metrics()
|
, m_metrics()
|
||||||
, m_currentNode( NULL )
|
, m_currentNode( NULL )
|
||||||
|
, m_currentVertices()
|
||||||
, m_currentMesh( NULL )
|
, m_currentMesh( NULL )
|
||||||
, m_currentMaterial( NULL )
|
, m_currentMaterial( NULL )
|
||||||
, m_tokenType( Grammar::NoneType )
|
, m_tokenType( Grammar::NoneType )
|
||||||
, m_nodeStack()
|
, m_nodeStack()
|
||||||
, m_unresolvedRefStack() {
|
, m_unresolvedRefStack() {
|
||||||
|
// empty
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------
|
||||||
|
@ -420,7 +424,7 @@ static void getRefNames( DDLNode *node, std::vector<std::string> &names ) {
|
||||||
for( size_t i = 0; i < ref->m_numRefs; i++ ) {
|
for( size_t i = 0; i < ref->m_numRefs; i++ ) {
|
||||||
Name *currentName( ref->m_referencedName[ i ] );
|
Name *currentName( ref->m_referencedName[ i ] );
|
||||||
if( NULL != currentName && NULL != currentName->m_id ) {
|
if( NULL != currentName && NULL != currentName->m_id ) {
|
||||||
const std::string name( currentName->m_id->m_text.m_buffer );
|
const std::string name( currentName->m_id->m_buffer );
|
||||||
if( !name.empty() ) {
|
if( !name.empty() ) {
|
||||||
names.push_back( name );
|
names.push_back( name );
|
||||||
}
|
}
|
||||||
|
@ -538,7 +542,7 @@ static void propId2StdString( Property *prop, std::string &name, std::string &ke
|
||||||
}
|
}
|
||||||
|
|
||||||
if( NULL != prop->m_key ) {
|
if( NULL != prop->m_key ) {
|
||||||
name = prop->m_key->m_text.m_buffer;
|
name = prop->m_key->m_buffer;
|
||||||
if( Value::ddl_string == prop->m_value->m_type ) {
|
if( Value::ddl_string == prop->m_value->m_type ) {
|
||||||
key = prop->m_value->getString();
|
key = prop->m_value->getString();
|
||||||
}
|
}
|
||||||
|
@ -661,6 +665,7 @@ void OpenGEXImporter::handleVertexArrayNode( ODDLParser::DDLNode *node, aiScene
|
||||||
}
|
}
|
||||||
|
|
||||||
const size_t numItems( countDataArrayListItems( vaList ) );
|
const size_t numItems( countDataArrayListItems( vaList ) );
|
||||||
|
|
||||||
if( Position == attribType ) {
|
if( Position == attribType ) {
|
||||||
m_currentVertices.m_numVerts = numItems;
|
m_currentVertices.m_numVerts = numItems;
|
||||||
m_currentVertices.m_vertices = new aiVector3D[ numItems ];
|
m_currentVertices.m_vertices = new aiVector3D[ numItems ];
|
||||||
|
@ -710,7 +715,7 @@ void OpenGEXImporter::handleIndexArrayNode( ODDLParser::DDLNode *node, aiScene *
|
||||||
current.mIndices = new unsigned int[ current.mNumIndices ];
|
current.mIndices = new unsigned int[ current.mNumIndices ];
|
||||||
Value *next( vaList->m_dataList );
|
Value *next( vaList->m_dataList );
|
||||||
for( size_t indices = 0; indices < current.mNumIndices; indices++ ) {
|
for( size_t indices = 0; indices < current.mNumIndices; indices++ ) {
|
||||||
const int idx = next->getInt32();
|
const int idx( next->getUnsignedInt32() );
|
||||||
ai_assert( static_cast<size_t>( idx ) <= m_currentVertices.m_numVerts );
|
ai_assert( static_cast<size_t>( idx ) <= m_currentVertices.m_numVerts );
|
||||||
|
|
||||||
aiVector3D &pos = ( m_currentVertices.m_vertices[ idx ] );
|
aiVector3D &pos = ( m_currentVertices.m_vertices[ idx ] );
|
||||||
|
@ -754,12 +759,16 @@ enum ColorType {
|
||||||
};
|
};
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------
|
||||||
static ColorType getColorType( Identifier *id ) {
|
static ColorType getColorType( Text *id ) {
|
||||||
if( id->m_text == Grammar::DiffuseColorToken ) {
|
if ( NULL == id ) {
|
||||||
|
return NoneColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( *id == Grammar::DiffuseColorToken ) {
|
||||||
return DiffuseColor;
|
return DiffuseColor;
|
||||||
} else if( id->m_text == Grammar::SpecularColorToken ) {
|
} else if( *id == Grammar::SpecularColorToken ) {
|
||||||
return SpecularColor;
|
return SpecularColor;
|
||||||
} else if( id->m_text == Grammar::EmissionColorToken ) {
|
} else if( *id == Grammar::EmissionColorToken ) {
|
||||||
return EmissionColor;
|
return EmissionColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, 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,
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, 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,
|
||||||
|
|
|
@ -53,7 +53,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "qnan.h"
|
#include "qnan.h"
|
||||||
|
|
||||||
|
|
||||||
using namespace Assimp;
|
//using namespace Assimp;
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
@ -86,8 +86,6 @@ void ExportScenePlyBinary(const char* pFile, IOSystem* pIOSystem, const aiScene*
|
||||||
outfile->Write(exporter.mOutput.str().c_str(), static_cast<size_t>(exporter.mOutput.tellp()), 1);
|
outfile->Write(exporter.mOutput.str().c_str(), static_cast<size_t>(exporter.mOutput.tellp()), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // end of namespace Assimp
|
|
||||||
|
|
||||||
#define PLY_EXPORT_HAS_NORMALS 0x1
|
#define PLY_EXPORT_HAS_NORMALS 0x1
|
||||||
#define PLY_EXPORT_HAS_TANGENTS_BITANGENTS 0x2
|
#define PLY_EXPORT_HAS_TANGENTS_BITANGENTS 0x2
|
||||||
#define PLY_EXPORT_HAS_TEXCOORDS 0x4
|
#define PLY_EXPORT_HAS_TEXCOORDS 0x4
|
||||||
|
@ -216,6 +214,11 @@ PlyExporter::PlyExporter(const char* _filename, const aiScene* pScene, bool bina
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
PlyExporter::~PlyExporter() {
|
||||||
|
// empty
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void PlyExporter::WriteMeshVerts(const aiMesh* m, unsigned int components)
|
void PlyExporter::WriteMeshVerts(const aiMesh* m, unsigned int components)
|
||||||
{
|
{
|
||||||
|
@ -367,4 +370,6 @@ void PlyExporter::WriteMeshIndicesBinary(const aiMesh* m, unsigned int offset)
|
||||||
WriteMeshIndicesBinary_Generic<unsigned char, int>(m, offset, mOutput);
|
WriteMeshIndicesBinary_Generic<unsigned char, int>(m, offset, mOutput);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
} // end of namespace Assimp
|
||||||
|
|
||||||
|
#endif // !defined(ASSIMP_BUILD_NO_EXPORT) && !defined(ASSIMP_BUILD_NO_PLY_EXPORTER)
|
||||||
|
|
|
@ -59,30 +59,30 @@ namespace Assimp
|
||||||
class PlyExporter
|
class PlyExporter
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/// Constructor for a specific scene to export
|
/// The class constructor for a specific scene to export
|
||||||
PlyExporter(const char* filename, const aiScene* pScene, bool binary = false);
|
PlyExporter(const char* filename, const aiScene* pScene, bool binary = false);
|
||||||
|
/// The class destructor, empty.
|
||||||
|
~PlyExporter();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
/// public string-streams to write all output into:
|
||||||
/// public stringstreams to write all output into
|
|
||||||
std::ostringstream mOutput;
|
std::ostringstream mOutput;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void WriteMeshVerts(const aiMesh* m, unsigned int components);
|
void WriteMeshVerts(const aiMesh* m, unsigned int components);
|
||||||
void WriteMeshIndices(const aiMesh* m, unsigned int ofs);
|
void WriteMeshIndices(const aiMesh* m, unsigned int ofs);
|
||||||
|
|
||||||
void WriteMeshVertsBinary(const aiMesh* m, unsigned int components);
|
void WriteMeshVertsBinary(const aiMesh* m, unsigned int components);
|
||||||
void WriteMeshIndicesBinary(const aiMesh* m, unsigned int offset);
|
void WriteMeshIndicesBinary(const aiMesh* m, unsigned int offset);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
const std::string filename; // tHE FILENAME
|
||||||
|
const std::string endl; // obviously, this endl() doesn't flush() the stream
|
||||||
|
|
||||||
const std::string filename;
|
private:
|
||||||
|
PlyExporter( const PlyExporter & );
|
||||||
// obviously, this endl() doesn't flush() the stream
|
PlyExporter &operator = ( const PlyExporter & );
|
||||||
const std::string endl;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
} // Namespace Assimp
|
||||||
|
|
||||||
#endif
|
#endif // AI_PLYEXPORTER_H_INC
|
||||||
|
|
|
@ -292,7 +292,7 @@ bool Q3BSPZipArchive::mapArchive() {
|
||||||
// The file has EXACTLY the size of uncompressed_size. In C
|
// The file has EXACTLY the size of uncompressed_size. In C
|
||||||
// you need to mark the last character with '\0', so add
|
// you need to mark the last character with '\0', so add
|
||||||
// another character
|
// another character
|
||||||
if(unzOpenCurrentFile(m_ZipFileHandle) == UNZ_OK) {
|
if(fileInfo.uncompressed_size != 0 && unzOpenCurrentFile(m_ZipFileHandle) == UNZ_OK) {
|
||||||
std::pair<std::map<std::string, ZipFile*>::iterator, bool> result = m_ArchiveMap.insert(std::make_pair(filename, new ZipFile(fileInfo.uncompressed_size)));
|
std::pair<std::map<std::string, ZipFile*>::iterator, bool> result = m_ArchiveMap.insert(std::make_pair(filename, new ZipFile(fileInfo.uncompressed_size)));
|
||||||
|
|
||||||
if(unzReadCurrentFile(m_ZipFileHandle, result.first->second->m_Buffer, fileInfo.uncompressed_size) == (long int) fileInfo.uncompressed_size) {
|
if(unzReadCurrentFile(m_ZipFileHandle, result.first->second->m_Buffer, fileInfo.uncompressed_size) == (long int) fileInfo.uncompressed_size) {
|
||||||
|
|
|
@ -283,7 +283,7 @@ bool RemoveVCProcess::ProcessMesh(aiMesh* pMesh)
|
||||||
if (!pMesh->mTextureCoords[i])break;
|
if (!pMesh->mTextureCoords[i])break;
|
||||||
if (configDeleteFlags & aiComponent_TEXCOORDSn(real) || b)
|
if (configDeleteFlags & aiComponent_TEXCOORDSn(real) || b)
|
||||||
{
|
{
|
||||||
delete pMesh->mTextureCoords[i];
|
delete [] pMesh->mTextureCoords[i];
|
||||||
pMesh->mTextureCoords[i] = NULL;
|
pMesh->mTextureCoords[i] = NULL;
|
||||||
ret = true;
|
ret = true;
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @file SIBImporter.cpp
|
/** @file SIBImporter.cpp
|
||||||
* @brief Implementation of the SIB importer class
|
* @brief Implementation of the SIB importer class.
|
||||||
*
|
*
|
||||||
* The Nevercenter Silo SIB format is undocumented.
|
* The Nevercenter Silo SIB format is undocumented.
|
||||||
* All details here have been reverse engineered from
|
* All details here have been reverse engineered from
|
||||||
|
@ -163,7 +163,12 @@ static aiColor3D ReadColor(StreamReaderLE* stream)
|
||||||
|
|
||||||
static void UnknownChunk(StreamReaderLE* stream, const SIBChunk& chunk)
|
static void UnknownChunk(StreamReaderLE* stream, const SIBChunk& chunk)
|
||||||
{
|
{
|
||||||
char temp[5] = { (chunk.Tag>>24)&0xff, (chunk.Tag>>16)&0xff, (chunk.Tag>>8)&0xff, chunk.Tag&0xff, '\0' };
|
char temp[5] = {
|
||||||
|
static_cast<char>(( chunk.Tag>>24 ) & 0xff),
|
||||||
|
static_cast<char>(( chunk.Tag>>16 ) & 0xff),
|
||||||
|
static_cast<char>(( chunk.Tag>>8 ) & 0xff),
|
||||||
|
static_cast<char>(chunk.Tag & 0xff), '\0'
|
||||||
|
};
|
||||||
|
|
||||||
DefaultLogger::get()->warn((Formatter::format(), "SIB: Skipping unknown '",temp,"' chunk."));
|
DefaultLogger::get()->warn((Formatter::format(), "SIB: Skipping unknown '",temp,"' chunk."));
|
||||||
}
|
}
|
||||||
|
@ -860,9 +865,9 @@ void SIBImporter::InternReadFile(const std::string& pFile,
|
||||||
pScene->mNumMaterials = sib.mtls.size();
|
pScene->mNumMaterials = sib.mtls.size();
|
||||||
pScene->mNumMeshes = sib.meshes.size();
|
pScene->mNumMeshes = sib.meshes.size();
|
||||||
pScene->mNumLights = sib.lights.size();
|
pScene->mNumLights = sib.lights.size();
|
||||||
pScene->mMaterials = new aiMaterial* [pScene->mNumMaterials];
|
pScene->mMaterials = pScene->mNumMaterials ? new aiMaterial*[pScene->mNumMaterials] : NULL;
|
||||||
pScene->mMeshes = new aiMesh* [pScene->mNumMeshes];
|
pScene->mMeshes = pScene->mNumMeshes ? new aiMesh*[pScene->mNumMeshes] : NULL;
|
||||||
pScene->mLights = new aiLight* [pScene->mNumLights];
|
pScene->mLights = pScene->mNumLights ? new aiLight*[pScene->mNumLights] : NULL;
|
||||||
if (pScene->mNumMaterials)
|
if (pScene->mNumMaterials)
|
||||||
memcpy(pScene->mMaterials, &sib.mtls[0], sizeof(aiMaterial*) * pScene->mNumMaterials);
|
memcpy(pScene->mMaterials, &sib.mtls[0], sizeof(aiMaterial*) * pScene->mNumMaterials);
|
||||||
if (pScene->mNumMeshes)
|
if (pScene->mNumMeshes)
|
||||||
|
@ -875,7 +880,7 @@ void SIBImporter::InternReadFile(const std::string& pFile,
|
||||||
aiNode *root = new aiNode();
|
aiNode *root = new aiNode();
|
||||||
root->mName.Set("<SIBRoot>");
|
root->mName.Set("<SIBRoot>");
|
||||||
root->mNumChildren = sib.objs.size() + sib.lights.size();
|
root->mNumChildren = sib.objs.size() + sib.lights.size();
|
||||||
root->mChildren = new aiNode* [root->mNumChildren];
|
root->mChildren = root->mNumChildren ? new aiNode*[root->mNumChildren] : NULL;
|
||||||
pScene->mRootNode = root;
|
pScene->mRootNode = root;
|
||||||
|
|
||||||
// Add nodes for each object.
|
// Add nodes for each object.
|
||||||
|
@ -889,7 +894,7 @@ void SIBImporter::InternReadFile(const std::string& pFile,
|
||||||
node->mTransformation = obj.axis;
|
node->mTransformation = obj.axis;
|
||||||
|
|
||||||
node->mNumMeshes = obj.meshCount;
|
node->mNumMeshes = obj.meshCount;
|
||||||
node->mMeshes = new unsigned[node->mNumMeshes];
|
node->mMeshes = node->mNumMeshes ? new unsigned[node->mNumMeshes] : NULL;
|
||||||
for (unsigned i=0;i<node->mNumMeshes;i++)
|
for (unsigned i=0;i<node->mNumMeshes;i++)
|
||||||
node->mMeshes[i] = obj.meshIdx + i;
|
node->mMeshes[i] = obj.meshIdx + i;
|
||||||
|
|
||||||
|
|
|
@ -1130,7 +1130,8 @@ void SceneCombiner::Copy (aiTexture** _dest, const aiTexture* src)
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void SceneCombiner::Copy( aiAnimation** _dest, const aiAnimation* src )
|
void SceneCombiner::Copy( aiAnimation** _dest, const aiAnimation* src )
|
||||||
{
|
{
|
||||||
ai_assert(NULL != _dest && NULL != src);
|
ai_assert( NULL != _dest );
|
||||||
|
ai_assert( NULL != src );
|
||||||
|
|
||||||
aiAnimation* dest = *_dest = new aiAnimation();
|
aiAnimation* dest = *_dest = new aiAnimation();
|
||||||
|
|
||||||
|
|
|
@ -73,10 +73,12 @@ SkeletonMeshBuilder::SkeletonMeshBuilder( aiScene* pScene, aiNode* root, bool bK
|
||||||
root->mMeshes[0] = 0;
|
root->mMeshes[0] = 0;
|
||||||
|
|
||||||
// create a dummy material for the mesh
|
// create a dummy material for the mesh
|
||||||
|
if(pScene->mNumMaterials==0){
|
||||||
pScene->mNumMaterials = 1;
|
pScene->mNumMaterials = 1;
|
||||||
pScene->mMaterials = new aiMaterial*[1];
|
pScene->mMaterials = new aiMaterial*[1];
|
||||||
pScene->mMaterials[0] = CreateMaterial();
|
pScene->mMaterials[0] = CreateMaterial();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Recursively builds a simple mesh representation for the given node
|
// Recursively builds a simple mesh representation for the given node
|
||||||
|
|
|
@ -119,7 +119,7 @@ void ComputeNormalsWithSmoothingsGroups(MeshWithSmoothingGroups<T>& sMesh)
|
||||||
{
|
{
|
||||||
vNormals += sMesh.mNormals[(*a)];
|
vNormals += sMesh.mNormals[(*a)];
|
||||||
}
|
}
|
||||||
vNormals.Normalize();
|
vNormals.NormalizeSafe();
|
||||||
|
|
||||||
// write back into all affected normals
|
// write back into all affected normals
|
||||||
for (std::vector<unsigned int>::const_iterator
|
for (std::vector<unsigned int>::const_iterator
|
||||||
|
|
|
@ -128,7 +128,7 @@ void SplitLargeMeshesProcess_Triangle::UpdateNode(aiNode* pcNode,
|
||||||
}
|
}
|
||||||
|
|
||||||
// now build the new list
|
// now build the new list
|
||||||
delete pcNode->mMeshes;
|
delete[] pcNode->mMeshes;
|
||||||
pcNode->mNumMeshes = (unsigned int)aiEntries.size();
|
pcNode->mNumMeshes = (unsigned int)aiEntries.size();
|
||||||
pcNode->mMeshes = new unsigned int[pcNode->mNumMeshes];
|
pcNode->mMeshes = new unsigned int[pcNode->mNumMeshes];
|
||||||
|
|
||||||
|
|
|
@ -137,8 +137,10 @@ namespace {
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Constructor for a specific scene to export
|
// Constructor for a specific scene to export
|
||||||
StepExporter::StepExporter(const aiScene* pScene, IOSystem* pIOSystem, const std::string& path, const std::string& file, const ExportProperties* pProperties) : mProperties(pProperties), mIOSystem(pIOSystem), mFile(file), mPath(path), mScene(pScene), endstr(";\n")
|
StepExporter::StepExporter(const aiScene* pScene, IOSystem* pIOSystem, const std::string& path,
|
||||||
{
|
const std::string& file, const ExportProperties* pProperties):
|
||||||
|
mProperties(pProperties),mIOSystem(pIOSystem),mFile(file), mPath(path),
|
||||||
|
mScene(pScene), endstr(";\n") {
|
||||||
CollectTrafos(pScene->mRootNode, trafos);
|
CollectTrafos(pScene->mRootNode, trafos);
|
||||||
CollectMeshes(pScene->mRootNode, meshes);
|
CollectMeshes(pScene->mRootNode, meshes);
|
||||||
|
|
||||||
|
|
|
@ -1041,11 +1041,14 @@ inline std::string Asset::FindUniqueID(const std::string& str, const char* suffi
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace Util
|
namespace Util {
|
||||||
{
|
|
||||||
|
inline
|
||||||
|
bool ParseDataURI(const char* const_uri, size_t uriLen, DataURI& out) {
|
||||||
|
if ( NULL == const_uri ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
inline bool ParseDataURI(const char* const_uri, size_t uriLen, DataURI& out)
|
|
||||||
{
|
|
||||||
if (const_uri[0] != 0x10) { // we already parsed this uri?
|
if (const_uri[0] != 0x10) { // we already parsed this uri?
|
||||||
if (strncmp(const_uri, "data:", 5) != 0) // not a data uri?
|
if (strncmp(const_uri, "data:", 5) != 0) // not a data uri?
|
||||||
return false;
|
return false;
|
||||||
|
@ -1064,28 +1067,40 @@ namespace Util
|
||||||
size_t i = 5, j;
|
size_t i = 5, j;
|
||||||
if (uri[i] != ';' && uri[i] != ',') { // has media type?
|
if (uri[i] != ';' && uri[i] != ',') { // has media type?
|
||||||
uri[1] = i;
|
uri[1] = i;
|
||||||
for (; uri[i] != ';' && uri[i] != ',' && i < uriLen; ++i) {}
|
for (; uri[i] != ';' && uri[i] != ',' && i < uriLen; ++i) {
|
||||||
|
// nothing to do!
|
||||||
|
}
|
||||||
}
|
}
|
||||||
while (uri[i] == ';' && i < uriLen) {
|
while (uri[i] == ';' && i < uriLen) {
|
||||||
uri[i++] = '\0';
|
uri[i++] = '\0';
|
||||||
for (j = i; uri[i] != ';' && uri[i] != ',' && i < uriLen; ++i) {}
|
for (j = i; uri[i] != ';' && uri[i] != ',' && i < uriLen; ++i) {
|
||||||
|
// nothing to do!
|
||||||
|
}
|
||||||
|
|
||||||
if (strncmp(uri + j, "charset=", 8) == 0) uri[2] = j + 8;
|
if ( strncmp( uri + j, "charset=", 8 ) == 0 ) {
|
||||||
else if (strncmp(uri + j, "base64", 6) == 0) uri[3] = j;
|
uri[ 2 ] = j + 8;
|
||||||
|
} else if ( strncmp( uri + j, "base64", 6 ) == 0 ) {
|
||||||
|
uri[ 3 ] = j;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (i < uriLen) {
|
if (i < uriLen) {
|
||||||
uri[i++] = '\0';
|
uri[i++] = '\0';
|
||||||
uri[4] = i;
|
uri[4] = i;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
uri[1] = uri[2] = uri[3] = 0;
|
uri[1] = uri[2] = uri[3] = 0;
|
||||||
uri[4] = 5;
|
uri[4] = 5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (uri[1] != 0) out.mediaType = uri + uri[1];
|
if ( uri[ 1 ] != 0 ) {
|
||||||
if (uri[2] != 0) out.charset = uri + uri[2];
|
out.mediaType = uri + uri[ 1 ];
|
||||||
if (uri[3] != 0) out.base64 = true;
|
}
|
||||||
|
if ( uri[ 2 ] != 0 ) {
|
||||||
|
out.charset = uri + uri[ 2 ];
|
||||||
|
}
|
||||||
|
if ( uri[ 3 ] != 0 ) {
|
||||||
|
out.base64 = true;
|
||||||
|
}
|
||||||
out.data = uri + uri[4];
|
out.data = uri + uri[4];
|
||||||
out.dataLength = (uri + uriLen) - out.data;
|
out.dataLength = (uri + uriLen) - out.data;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
===============================================================
|
||||||
|
OpenDDL-Parser
|
||||||
|
Developers and Contributors
|
||||||
|
===============================================================
|
||||||
|
|
||||||
|
- Kim Kulling ( kimmi ):
|
||||||
|
Founder
|
||||||
|
|
||||||
|
- Fredrik Hansson ( FredrikHson ):
|
||||||
|
Improvements value interface, serveral bugfixes.
|
||||||
|
|
||||||
|
- Henry Read ( henrya2 ):
|
||||||
|
Static build option, Interface improvements
|
||||||
|
|
||||||
|
- Paul Holland ( pkholland ):
|
||||||
|
Bugfixes.
|
|
@ -0,0 +1,22 @@
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2014 Kim Kulling
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
|
@ -1,29 +1,39 @@
|
||||||
The OpenDDL-Parser
|
The OpenDDL-Parser
|
||||||
==================
|
==================
|
||||||
|
|
||||||
A simple and fast OpenDDL Parser
|
The OpenDDL-Parser is a small and easy to use library for OpenDDL-file-format-parsing. OpenDDL is the shortcut for Open Data Description Language, a data-declaration language introduced by Eric Lengyel. Please check http://openddl.org/ if you want to learn more about it.
|
||||||
Current build status: [![Build Status](https://travis-ci.org/kimkulling/openddl-parser.png)](https://travis-ci.org/kimkulling/openddl-parser)
|
|
||||||
|
Build status
|
||||||
|
============
|
||||||
|
Linux build status: [![Build Status](https://travis-ci.org/kimkulling/openddl-parser.png)](https://travis-ci.org/kimkulling/openddl-parser)
|
||||||
|
Current coverity check status:
|
||||||
|
<a href="https://scan.coverity.com/projects/5606">
|
||||||
|
<img alt="Coverity Scan Build Status"
|
||||||
|
src="https://scan.coverity.com/projects/5606/badge.svg"/>
|
||||||
|
</a>
|
||||||
|
|
||||||
Get the source code
|
Get the source code
|
||||||
===================
|
===================
|
||||||
You can get the code from our git repository, which is located at GitHub. You can clone the repository like:
|
You can get the code from our git repository, which is located at GitHub. You can clone the repository with the following command:
|
||||||
|
|
||||||
> git clone https://github.com/kimkulling/openddl-parser.git
|
> git clone https://github.com/kimkulling/openddl-parser.git
|
||||||
|
|
||||||
Build from repo
|
Building the source from the GitHub-Repo
|
||||||
===============
|
========================================
|
||||||
To build the library you need to install cmake first ( see http://www.cmake.org/ for more information ). Make also sure that a compiler toolchain is installed on your machine.
|
To build the library you need to install cmake first ( see http://www.cmake.org/ for more information ). Make also sure that a compiler tool-chain is installed on your machine.
|
||||||
After installing it you can open a console and type:
|
After installing it you can open a console and enter:
|
||||||
|
|
||||||
> cmake CMakeLists.txt
|
> cmake CMakeLists.txt
|
||||||
|
|
||||||
This command will generate a build environment for your installed build enrironment ( for Visual Studio the project files will be generated, for gcc the makefiles will be generated ).
|
This command will generate a build environment for your installed build enrironment ( for Visual-Studio-users the project files will be generated, for gcc-users the makefiles will be generated ).
|
||||||
When using an IDE open the IDE and run the build. When using GNU-make type in your console:
|
When using an IDE open the IDE and run the build. When using GNU-make type in your console:
|
||||||
|
|
||||||
> make
|
> make
|
||||||
|
|
||||||
and that's all.
|
and that's all.
|
||||||
|
|
||||||
|
When using Visual Studio CMake will generate you a solution for ythe library. Just build it there.
|
||||||
|
|
||||||
Use the library
|
Use the library
|
||||||
===============
|
===============
|
||||||
To use the OpenDDL-parser you need to build the lib first. Now add the
|
To use the OpenDDL-parser you need to build the lib first. Now add the
|
||||||
|
@ -88,24 +98,39 @@ int main( int argc, char *argv[] ) {
|
||||||
|
|
||||||
How to access the imported data
|
How to access the imported data
|
||||||
===============================
|
===============================
|
||||||
The data is organized as a tree. You can get the root tree with the following code:
|
The data is organized as a tree. You can get the root-node of the tree with the following code:
|
||||||
|
|
||||||
```
|
```cpp
|
||||||
OpenDDLParser theParser;
|
OpenDDLParser theParser;
|
||||||
theParser.setBuffer( buffer, size );
|
theParser.setBuffer( buffer, size );
|
||||||
const bool result( theParser.parse() );
|
const bool result( theParser.parse() );
|
||||||
if ( result ) {
|
if ( result ) {
|
||||||
DDLNode *root = theParser.getRoot();
|
DDLNode *root = theParser.getRoot();
|
||||||
|
|
||||||
DDLNode::DllNodeList childs = root->getChildNodeList();
|
DDLNode::DllNodeList childs = root->getChildNodeList();
|
||||||
for ( size_t i=0; i<childs.size(); i++ ) {
|
for ( size_t i=0; i<childs.size(); i++ ) {
|
||||||
DDLNode *child = childs[ i ];
|
DDLNode *child = childs[ i ];
|
||||||
Property *prop = child->getProperty(); // to get properties
|
Property *prop = child->getProperty(); // to get properties
|
||||||
std:.string type = child->getType(); // to get the node type
|
std::string type = child->getType(); // to get the node type
|
||||||
Value *values = child->getValue(); // to get the data;
|
Value *values = child->getValue(); // to get the data;
|
||||||
|
|
||||||
|
// to loop through all values
|
||||||
|
while ( values != ddl_nullptr ) {
|
||||||
|
int current = values->getInt32();
|
||||||
|
values = value->getNext();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
The instance called root contains the data.
|
The node instance called root contains the data.
|
||||||
|
|
||||||
|
All data lists are organized as linked lists.
|
||||||
|
|
||||||
|
Reference documentation
|
||||||
|
=======================
|
||||||
|
Please check http://kimkulling.github.io/openddl-parser/doxygen_html/index.html.
|
||||||
|
|
||||||
|
Projects using OpenDDL-Parser
|
||||||
|
=============================
|
||||||
|
- Asset Importer Lib: https://github.com/assimp/assimp .
|
||||||
|
|
|
@ -153,7 +153,7 @@ Property *DDLNode::findPropertyByName( const std::string &name ) {
|
||||||
|
|
||||||
Property *current( m_properties );
|
Property *current( m_properties );
|
||||||
while( ddl_nullptr != current ) {
|
while( ddl_nullptr != current ) {
|
||||||
int res = strncmp( current->m_key->m_text.m_buffer, name.c_str(), name.size() );
|
int res = strncmp( current->m_key->m_buffer, name.c_str(), name.size() );
|
||||||
if( 0 == res ) {
|
if( 0 == res ) {
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,31 +73,14 @@ bool Text::operator == ( const Text &rhs ) const {
|
||||||
return ( 0 == res );
|
return ( 0 == res );
|
||||||
}
|
}
|
||||||
|
|
||||||
Identifier::Identifier( const char buffer[], size_t len )
|
Name::Name( NameType type, Text *id )
|
||||||
: m_text( buffer, len ) {
|
|
||||||
// empty
|
|
||||||
}
|
|
||||||
|
|
||||||
Identifier::Identifier( const char buffer[] )
|
|
||||||
: m_text( buffer, strlen( buffer ) ) {
|
|
||||||
// empty
|
|
||||||
}
|
|
||||||
|
|
||||||
Identifier::~Identifier() {
|
|
||||||
// empty
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Identifier::operator == ( const Identifier &rhs ) const {
|
|
||||||
return m_text == rhs.m_text;
|
|
||||||
}
|
|
||||||
|
|
||||||
Name::Name( NameType type, Identifier *id )
|
|
||||||
: m_type( type )
|
: m_type( type )
|
||||||
, m_id( id ) {
|
, m_id( id ) {
|
||||||
// empty
|
// empty
|
||||||
}
|
}
|
||||||
|
|
||||||
Name::~Name() {
|
Name::~Name() {
|
||||||
|
delete m_id;
|
||||||
m_id = ddl_nullptr;
|
m_id = ddl_nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,12 +93,14 @@ Reference::Reference()
|
||||||
Reference::Reference( size_t numrefs, Name **names )
|
Reference::Reference( size_t numrefs, Name **names )
|
||||||
: m_numRefs( numrefs )
|
: m_numRefs( numrefs )
|
||||||
, m_referencedName( ddl_nullptr ) {
|
, m_referencedName( ddl_nullptr ) {
|
||||||
|
if ( numrefs > 0 ) {
|
||||||
m_referencedName = new Name *[ numrefs ];
|
m_referencedName = new Name *[ numrefs ];
|
||||||
for ( size_t i = 0; i < numrefs; i++ ) {
|
for ( size_t i = 0; i < numrefs; i++ ) {
|
||||||
Name *name = new Name( names[ i ]->m_type, names[ i ]->m_id );
|
Name *name = new Name( names[ i ]->m_type, names[ i ]->m_id );
|
||||||
m_referencedName[ i ] = name;
|
m_referencedName[ i ] = name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Reference::~Reference() {
|
Reference::~Reference() {
|
||||||
for( size_t i = 0; i < m_numRefs; i++ ) {
|
for( size_t i = 0; i < m_numRefs; i++ ) {
|
||||||
|
@ -125,7 +110,23 @@ Reference::~Reference() {
|
||||||
m_referencedName = ddl_nullptr;
|
m_referencedName = ddl_nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Property::Property( Identifier *id )
|
size_t Reference::sizeInBytes() {
|
||||||
|
if ( 0 == m_numRefs ) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t size( 0 );
|
||||||
|
for ( size_t i = 0; i < m_numRefs; i++ ) {
|
||||||
|
Name *name( m_referencedName[ i ] );
|
||||||
|
if ( ddl_nullptr != name ) {
|
||||||
|
size += name->m_id->m_len;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
|
Property::Property( Text *id )
|
||||||
: m_key( id )
|
: m_key( id )
|
||||||
, m_value( ddl_nullptr )
|
, m_value( ddl_nullptr )
|
||||||
, m_ref( ddl_nullptr )
|
, m_ref( ddl_nullptr )
|
||||||
|
@ -152,7 +153,7 @@ DataArrayList::~DataArrayList() {
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t DataArrayList::size() {
|
size_t DataArrayList::size() {
|
||||||
size_t result=1;
|
size_t result( 0 );
|
||||||
DataArrayList *n=m_next;
|
DataArrayList *n=m_next;
|
||||||
while( n!=ddl_nullptr ) {
|
while( n!=ddl_nullptr ) {
|
||||||
result++;
|
result++;
|
||||||
|
@ -167,7 +168,7 @@ Context::Context()
|
||||||
}
|
}
|
||||||
|
|
||||||
Context::~Context() {
|
Context::~Context() {
|
||||||
m_root = ddl_nullptr;
|
clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Context::clear() {
|
void Context::clear() {
|
||||||
|
|
|
@ -256,7 +256,7 @@ bool OpenDDLExport::writeProperties( DDLNode *node, std::string &statement ) {
|
||||||
} else {
|
} else {
|
||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
statement += std::string( prop->m_key->m_text.m_buffer );
|
statement += std::string( prop->m_key->m_buffer );
|
||||||
statement += " = ";
|
statement += " = ";
|
||||||
writeValue( prop->m_value, statement );
|
writeValue( prop->m_value, statement );
|
||||||
prop = prop->m_next;
|
prop = prop->m_next;
|
||||||
|
|
|
@ -97,12 +97,12 @@ static bool isUnsignedIntegerType( Value::ValueType integerType ) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static DDLNode *createDDLNode( Identifier *id, OpenDDLParser *parser ) {
|
static DDLNode *createDDLNode( Text *id, OpenDDLParser *parser ) {
|
||||||
if( ddl_nullptr == id || ddl_nullptr == parser ) {
|
if( ddl_nullptr == id || ddl_nullptr == parser ) {
|
||||||
return ddl_nullptr;
|
return ddl_nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string type( id->m_text.m_buffer );
|
const std::string type( id->m_buffer );
|
||||||
DDLNode *parent( parser->top() );
|
DDLNode *parent( parser->top() );
|
||||||
DDLNode *node = DDLNode::create( type, "", parent );
|
DDLNode *node = DDLNode::create( type, "", parent );
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ OpenDDLParser::OpenDDLParser()
|
||||||
// empty
|
// empty
|
||||||
}
|
}
|
||||||
|
|
||||||
OpenDDLParser::OpenDDLParser( char *buffer, size_t len )
|
OpenDDLParser::OpenDDLParser( const char *buffer, size_t len )
|
||||||
: m_logCallback( &logMessage )
|
: m_logCallback( &logMessage )
|
||||||
, m_buffer()
|
, m_buffer()
|
||||||
, m_context( ddl_nullptr ) {
|
, m_context( ddl_nullptr ) {
|
||||||
|
@ -162,7 +162,7 @@ OpenDDLParser::logCallback OpenDDLParser::getLogCallback() const {
|
||||||
return m_logCallback;
|
return m_logCallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenDDLParser::setBuffer( char *buffer, size_t len ) {
|
void OpenDDLParser::setBuffer( const char *buffer, size_t len ) {
|
||||||
clear();
|
clear();
|
||||||
if( 0 == len ) {
|
if( 0 == len ) {
|
||||||
return;
|
return;
|
||||||
|
@ -192,7 +192,7 @@ size_t OpenDDLParser::getBufferSize() const {
|
||||||
|
|
||||||
void OpenDDLParser::clear() {
|
void OpenDDLParser::clear() {
|
||||||
m_buffer.resize( 0 );
|
m_buffer.resize( 0 );
|
||||||
if( m_context ) {
|
if( ddl_nullptr != m_context ) {
|
||||||
m_context->m_root = ddl_nullptr;
|
m_context->m_root = ddl_nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -255,7 +255,7 @@ char *OpenDDLParser::parseHeader( char *in, char *end ) {
|
||||||
return in;
|
return in;
|
||||||
}
|
}
|
||||||
|
|
||||||
Identifier *id( ddl_nullptr );
|
Text *id( ddl_nullptr );
|
||||||
in = OpenDDLParser::parseIdentifier( in, end, &id );
|
in = OpenDDLParser::parseIdentifier( in, end, &id );
|
||||||
|
|
||||||
#ifdef DEBUG_HEADER_NAME
|
#ifdef DEBUG_HEADER_NAME
|
||||||
|
@ -263,8 +263,24 @@ char *OpenDDLParser::parseHeader( char *in, char *end ) {
|
||||||
#endif // DEBUG_HEADER_NAME
|
#endif // DEBUG_HEADER_NAME
|
||||||
|
|
||||||
in = lookForNextToken( in, end );
|
in = lookForNextToken( in, end );
|
||||||
Property *first( ddl_nullptr );
|
|
||||||
if( ddl_nullptr != id ) {
|
if( ddl_nullptr != id ) {
|
||||||
|
// store the node
|
||||||
|
DDLNode *node( createDDLNode( id, this ) );
|
||||||
|
if( ddl_nullptr != node ) {
|
||||||
|
pushNode( node );
|
||||||
|
} else {
|
||||||
|
std::cerr << "nullptr returned by creating DDLNode." << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
Name *name(ddl_nullptr);
|
||||||
|
in = OpenDDLParser::parseName(in, end, &name);
|
||||||
|
if( ddl_nullptr != name && ddl_nullptr != node ) {
|
||||||
|
const std::string nodeName( name->m_id->m_buffer );
|
||||||
|
node->setName( nodeName );
|
||||||
|
}
|
||||||
|
|
||||||
|
Property *first(ddl_nullptr);
|
||||||
|
in = lookForNextToken(in, end);
|
||||||
if (*in == Grammar::OpenPropertyToken[0]) {
|
if (*in == Grammar::OpenPropertyToken[0]) {
|
||||||
in++;
|
in++;
|
||||||
Property *prop(ddl_nullptr), *prev(ddl_nullptr);
|
Property *prop(ddl_nullptr), *prev(ddl_nullptr);
|
||||||
|
@ -290,25 +306,10 @@ char *OpenDDLParser::parseHeader( char *in, char *end ) {
|
||||||
in++;
|
in++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// store the node
|
|
||||||
DDLNode *node( createDDLNode( id, this ) );
|
|
||||||
if( ddl_nullptr != node ) {
|
|
||||||
pushNode( node );
|
|
||||||
} else {
|
|
||||||
std::cerr << "nullptr returned by creating DDLNode." << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
// set the properties
|
// set the properties
|
||||||
if (ddl_nullptr != first && ddl_nullptr != node) {
|
if (ddl_nullptr != first && ddl_nullptr != node) {
|
||||||
node->setProperties(first);
|
node->setProperties(first);
|
||||||
}
|
}
|
||||||
|
|
||||||
Name *name( ddl_nullptr );
|
|
||||||
in = OpenDDLParser::parseName( in, end, &name );
|
|
||||||
if( ddl_nullptr != name && ddl_nullptr != node ) {
|
|
||||||
const std::string nodeName( name->m_id->m_text.m_buffer );
|
|
||||||
node->setName( nodeName );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return in;
|
return in;
|
||||||
|
@ -499,7 +500,7 @@ char *OpenDDLParser::parseName( char *in, char *end, Name **name ) {
|
||||||
}
|
}
|
||||||
in++;
|
in++;
|
||||||
Name *currentName( ddl_nullptr );
|
Name *currentName( ddl_nullptr );
|
||||||
Identifier *id( ddl_nullptr );
|
Text *id( ddl_nullptr );
|
||||||
in = parseIdentifier( in, end, &id );
|
in = parseIdentifier( in, end, &id );
|
||||||
if( id ) {
|
if( id ) {
|
||||||
currentName = new Name( ntype, id );
|
currentName = new Name( ntype, id );
|
||||||
|
@ -511,7 +512,7 @@ char *OpenDDLParser::parseName( char *in, char *end, Name **name ) {
|
||||||
return in;
|
return in;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *OpenDDLParser::parseIdentifier( char *in, char *end, Identifier **id ) {
|
char *OpenDDLParser::parseIdentifier( char *in, char *end, Text **id ) {
|
||||||
*id = ddl_nullptr;
|
*id = ddl_nullptr;
|
||||||
if( ddl_nullptr == in || in == end ) {
|
if( ddl_nullptr == in || in == end ) {
|
||||||
return in;
|
return in;
|
||||||
|
@ -534,7 +535,7 @@ char *OpenDDLParser::parseIdentifier( char *in, char *end, Identifier **id ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const size_t len( idLen );
|
const size_t len( idLen );
|
||||||
Identifier *newId = new Identifier( start, len );
|
Text *newId = new Text( start, len );
|
||||||
*id = newId;
|
*id = newId;
|
||||||
|
|
||||||
return in;
|
return in;
|
||||||
|
@ -715,6 +716,11 @@ char *OpenDDLParser::parseFloatingLiteral( char *in, char *end, Value **floating
|
||||||
|
|
||||||
// parse the float value
|
// parse the float value
|
||||||
bool ok( false );
|
bool ok( false );
|
||||||
|
if ( isHexLiteral( start, end ) ) {
|
||||||
|
parseHexaLiteral( start, end, floating );
|
||||||
|
return in;
|
||||||
|
}
|
||||||
|
|
||||||
if( isNumeric( *start ) ) {
|
if( isNumeric( *start ) ) {
|
||||||
ok = true;
|
ok = true;
|
||||||
} else {
|
} else {
|
||||||
|
@ -767,7 +773,7 @@ char *OpenDDLParser::parseStringLiteral( char *in, char *end, Value **stringData
|
||||||
return in;
|
return in;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void createPropertyWithData( Identifier *id, Value *primData, Property **prop ) {
|
static void createPropertyWithData( Text *id, Value *primData, Property **prop ) {
|
||||||
if( ddl_nullptr != primData ) {
|
if( ddl_nullptr != primData ) {
|
||||||
( *prop ) = new Property( id );
|
( *prop ) = new Property( id );
|
||||||
( *prop )->m_value = primData;
|
( *prop )->m_value = primData;
|
||||||
|
@ -830,7 +836,7 @@ char *OpenDDLParser::parseProperty( char *in, char *end, Property **prop ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
in = lookForNextToken( in, end );
|
in = lookForNextToken( in, end );
|
||||||
Identifier *id( ddl_nullptr );
|
Text *id( ddl_nullptr );
|
||||||
in = parseIdentifier( in, end, &id );
|
in = parseIdentifier( in, end, &id );
|
||||||
if( ddl_nullptr != id ) {
|
if( ddl_nullptr != id ) {
|
||||||
in = lookForNextToken( in, end );
|
in = lookForNextToken( in, end );
|
||||||
|
@ -862,7 +868,8 @@ char *OpenDDLParser::parseProperty( char *in, char *end, Property **prop ) {
|
||||||
return in;
|
return in;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *OpenDDLParser::parseDataList( char *in, char *end, Value::ValueType type, Value **data, size_t &numValues, Reference **refs, size_t &numRefs ) {
|
char *OpenDDLParser::parseDataList( char *in, char *end, Value::ValueType type, Value **data,
|
||||||
|
size_t &numValues, Reference **refs, size_t &numRefs ) {
|
||||||
*data = ddl_nullptr;
|
*data = ddl_nullptr;
|
||||||
numValues = numRefs = 0;
|
numValues = numRefs = 0;
|
||||||
if( ddl_nullptr == in || in == end ) {
|
if( ddl_nullptr == in || in == end ) {
|
||||||
|
@ -876,20 +883,7 @@ char *OpenDDLParser::parseDataList( char *in, char *end, Value::ValueType type,
|
||||||
while( '}' != *in ) {
|
while( '}' != *in ) {
|
||||||
current = ddl_nullptr;
|
current = ddl_nullptr;
|
||||||
in = lookForNextToken( in, end );
|
in = lookForNextToken( in, end );
|
||||||
if (Value::ddl_none == type) {
|
if ( Value::ddl_ref == type ) {
|
||||||
if (isInteger( in, end )) {
|
|
||||||
in = parseIntegerLiteral( in, end, ¤t );
|
|
||||||
}
|
|
||||||
else if (isFloat( in, end )) {
|
|
||||||
in = parseFloatingLiteral( in, end, ¤t );
|
|
||||||
}
|
|
||||||
else if (isStringLiteral( *in )) {
|
|
||||||
in = parseStringLiteral( in, end, ¤t );
|
|
||||||
}
|
|
||||||
else if (isHexLiteral( in, end )) {
|
|
||||||
in = parseHexaLiteral( in, end, ¤t );
|
|
||||||
}
|
|
||||||
else { // reference data
|
|
||||||
std::vector<Name*> names;
|
std::vector<Name*> names;
|
||||||
in = parseReference( in, end, names );
|
in = parseReference( in, end, names );
|
||||||
if ( !names.empty() ) {
|
if ( !names.empty() ) {
|
||||||
|
@ -897,6 +891,15 @@ char *OpenDDLParser::parseDataList( char *in, char *end, Value::ValueType type,
|
||||||
*refs = ref;
|
*refs = ref;
|
||||||
numRefs = names.size();
|
numRefs = names.size();
|
||||||
}
|
}
|
||||||
|
} else if ( Value::ddl_none == type ) {
|
||||||
|
if (isInteger( in, end )) {
|
||||||
|
in = parseIntegerLiteral( in, end, ¤t );
|
||||||
|
} else if (isFloat( in, end )) {
|
||||||
|
in = parseFloatingLiteral( in, end, ¤t );
|
||||||
|
} else if (isStringLiteral( *in )) {
|
||||||
|
in = parseStringLiteral( in, end, ¤t );
|
||||||
|
} else if (isHexLiteral( in, end )) {
|
||||||
|
in = parseHexaLiteral( in, end, ¤t );
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch(type){
|
switch(type){
|
||||||
|
@ -951,10 +954,10 @@ static DataArrayList *createDataArrayList( Value *currentValue, size_t numValues
|
||||||
dataList->m_numItems = numValues;
|
dataList->m_numItems = numValues;
|
||||||
|
|
||||||
return dataList;
|
return dataList;
|
||||||
|
|
||||||
}
|
}
|
||||||
char *OpenDDLParser::parseDataArrayList( char *in, char *end,Value::ValueType type, DataArrayList **dataList ) {
|
|
||||||
*dataList = ddl_nullptr;
|
char *OpenDDLParser::parseDataArrayList( char *in, char *end,Value::ValueType type, DataArrayList **dataArrayList ) {
|
||||||
|
*dataArrayList = ddl_nullptr;
|
||||||
if( ddl_nullptr == in || in == end ) {
|
if( ddl_nullptr == in || in == end ) {
|
||||||
return in;
|
return in;
|
||||||
}
|
}
|
||||||
|
@ -970,10 +973,10 @@ char *OpenDDLParser::parseDataArrayList( char *in, char *end,Value::ValueType ty
|
||||||
currentValue = ddl_nullptr;
|
currentValue = ddl_nullptr;
|
||||||
|
|
||||||
in = parseDataList( in, end, type, ¤tValue, numValues, &refs, numRefs );
|
in = parseDataList( in, end, type, ¤tValue, numValues, &refs, numRefs );
|
||||||
if( ddl_nullptr != currentValue ) {
|
if( ddl_nullptr != currentValue || 0 != numRefs ) {
|
||||||
if( ddl_nullptr == prev ) {
|
if( ddl_nullptr == prev ) {
|
||||||
*dataList = createDataArrayList( currentValue, numValues );
|
*dataArrayList = createDataArrayList( currentValue, numValues );
|
||||||
prev = *dataList;
|
prev = *dataArrayList;
|
||||||
} else {
|
} else {
|
||||||
currentDataList = createDataArrayList( currentValue, numValues );
|
currentDataList = createDataArrayList( currentValue, numValues );
|
||||||
if( ddl_nullptr != prev ) {
|
if( ddl_nullptr != prev ) {
|
||||||
|
|
|
@ -240,10 +240,16 @@ void Value::setDouble( double value ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
double Value::getDouble() const {
|
double Value::getDouble() const {
|
||||||
assert( ddl_double == m_type );
|
if ( m_type == ddl_double ) {
|
||||||
double v;
|
double v;
|
||||||
::memcpy( &v, m_data, m_size );
|
::memcpy( &v, m_data, m_size );
|
||||||
return v;
|
return ( float ) v;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
double tmp;
|
||||||
|
::memcpy( &tmp, m_data, 4 );
|
||||||
|
return ( double ) tmp;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Value::setString( const std::string &str ) {
|
void Value::setString( const std::string &str ) {
|
||||||
|
@ -251,11 +257,39 @@ void Value::setString( const std::string &str ) {
|
||||||
::memcpy( m_data, str.c_str(), str.size() );
|
::memcpy( m_data, str.c_str(), str.size() );
|
||||||
m_data[ str.size() ] = '\0';
|
m_data[ str.size() ] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *Value::getString() const {
|
const char *Value::getString() const {
|
||||||
assert( ddl_string == m_type );
|
assert( ddl_string == m_type );
|
||||||
return (const char*) m_data;
|
return (const char*) m_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Value::setRef( Reference *ref ) {
|
||||||
|
assert( ddl_ref == m_type );
|
||||||
|
|
||||||
|
if ( ddl_nullptr != ref ) {
|
||||||
|
const size_t sizeInBytes( ref->sizeInBytes() );
|
||||||
|
if ( sizeInBytes > 0 ) {
|
||||||
|
if ( ddl_nullptr != m_data ) {
|
||||||
|
delete [] m_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_data = new unsigned char[ sizeof( Reference ) ];
|
||||||
|
Reference *myRef = ( Reference * ) m_data;
|
||||||
|
myRef->m_numRefs = ref->m_numRefs;
|
||||||
|
myRef->m_referencedName = new Name *[ myRef->m_numRefs ];
|
||||||
|
for ( size_t i = 0; i < myRef->m_numRefs; i++ ) {
|
||||||
|
myRef->m_referencedName[ i ] = new Name( ref->m_referencedName[ i ]->m_type, ref->m_referencedName[ i ]->m_id );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Reference *Value::getRef() const {
|
||||||
|
assert( ddl_ref == m_type );
|
||||||
|
|
||||||
|
return (Reference*) m_data;
|
||||||
|
}
|
||||||
|
|
||||||
void Value::dump() {
|
void Value::dump() {
|
||||||
switch( m_type ) {
|
switch( m_type ) {
|
||||||
case ddl_none:
|
case ddl_none:
|
||||||
|
@ -298,7 +332,7 @@ void Value::dump() {
|
||||||
std::cout << getDouble() << std::endl;
|
std::cout << getDouble() << std::endl;
|
||||||
break;
|
break;
|
||||||
case ddl_string:
|
case ddl_string:
|
||||||
std::cout << "Not supported" << std::endl;
|
std::cout << getString() << std::endl;
|
||||||
break;
|
break;
|
||||||
case ddl_ref:
|
case ddl_ref:
|
||||||
std::cout << "Not supported" << std::endl;
|
std::cout << "Not supported" << std::endl;
|
||||||
|
|
|
@ -144,8 +144,8 @@ public:
|
||||||
private:
|
private:
|
||||||
DDLNode( const std::string &type, const std::string &name, size_t idx, DDLNode *parent = ddl_nullptr );
|
DDLNode( const std::string &type, const std::string &name, size_t idx, DDLNode *parent = ddl_nullptr );
|
||||||
DDLNode();
|
DDLNode();
|
||||||
DDLNode( const DDLNode & );
|
DDLNode( const DDLNode & ) ddl_no_copy;
|
||||||
DDLNode &operator = ( const DDLNode & );
|
DDLNode &operator = ( const DDLNode & ) ddl_no_copy;
|
||||||
static void releaseNodes();
|
static void releaseNodes();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -32,7 +32,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
# include <inttypes.h>
|
# include <inttypes.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#if defined(_MSC_VER) && !defined( OPENDDL_STATIC_LIBARY )
|
||||||
|
|
||||||
# define TAG_DLL_EXPORT __declspec(dllexport)
|
# define TAG_DLL_EXPORT __declspec(dllexport)
|
||||||
# define TAG_DLL_IMPORT __declspec(dllimport )
|
# define TAG_DLL_IMPORT __declspec(dllimport )
|
||||||
# ifdef OPENDDLPARSER_BUILD
|
# ifdef OPENDDLPARSER_BUILD
|
||||||
|
@ -132,31 +133,6 @@ private:
|
||||||
Text &operator = ( const Text & ) ddl_no_copy;
|
Text &operator = ( const Text & ) ddl_no_copy;
|
||||||
};
|
};
|
||||||
|
|
||||||
/// @brief Stores an OpenDDL-specific identifier type.
|
|
||||||
struct DLL_ODDLPARSER_EXPORT Identifier {
|
|
||||||
Text m_text; ///< The text element.
|
|
||||||
|
|
||||||
/// @brief The constructor with a sized buffer full of characters.
|
|
||||||
/// @param buffer [in] The identifier buffer.
|
|
||||||
/// @param len [in] The length of the buffer
|
|
||||||
Identifier( const char buffer[], size_t len );
|
|
||||||
|
|
||||||
/// @brief The constructor with a buffer full of characters.
|
|
||||||
/// @param buffer [in] The identifier buffer.
|
|
||||||
/// @remark Buffer must be null-terminated.
|
|
||||||
Identifier( const char buffer[] );
|
|
||||||
|
|
||||||
/// @brief The destructor.
|
|
||||||
~Identifier();
|
|
||||||
|
|
||||||
/// @brief The compare operator.
|
|
||||||
bool operator == ( const Identifier &rhs ) const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
Identifier( const Identifier & ) ddl_no_copy;
|
|
||||||
Identifier &operator = ( const Identifier & ) ddl_no_copy;
|
|
||||||
};
|
|
||||||
|
|
||||||
/// @brief Description of the type of a name.
|
/// @brief Description of the type of a name.
|
||||||
enum NameType {
|
enum NameType {
|
||||||
GlobalName, ///< Name is global.
|
GlobalName, ///< Name is global.
|
||||||
|
@ -166,12 +142,12 @@ enum NameType {
|
||||||
/// @brief Stores an OpenDDL-specific name
|
/// @brief Stores an OpenDDL-specific name
|
||||||
struct DLL_ODDLPARSER_EXPORT Name {
|
struct DLL_ODDLPARSER_EXPORT Name {
|
||||||
NameType m_type; ///< The type of the name ( @see NameType ).
|
NameType m_type; ///< The type of the name ( @see NameType ).
|
||||||
Identifier *m_id; ///< The id.
|
Text *m_id; ///< The id.
|
||||||
|
|
||||||
/// @brief The constructor with the type and the id.
|
/// @brief The constructor with the type and the id.
|
||||||
/// @param type [in] The name type.
|
/// @param type [in] The name type.
|
||||||
/// @param id [in] The id.
|
/// @param id [in] The id.
|
||||||
Name( NameType type, Identifier *id );
|
Name( NameType type, Text *id );
|
||||||
|
|
||||||
/// @brief The destructor.
|
/// @brief The destructor.
|
||||||
~Name();
|
~Name();
|
||||||
|
@ -197,6 +173,10 @@ struct DLL_ODDLPARSER_EXPORT Reference {
|
||||||
/// @brief The destructor.
|
/// @brief The destructor.
|
||||||
~Reference();
|
~Reference();
|
||||||
|
|
||||||
|
/// @brief Returns the size in bytes to store one deep reference copy.
|
||||||
|
/// @return The size on bytes.
|
||||||
|
size_t sizeInBytes();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Reference( const Reference & ) ddl_no_copy;
|
Reference( const Reference & ) ddl_no_copy;
|
||||||
Reference &operator = ( const Reference & ) ddl_no_copy;
|
Reference &operator = ( const Reference & ) ddl_no_copy;
|
||||||
|
@ -204,7 +184,7 @@ private:
|
||||||
|
|
||||||
/// @brief Stores a property list.
|
/// @brief Stores a property list.
|
||||||
struct DLL_ODDLPARSER_EXPORT Property {
|
struct DLL_ODDLPARSER_EXPORT Property {
|
||||||
Identifier *m_key; ///< The identifier / key of the property.
|
Text *m_key; ///< The identifier / key of the property.
|
||||||
Value *m_value; ///< The value assigned to its key / id ( ddl_nullptr if none ).
|
Value *m_value; ///< The value assigned to its key / id ( ddl_nullptr if none ).
|
||||||
Reference *m_ref; ///< References assigned to its key / id ( ddl_nullptr if none ).
|
Reference *m_ref; ///< References assigned to its key / id ( ddl_nullptr if none ).
|
||||||
Property *m_next; ///< The next property ( ddl_nullptr if none ).
|
Property *m_next; ///< The next property ( ddl_nullptr if none ).
|
||||||
|
@ -214,7 +194,7 @@ struct DLL_ODDLPARSER_EXPORT Property {
|
||||||
|
|
||||||
/// @brief The constructor for initialization.
|
/// @brief The constructor for initialization.
|
||||||
/// @param id [in] The identifier
|
/// @param id [in] The identifier
|
||||||
Property( Identifier *id );
|
Property( Text *id );
|
||||||
|
|
||||||
/// @brief The destructor.
|
/// @brief The destructor.
|
||||||
~Property();
|
~Property();
|
||||||
|
@ -227,7 +207,7 @@ private:
|
||||||
/// @brief Stores a data array list.
|
/// @brief Stores a data array list.
|
||||||
struct DLL_ODDLPARSER_EXPORT DataArrayList {
|
struct DLL_ODDLPARSER_EXPORT DataArrayList {
|
||||||
size_t m_numItems; ///< The number of items in the list.
|
size_t m_numItems; ///< The number of items in the list.
|
||||||
Value *m_dataList; ///< The data list ( ee Value ).
|
Value *m_dataList; ///< The data list ( a Value ).
|
||||||
DataArrayList *m_next; ///< The next data array list ( ddl_nullptr if last ).
|
DataArrayList *m_next; ///< The next data array list ( ddl_nullptr if last ).
|
||||||
|
|
||||||
/// @brief The default constructor for initialization.
|
/// @brief The default constructor for initialization.
|
||||||
|
|
|
@ -93,6 +93,10 @@ protected:
|
||||||
bool writeValue( Value *val, std::string &statement );
|
bool writeValue( Value *val, std::string &statement );
|
||||||
bool writeValueArray( DataArrayList *al, std::string &statement );
|
bool writeValueArray( DataArrayList *al, std::string &statement );
|
||||||
|
|
||||||
|
private:
|
||||||
|
OpenDDLExport( const OpenDDLExport & ) ddl_no_copy;
|
||||||
|
OpenDDLExport &operator = ( const OpenDDLExport & ) ddl_no_copy;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
IOStreamBase *m_stream;
|
IOStreamBase *m_stream;
|
||||||
};
|
};
|
||||||
|
|
|
@ -63,9 +63,6 @@ inline
|
||||||
T *getNextToken( T *in, T *end ) {
|
T *getNextToken( T *in, T *end ) {
|
||||||
T *tmp( in );
|
T *tmp( in );
|
||||||
in = lookForNextToken( in, end );
|
in = lookForNextToken( in, end );
|
||||||
/*while( ( isSpace( *in ) || isNewLine( *in ) || ',' == *in ) && ( in != end ) ) {
|
|
||||||
in++;
|
|
||||||
}*/
|
|
||||||
if( tmp == in ) {
|
if( tmp == in ) {
|
||||||
in++;
|
in++;
|
||||||
}
|
}
|
||||||
|
@ -103,7 +100,7 @@ public:
|
||||||
/// @brief The class constructor.
|
/// @brief The class constructor.
|
||||||
/// @param buffer [in] The buffer
|
/// @param buffer [in] The buffer
|
||||||
/// @param len [in] Size of the buffer
|
/// @param len [in] Size of the buffer
|
||||||
OpenDDLParser( char *buffer, size_t len );
|
OpenDDLParser( const char *buffer, size_t len );
|
||||||
|
|
||||||
/// @brief The class destructor.
|
/// @brief The class destructor.
|
||||||
~OpenDDLParser();
|
~OpenDDLParser();
|
||||||
|
@ -119,7 +116,7 @@ public:
|
||||||
/// @brief Assigns a new buffer to parse.
|
/// @brief Assigns a new buffer to parse.
|
||||||
/// @param buffer [in] The buffer
|
/// @param buffer [in] The buffer
|
||||||
/// @param len [in] Size of the buffer
|
/// @param len [in] Size of the buffer
|
||||||
void setBuffer( char *buffer, size_t len );
|
void setBuffer( const char *buffer, size_t len );
|
||||||
|
|
||||||
/// @brief Assigns a new buffer to parse.
|
/// @brief Assigns a new buffer to parse.
|
||||||
/// @param buffer [in] The buffer as a std::vector.
|
/// @param buffer [in] The buffer as a std::vector.
|
||||||
|
@ -161,7 +158,7 @@ public: // parser helpers
|
||||||
DDLNode *top();
|
DDLNode *top();
|
||||||
static void normalizeBuffer( std::vector<char> &buffer );
|
static void normalizeBuffer( std::vector<char> &buffer );
|
||||||
static char *parseName( char *in, char *end, Name **name );
|
static char *parseName( char *in, char *end, Name **name );
|
||||||
static char *parseIdentifier( char *in, char *end, Identifier **id );
|
static char *parseIdentifier( char *in, char *end, Text **id );
|
||||||
static char *parsePrimitiveDataType( char *in, char *end, Value::ValueType &type, size_t &len );
|
static char *parsePrimitiveDataType( char *in, char *end, Value::ValueType &type, size_t &len );
|
||||||
static char *parseReference( char *in, char *end, std::vector<Name*> &names );
|
static char *parseReference( char *in, char *end, std::vector<Name*> &names );
|
||||||
static char *parseBooleanLiteral( char *in, char *end, Value **boolean );
|
static char *parseBooleanLiteral( char *in, char *end, Value **boolean );
|
||||||
|
@ -175,8 +172,8 @@ public: // parser helpers
|
||||||
static const char *getVersion();
|
static const char *getVersion();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
OpenDDLParser( const OpenDDLParser & );
|
OpenDDLParser( const OpenDDLParser & ) ddl_no_copy;
|
||||||
OpenDDLParser &operator = ( const OpenDDLParser & );
|
OpenDDLParser &operator = ( const OpenDDLParser & ) ddl_no_copy;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
logCallback m_logCallback;
|
logCallback m_logCallback;
|
||||||
|
|
|
@ -84,12 +84,7 @@ static const unsigned char chartype_table[ 256 ] = {
|
||||||
template<class T>
|
template<class T>
|
||||||
inline
|
inline
|
||||||
bool isNumeric( const T in ) {
|
bool isNumeric( const T in ) {
|
||||||
return ( in >= '0' && in <= '9' );
|
return ( chartype_table[ in ] == 1 );
|
||||||
//return ( chartype_table[in] );
|
|
||||||
/*if (in >= '0' && in <= '9' )
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
|
@ -243,7 +238,7 @@ bool isComment( T *in, T *end ) {
|
||||||
if ( in+1!=end ) {
|
if ( in+1!=end ) {
|
||||||
if ( *( in+1 )=='/' ) {
|
if ( *( in+1 )=='/' ) {
|
||||||
char *drive( ( in+2 ) );
|
char *drive( ( in+2 ) );
|
||||||
if ( isUpperCase<T>( *drive )||isLowerCase<T>( *drive )&&*( drive+1 )=='/' ) {
|
if ( (isUpperCase<T>( *drive )||isLowerCase<T>( *drive ))&&*( drive+1 )=='/' ) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -220,6 +220,14 @@ public:
|
||||||
/// @return The std::string value.
|
/// @return The std::string value.
|
||||||
const char *getString() const;
|
const char *getString() const;
|
||||||
|
|
||||||
|
/// @brief Set the reference.
|
||||||
|
/// @param ref [in] Pointer showing to the reference.
|
||||||
|
void setRef( Reference *ref );
|
||||||
|
|
||||||
|
/// @brief Returns the pointer showing to the reference.
|
||||||
|
/// @return Pointer showing to the reference.
|
||||||
|
Reference *getRef() const;
|
||||||
|
|
||||||
/// @brief Dumps the value.
|
/// @brief Dumps the value.
|
||||||
void dump();
|
void dump();
|
||||||
|
|
||||||
|
@ -241,8 +249,8 @@ public:
|
||||||
Value *m_next;
|
Value *m_next;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Value &operator =( const Value & );
|
Value &operator =( const Value & ) ddl_no_copy;
|
||||||
Value( const Value & );
|
Value( const Value & ) ddl_no_copy;
|
||||||
};
|
};
|
||||||
|
|
||||||
///------------------------------------------------------------------------------------------------
|
///------------------------------------------------------------------------------------------------
|
||||||
|
@ -253,9 +261,9 @@ struct DLL_ODDLPARSER_EXPORT ValueAllocator {
|
||||||
static void releasePrimData( Value **data );
|
static void releasePrimData( Value **data );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ValueAllocator();
|
ValueAllocator() ddl_no_copy;
|
||||||
ValueAllocator( const ValueAllocator & );
|
ValueAllocator( const ValueAllocator & ) ddl_no_copy;
|
||||||
ValueAllocator &operator = ( const ValueAllocator & );
|
ValueAllocator &operator = ( const ValueAllocator & ) ddl_no_copy;
|
||||||
};
|
};
|
||||||
|
|
||||||
END_ODDLPARSER_NS
|
END_ODDLPARSER_NS
|
||||||
|
|
Binary file not shown.
|
@ -3,7 +3,7 @@
|
||||||
* BSD License:
|
* BSD License:
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
*
|
*
|
||||||
* Copyright (c) 2005-2007 Paul Hsieh
|
* Copyright (c) 2005-2011 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.12
|
||||||
*
|
*
|
||||||
* 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
|
||||||
|
@ -172,12 +172,15 @@
|
||||||
*
|
*
|
||||||
* Acknowledgements
|
* Acknowledgements
|
||||||
*
|
*
|
||||||
|
* Edited by Philip G. Lee <rocketman768@gmail.com> 2011 to avoid overlap with sys/types.h
|
||||||
|
*
|
||||||
* The following people have made significant contributions to the
|
* The following people have made significant contributions to the
|
||||||
* development and testing of this file:
|
* development and testing of this file:
|
||||||
*
|
*
|
||||||
* Chris Howie
|
* Chris Howie
|
||||||
* John Steele Scott
|
* John Steele Scott
|
||||||
* Dave Thorup
|
* Dave Thorup
|
||||||
|
* John Dill
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -190,7 +193,7 @@
|
||||||
* 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(__STDC__) && __STDC__ && __STDC_VERSION__ >= 199901L) || (defined (__WATCOMC__) && (defined (_STDINT_H_INCLUDED) || __WATCOMC__ >= 1250)) || (defined(__GNUC__) && (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
|
# ifndef PRINTF_INT64_MODIFIER
|
||||||
|
@ -300,17 +303,10 @@
|
||||||
* definitions.
|
* definitions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef UINT8_MAX
|
|
||||||
# define UINT8_MAX 0xff
|
// Avoid overlap with sys/types.h
|
||||||
#endif
|
#ifndef __int8_t_defined
|
||||||
#ifndef uint8_t
|
#define __int8_t_defined
|
||||||
# if (UCHAR_MAX == UINT8_MAX) || defined (S_SPLINT_S)
|
|
||||||
typedef unsigned char uint8_t;
|
|
||||||
# define UINT8_C(v) ((uint8_t) v)
|
|
||||||
# else
|
|
||||||
# error "Platform not supported"
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef INT8_MAX
|
#ifndef INT8_MAX
|
||||||
# define INT8_MAX 0x7f
|
# define INT8_MAX 0x7f
|
||||||
|
@ -327,27 +323,6 @@
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef UINT16_MAX
|
|
||||||
# define UINT16_MAX 0xffff
|
|
||||||
#endif
|
|
||||||
#ifndef uint16_t
|
|
||||||
#if (UINT_MAX == UINT16_MAX) || defined (S_SPLINT_S)
|
|
||||||
typedef unsigned int uint16_t;
|
|
||||||
# ifndef PRINTF_INT16_MODIFIER
|
|
||||||
# define PRINTF_INT16_MODIFIER ""
|
|
||||||
# endif
|
|
||||||
# define UINT16_C(v) ((uint16_t) (v))
|
|
||||||
#elif (USHRT_MAX == UINT16_MAX)
|
|
||||||
typedef unsigned short uint16_t;
|
|
||||||
# define UINT16_C(v) ((uint16_t) (v))
|
|
||||||
# ifndef PRINTF_INT16_MODIFIER
|
|
||||||
# define PRINTF_INT16_MODIFIER "h"
|
|
||||||
# endif
|
|
||||||
#else
|
|
||||||
#error "Platform not supported"
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef INT16_MAX
|
#ifndef INT16_MAX
|
||||||
# define INT16_MAX 0x7fff
|
# define INT16_MAX 0x7fff
|
||||||
#endif
|
#endif
|
||||||
|
@ -372,33 +347,6 @@
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef UINT32_MAX
|
|
||||||
# define UINT32_MAX (0xffffffffUL)
|
|
||||||
#endif
|
|
||||||
#ifndef uint32_t
|
|
||||||
#if (ULONG_MAX == UINT32_MAX) || defined (S_SPLINT_S)
|
|
||||||
typedef unsigned long uint32_t;
|
|
||||||
# define UINT32_C(v) v ## UL
|
|
||||||
# ifndef PRINTF_INT32_MODIFIER
|
|
||||||
# define PRINTF_INT32_MODIFIER "l"
|
|
||||||
# endif
|
|
||||||
#elif (UINT_MAX == UINT32_MAX)
|
|
||||||
typedef unsigned int uint32_t;
|
|
||||||
# ifndef PRINTF_INT32_MODIFIER
|
|
||||||
# define PRINTF_INT32_MODIFIER ""
|
|
||||||
# endif
|
|
||||||
# define UINT32_C(v) v ## U
|
|
||||||
#elif (USHRT_MAX == UINT32_MAX)
|
|
||||||
typedef unsigned short uint32_t;
|
|
||||||
# define UINT32_C(v) ((unsigned short) (v))
|
|
||||||
# ifndef PRINTF_INT32_MODIFIER
|
|
||||||
# define PRINTF_INT32_MODIFIER ""
|
|
||||||
# endif
|
|
||||||
#else
|
|
||||||
#error "Platform not supported"
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef INT32_MAX
|
#ifndef INT32_MAX
|
||||||
# define INT32_MAX (0x7fffffffL)
|
# define INT32_MAX (0x7fffffffL)
|
||||||
#endif
|
#endif
|
||||||
|
@ -406,7 +354,7 @@
|
||||||
# define INT32_MIN INT32_C(0x80000000)
|
# define INT32_MIN INT32_C(0x80000000)
|
||||||
#endif
|
#endif
|
||||||
#ifndef int32_t
|
#ifndef int32_t
|
||||||
#if (LONG_MAX == INT32_MAX) || defined (S_SPLINT_S)
|
#if ((LONG_MAX == INT32_MAX) || defined (S_SPLINT_S)) && ! defined(__FreeBSD__)
|
||||||
typedef signed long int32_t;
|
typedef signed long int32_t;
|
||||||
# define INT32_C(v) v ## L
|
# define INT32_C(v) v ## L
|
||||||
# ifndef PRINTF_INT32_MODIFIER
|
# ifndef PRINTF_INT32_MODIFIER
|
||||||
|
@ -429,6 +377,97 @@
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// 64-bit shit seems more tricky. Philip Lee <rocketman768@gmail.com>
|
||||||
|
/*
|
||||||
|
* The macro stdint_int64_defined is temporarily used to record
|
||||||
|
* whether or not 64 integer support is available. It must be
|
||||||
|
* defined for any 64 integer extensions for new platforms that are
|
||||||
|
* added.
|
||||||
|
*/
|
||||||
|
#undef stdint_int64_defined
|
||||||
|
#if (defined(__STDC__) && defined(__STDC_VERSION__)) || defined (S_SPLINT_S)
|
||||||
|
# if (__STDC__ && __STDC_VERSION__ >= 199901L) || defined (S_SPLINT_S)
|
||||||
|
# define stdint_int64_defined
|
||||||
|
typedef long long int64_t;
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#if !defined (stdint_int64_defined)
|
||||||
|
# if defined(__GNUC__)
|
||||||
|
# define stdint_int64_defined
|
||||||
|
# ifndef __FreeBSD__
|
||||||
|
__extension__ typedef long long int64_t;
|
||||||
|
# endif
|
||||||
|
# elif defined(__MWERKS__) || defined (__SUNPRO_C) || defined (__SUNPRO_CC) || defined (__APPLE_CC__) || defined (_LONG_LONG) || defined (_CRAYC) || defined (S_SPLINT_S)
|
||||||
|
# define stdint_int64_defined
|
||||||
|
typedef long long int64_t;
|
||||||
|
# elif (defined(__WATCOMC__) && defined(__WATCOM_INT64__)) || (defined(_MSC_VER) && _INTEGRAL_MAX_BITS >= 64) || (defined (__BORLANDC__) && __BORLANDC__ > 0x460) || defined (__alpha) || defined (__DECC)
|
||||||
|
# define stdint_int64_defined
|
||||||
|
typedef __int64 int64_t;
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /*ifndef __int8_t_defined*/
|
||||||
|
|
||||||
|
#ifndef UINT8_MAX
|
||||||
|
# define UINT8_MAX 0xff
|
||||||
|
#endif
|
||||||
|
#ifndef uint8_t
|
||||||
|
# if (UCHAR_MAX == UINT8_MAX) || defined (S_SPLINT_S)
|
||||||
|
typedef unsigned char uint8_t;
|
||||||
|
# define UINT8_C(v) ((uint8_t) v)
|
||||||
|
# else
|
||||||
|
# error "Platform not supported"
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef UINT16_MAX
|
||||||
|
# define UINT16_MAX 0xffff
|
||||||
|
#endif
|
||||||
|
#ifndef uint16_t
|
||||||
|
#if (UINT_MAX == UINT16_MAX) || defined (S_SPLINT_S)
|
||||||
|
typedef unsigned int uint16_t;
|
||||||
|
# ifndef PRINTF_INT16_MODIFIER
|
||||||
|
# define PRINTF_INT16_MODIFIER ""
|
||||||
|
# endif
|
||||||
|
# define UINT16_C(v) ((uint16_t) (v))
|
||||||
|
#elif (USHRT_MAX == UINT16_MAX)
|
||||||
|
typedef unsigned short uint16_t;
|
||||||
|
# define UINT16_C(v) ((uint16_t) (v))
|
||||||
|
# ifndef PRINTF_INT16_MODIFIER
|
||||||
|
# define PRINTF_INT16_MODIFIER "h"
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
#error "Platform not supported"
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef UINT32_MAX
|
||||||
|
# define UINT32_MAX (0xffffffffUL)
|
||||||
|
#endif
|
||||||
|
#ifndef uint32_t
|
||||||
|
#if ((ULONG_MAX == UINT32_MAX) || defined (S_SPLINT_S)) && ! defined(__FreeBSD__)
|
||||||
|
typedef unsigned long uint32_t;
|
||||||
|
# define UINT32_C(v) v ## UL
|
||||||
|
# ifndef PRINTF_INT32_MODIFIER
|
||||||
|
# define PRINTF_INT32_MODIFIER "l"
|
||||||
|
# endif
|
||||||
|
#elif (UINT_MAX == UINT32_MAX)
|
||||||
|
typedef unsigned int uint32_t;
|
||||||
|
# ifndef PRINTF_INT32_MODIFIER
|
||||||
|
# define PRINTF_INT32_MODIFIER ""
|
||||||
|
# endif
|
||||||
|
# define UINT32_C(v) v ## U
|
||||||
|
#elif (USHRT_MAX == UINT32_MAX)
|
||||||
|
typedef unsigned short uint32_t;
|
||||||
|
# define UINT32_C(v) ((unsigned short) (v))
|
||||||
|
# ifndef PRINTF_INT32_MODIFIER
|
||||||
|
# define PRINTF_INT32_MODIFIER ""
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
#error "Platform not supported"
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The macro stdint_int64_defined is temporarily used to record
|
* The macro stdint_int64_defined is temporarily used to record
|
||||||
* whether or not 64 integer support is available. It must be
|
* whether or not 64 integer support is available. It must be
|
||||||
|
@ -438,10 +477,11 @@
|
||||||
|
|
||||||
#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;
|
# ifndef __FreeBSD__
|
||||||
typedef unsigned long long uint64_t;
|
typedef unsigned long long uint64_t;
|
||||||
|
# endif
|
||||||
# define UINT64_C(v) v ## ULL
|
# define UINT64_C(v) v ## ULL
|
||||||
# define INT64_C(v) v ## LL
|
# define INT64_C(v) v ## LL
|
||||||
# ifndef PRINTF_INT64_MODIFIER
|
# ifndef PRINTF_INT64_MODIFIER
|
||||||
|
@ -453,8 +493,9 @@
|
||||||
#if !defined (stdint_int64_defined)
|
#if !defined (stdint_int64_defined)
|
||||||
# if defined(__GNUC__)
|
# if defined(__GNUC__)
|
||||||
# define stdint_int64_defined
|
# define stdint_int64_defined
|
||||||
__extension__ typedef long long int64_t;
|
# ifndef __FreeBSD__
|
||||||
__extension__ typedef unsigned long long uint64_t;
|
__extension__ typedef unsigned long long uint64_t;
|
||||||
|
# endif
|
||||||
# define UINT64_C(v) v ## ULL
|
# define UINT64_C(v) v ## ULL
|
||||||
# define INT64_C(v) v ## LL
|
# define INT64_C(v) v ## LL
|
||||||
# ifndef PRINTF_INT64_MODIFIER
|
# ifndef PRINTF_INT64_MODIFIER
|
||||||
|
@ -462,7 +503,6 @@
|
||||||
# endif
|
# endif
|
||||||
# elif defined(__MWERKS__) || defined (__SUNPRO_C) || defined (__SUNPRO_CC) || defined (__APPLE_CC__) || defined (_LONG_LONG) || defined (_CRAYC) || defined (S_SPLINT_S)
|
# elif defined(__MWERKS__) || defined (__SUNPRO_C) || defined (__SUNPRO_CC) || defined (__APPLE_CC__) || defined (_LONG_LONG) || defined (_CRAYC) || defined (S_SPLINT_S)
|
||||||
# define stdint_int64_defined
|
# define stdint_int64_defined
|
||||||
typedef long long int64_t;
|
|
||||||
typedef unsigned long long uint64_t;
|
typedef unsigned long long uint64_t;
|
||||||
# define UINT64_C(v) v ## ULL
|
# define UINT64_C(v) v ## ULL
|
||||||
# define INT64_C(v) v ## LL
|
# define INT64_C(v) v ## LL
|
||||||
|
@ -471,7 +511,6 @@
|
||||||
# endif
|
# endif
|
||||||
# elif (defined(__WATCOMC__) && defined(__WATCOM_INT64__)) || (defined(_MSC_VER) && _INTEGRAL_MAX_BITS >= 64) || (defined (__BORLANDC__) && __BORLANDC__ > 0x460) || defined (__alpha) || defined (__DECC)
|
# elif (defined(__WATCOMC__) && defined(__WATCOM_INT64__)) || (defined(_MSC_VER) && _INTEGRAL_MAX_BITS >= 64) || (defined (__BORLANDC__) && __BORLANDC__ > 0x460) || defined (__alpha) || defined (__DECC)
|
||||||
# define stdint_int64_defined
|
# define stdint_int64_defined
|
||||||
typedef __int64 int64_t;
|
|
||||||
typedef unsigned __int64 uint64_t;
|
typedef unsigned __int64 uint64_t;
|
||||||
# define UINT64_C(v) v ## UI64
|
# define UINT64_C(v) v ## UI64
|
||||||
# define INT64_C(v) v ## I64
|
# define INT64_C(v) v ## I64
|
||||||
|
@ -616,10 +655,12 @@
|
||||||
* stdint.h.
|
* stdint.h.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef __FreeBSD__
|
||||||
typedef int_least8_t int_fast8_t;
|
typedef int_least8_t int_fast8_t;
|
||||||
typedef uint_least8_t uint_fast8_t;
|
typedef uint_least8_t uint_fast8_t;
|
||||||
typedef int_least16_t int_fast16_t;
|
typedef int_least16_t int_fast16_t;
|
||||||
typedef uint_least16_t uint_fast16_t;
|
typedef uint_least16_t uint_fast16_t;
|
||||||
|
#endif
|
||||||
typedef int_least32_t int_fast32_t;
|
typedef int_least32_t int_fast32_t;
|
||||||
typedef uint_least32_t uint_fast32_t;
|
typedef uint_least32_t uint_fast32_t;
|
||||||
#define UINT_FAST8_MAX UINT_LEAST8_MAX
|
#define UINT_FAST8_MAX UINT_LEAST8_MAX
|
||||||
|
@ -677,7 +718,7 @@ typedef uint_least32_t uint_fast32_t;
|
||||||
# elif defined (__i386__) || defined (_WIN32) || defined (WIN32)
|
# elif defined (__i386__) || defined (_WIN32) || defined (WIN32)
|
||||||
# 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? */
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# ifdef stdint_intptr_bits
|
# ifdef stdint_intptr_bits
|
||||||
|
@ -707,8 +748,15 @@ typedef uint_least32_t uint_fast32_t;
|
||||||
# ifndef UINTPTR_C
|
# ifndef UINTPTR_C
|
||||||
# define UINTPTR_C(x) stdint_intptr_glue3(UINT,stdint_intptr_bits,_C)(x)
|
# define UINTPTR_C(x) stdint_intptr_glue3(UINT,stdint_intptr_bits,_C)(x)
|
||||||
# endif
|
# endif
|
||||||
|
// Philip <rocketman768@gmail.com>, need to check if [u]intprt_t is already defined...
|
||||||
|
# ifndef __uintptr_t_defined
|
||||||
|
# define __uintptr_t_defined
|
||||||
typedef stdint_intptr_glue3(uint,stdint_intptr_bits,_t) uintptr_t;
|
typedef stdint_intptr_glue3(uint,stdint_intptr_bits,_t) uintptr_t;
|
||||||
|
# endif /*uintptr_t*/
|
||||||
|
# ifndef __intptr_t_defined
|
||||||
|
# define __intptr_t_defined
|
||||||
typedef stdint_intptr_glue3( int,stdint_intptr_bits,_t) intptr_t;
|
typedef stdint_intptr_glue3( int,stdint_intptr_bits,_t) intptr_t;
|
||||||
|
# endif /*__intptr_t_defined*/
|
||||||
# else
|
# else
|
||||||
/* TODO -- This following is likely wrong for some platforms, and does
|
/* TODO -- This following is likely wrong for some platforms, and does
|
||||||
nothing for the definition of uintptr_t. */
|
nothing for the definition of uintptr_t. */
|
||||||
|
@ -727,3 +775,73 @@ 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)
|
||||||
|
|
||||||
|
int main () {
|
||||||
|
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, "%d %x\n", 0, ~0);
|
||||||
|
|
||||||
|
sprintf (str1, "%d %x\n", i8, ~0);
|
||||||
|
if (0 != strcmp (str0, str1)) printf ("Something wrong with i8 : %s\n", str1);
|
||||||
|
sprintf (str1, "%u %x\n", u8, ~0);
|
||||||
|
if (0 != strcmp (str0, str1)) printf ("Something wrong with u8 : %s\n", str1);
|
||||||
|
sprintf (str1, "%d %x\n", i16, ~0);
|
||||||
|
if (0 != strcmp (str0, str1)) printf ("Something wrong with i16 : %s\n", str1);
|
||||||
|
sprintf (str1, "%u %x\n", u16, ~0);
|
||||||
|
if (0 != strcmp (str0, str1)) printf ("Something wrong with u16 : %s\n", str1);
|
||||||
|
sprintf (str1, "%" PRINTF_INT32_MODIFIER "d %x\n", i32, ~0);
|
||||||
|
if (0 != strcmp (str0, str1)) printf ("Something wrong with i32 : %s\n", str1);
|
||||||
|
sprintf (str1, "%" PRINTF_INT32_MODIFIER "u %x\n", u32, ~0);
|
||||||
|
if (0 != strcmp (str0, str1)) printf ("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)) printf ("Something wrong with i64 : %s\n", str1);
|
||||||
|
#endif
|
||||||
|
sprintf (str1, "%" PRINTF_INTMAX_MODIFIER "d %x\n", imax, ~0);
|
||||||
|
if (0 != strcmp (str0, str1)) printf ("Something wrong with imax : %s\n", str1);
|
||||||
|
sprintf (str1, "%" PRINTF_INTMAX_MODIFIER "u %x\n", umax, ~0);
|
||||||
|
if (0 != strcmp (str0, str1)) printf ("Something wrong with umax : %s\n", str1);
|
||||||
|
|
||||||
|
TESTUMAX(8);
|
||||||
|
TESTUMAX(16);
|
||||||
|
TESTUMAX(32);
|
||||||
|
#ifdef INT64_MAX
|
||||||
|
TESTUMAX(64);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -458,6 +458,8 @@ public:
|
||||||
* to the #Importer instance. */
|
* to the #Importer instance. */
|
||||||
const aiScene* ApplyPostProcessing(unsigned int pFlags);
|
const aiScene* ApplyPostProcessing(unsigned int pFlags);
|
||||||
|
|
||||||
|
const aiScene* ApplyCustomizedPostProcessing( BaseProcess *rootProcess, bool requestValidation );
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** @brief Reads the given file and returns its contents if successful.
|
/** @brief Reads the given file and returns its contents if successful.
|
||||||
*
|
*
|
||||||
|
|
|
@ -45,7 +45,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#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 <assimp/importerdesc.h>
|
#include "importerdesc.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
|
@ -86,7 +86,12 @@ public:
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// Red, green, blue and alpha color values
|
// Red, green, blue and alpha color values
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
TReal r, g, b, a;
|
TReal r, g, b, a;
|
||||||
|
};
|
||||||
|
TReal c[ 4 ];
|
||||||
|
};
|
||||||
} PACK_STRUCT; // !struct aiColor4D
|
} PACK_STRUCT; // !struct aiColor4D
|
||||||
|
|
||||||
typedef aiColor4t<float> aiColor4D;
|
typedef aiColor4t<float> aiColor4D;
|
||||||
|
@ -94,7 +99,12 @@ typedef aiColor4t<float> aiColor4D;
|
||||||
#else
|
#else
|
||||||
|
|
||||||
struct aiColor4D {
|
struct aiColor4D {
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
float r, g, b, a;
|
float r, g, b, a;
|
||||||
|
};
|
||||||
|
float c[ 4 ];
|
||||||
|
};
|
||||||
} PACK_STRUCT;
|
} PACK_STRUCT;
|
||||||
|
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
|
|
|
@ -161,10 +161,15 @@ public:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
TReal a1, a2, a3;
|
TReal a1, a2, a3;
|
||||||
TReal b1, b2, b3;
|
TReal b1, b2, b3;
|
||||||
TReal c1, c2, c3;
|
TReal c1, c2, c3;
|
||||||
|
};
|
||||||
|
TReal m[ 3 ][ 3 ];
|
||||||
|
TReal mData[ 9 ];
|
||||||
|
};
|
||||||
} PACK_STRUCT;
|
} PACK_STRUCT;
|
||||||
|
|
||||||
typedef aiMatrix3x3t<float> aiMatrix3x3;
|
typedef aiMatrix3x3t<float> aiMatrix3x3;
|
||||||
|
@ -172,13 +177,18 @@ typedef aiMatrix3x3t<float> aiMatrix3x3;
|
||||||
#else
|
#else
|
||||||
|
|
||||||
struct aiMatrix3x3 {
|
struct aiMatrix3x3 {
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
float a1, a2, a3;
|
float a1, a2, a3;
|
||||||
float b1, b2, b3;
|
float b1, b2, b3;
|
||||||
float c1, c2, c3;
|
float c1, c2, c3;
|
||||||
|
};
|
||||||
|
float m[ 3 ][ 3 ];
|
||||||
|
float mData[ 9 ];
|
||||||
|
};
|
||||||
} PACK_STRUCT;
|
} PACK_STRUCT;
|
||||||
|
|
||||||
#endif
|
#endif // __cplusplus
|
||||||
|
|
||||||
#include "./Compiler/poppack1.h"
|
#include "./Compiler/poppack1.h"
|
||||||
|
|
||||||
|
|
|
@ -266,22 +266,26 @@ inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::FromToMatrix(const aiVector3t<T
|
||||||
{
|
{
|
||||||
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
|
else
|
||||||
{
|
{
|
||||||
if (x.y < x.z)
|
if (x.y < x.z)
|
||||||
{
|
{
|
||||||
x.y = static_cast<TReal>(1.0); x.x = x.z = static_cast<TReal>(0.0);
|
x.y = static_cast<TReal>(1.0);
|
||||||
|
x.x = x.z = static_cast<TReal>(0.0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
x.z = static_cast<TReal>(1.0); x.x = x.y = static_cast<TReal>(0.0);
|
x.z = static_cast<TReal>(1.0);
|
||||||
|
x.x = x.y = static_cast<TReal>(0.0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -213,8 +213,8 @@ public:
|
||||||
/** @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
|
||||||
*/
|
*/
|
||||||
|
@ -222,12 +222,16 @@ public:
|
||||||
const aiVector3t<TReal>& to, aiMatrix4x4t& out);
|
const aiVector3t<TReal>& to, aiMatrix4x4t& out);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
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;
|
||||||
|
};
|
||||||
|
TReal m[ 4 ][ 4 ];
|
||||||
|
TReal mData[ 16 ];
|
||||||
|
};
|
||||||
} PACK_STRUCT;
|
} PACK_STRUCT;
|
||||||
|
|
||||||
typedef aiMatrix4x4t<float> aiMatrix4x4;
|
typedef aiMatrix4x4t<float> aiMatrix4x4;
|
||||||
|
@ -235,11 +239,17 @@ typedef aiMatrix4x4t<float> aiMatrix4x4;
|
||||||
#else
|
#else
|
||||||
|
|
||||||
struct aiMatrix4x4 {
|
struct aiMatrix4x4 {
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
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;
|
||||||
};
|
};
|
||||||
|
float m[ 4 ][ 4 ];
|
||||||
|
float mData[ 16 ];
|
||||||
|
};
|
||||||
|
} PACK_STRUCT;
|
||||||
|
|
||||||
|
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
|
|
|
@ -2,7 +2,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.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
|
@ -54,7 +54,7 @@ namespace Assimp {
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** Android extension to DefaultIOSystem using the standard C file functions */
|
/** Android extension to DefaultIOSystem using the standard C file functions */
|
||||||
class AndroidJNIIOSystem : public DefaultIOSystem
|
class ASSIMP_API AndroidJNIIOSystem : public DefaultIOSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,13 @@ public:
|
||||||
template <typename TOther>
|
template <typename TOther>
|
||||||
operator aiVector2t<TOther> () const;
|
operator aiVector2t<TOther> () const;
|
||||||
|
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
TReal x, y;
|
TReal x, y;
|
||||||
|
};
|
||||||
|
TReal v[ 2 ];
|
||||||
|
};
|
||||||
|
|
||||||
} PACK_STRUCT;
|
} PACK_STRUCT;
|
||||||
|
|
||||||
typedef aiVector2t<float> aiVector2D;
|
typedef aiVector2t<float> aiVector2D;
|
||||||
|
@ -103,8 +109,13 @@ typedef aiVector2t<float> aiVector2D;
|
||||||
#else
|
#else
|
||||||
|
|
||||||
struct aiVector2D {
|
struct aiVector2D {
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
float x, y;
|
float x, y;
|
||||||
};
|
};
|
||||||
|
float v[ 2 ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
|
|
@ -125,7 +125,12 @@ public:
|
||||||
* @param o Second factor */
|
* @param o Second factor */
|
||||||
const aiVector3t SymMul(const aiVector3t& o);
|
const aiVector3t SymMul(const aiVector3t& o);
|
||||||
|
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
TReal x, y, z;
|
TReal x, y, z;
|
||||||
|
};
|
||||||
|
TReal v[ 3 ];
|
||||||
|
};
|
||||||
} PACK_STRUCT;
|
} PACK_STRUCT;
|
||||||
|
|
||||||
|
|
||||||
|
@ -134,8 +139,12 @@ typedef aiVector3t<float> aiVector3D;
|
||||||
#else
|
#else
|
||||||
|
|
||||||
struct aiVector3D {
|
struct aiVector3D {
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
float x, y, z;
|
float x, y, z;
|
||||||
|
};
|
||||||
|
float v[ 3 ];
|
||||||
|
};
|
||||||
} PACK_STRUCT;
|
} 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.
|
||||||
|
|
||||||
|
|
|
@ -1,27 +1,25 @@
|
||||||
--- Description ---
|
Build Asset Importer Lib for Android
|
||||||
|
====================================
|
||||||
This module provides a facade to io stream access to files
|
This module provides a fascade for the io-stream-access to files behind the
|
||||||
behind android asset manager within Android native application.
|
android-asset-management within an Android native application.
|
||||||
- It is built as a static library
|
- It is built as a static library
|
||||||
- It requires Android NDK with android API > 9 support.
|
- It requires Android NDK with android API > 9 support.
|
||||||
|
|
||||||
--- Building ---
|
### Building ###
|
||||||
|
|
||||||
To use this module please provide following cmake defines:
|
To use this module please provide following cmake defines:
|
||||||
|
```
|
||||||
-DASSIMP_ANDROID_JNIIOSYSTEM=ON
|
-DASSIMP_ANDROID_JNIIOSYSTEM=ON
|
||||||
-DCMAKE_TOOLCHAIN_FILE=$SOME_PATH/android.toolchain.cmake
|
-DCMAKE_TOOLCHAIN_FILE=$SOME_PATH/android.toolchain.cmake
|
||||||
|
```
|
||||||
|
|
||||||
"SOME_PATH" is a path to your cmake android toolchain script.
|
"SOME_PATH" is a path to your cmake android toolchain script.
|
||||||
|
|
||||||
--- Code ---
|
### Code ###
|
||||||
|
A small example how to wrap assimp for Android:
|
||||||
|
```cpp
|
||||||
#include <assimp/port/AndroidJNI/AndroidJNIIOSystem.h>
|
#include <assimp/port/AndroidJNI/AndroidJNIIOSystem.h>
|
||||||
|
|
||||||
...
|
|
||||||
|
|
||||||
Assimp::Importer* importer = new Assimp::Importer();
|
Assimp::Importer* importer = new Assimp::Importer();
|
||||||
Assimp::AndroidJNIIOSystem* ioSystem = new Assimp::AndroidJNIIOSystem(app->activity);
|
Assimp::AndroidJNIIOSystem* ioSystem = new Assimp::AndroidJNIIOSystem(app->activity);
|
||||||
importer->SetIOHandler(ioSystem);
|
importer->SetIOHandler(ioSystem);
|
||||||
|
```
|
||||||
...
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
rem @echo off
|
||||||
|
|
||||||
|
:: Now we declare a scope
|
||||||
|
Setlocal EnableDelayedExpansion EnableExtensions
|
||||||
|
|
||||||
|
if not defined Configuration set Configuration=14 2015
|
||||||
|
|
||||||
|
if "%Configuration%"=="MinGW" ( goto :mingw )
|
||||||
|
|
||||||
|
set arch=x86
|
||||||
|
|
||||||
|
if "%platform%" EQU "x64" ( set arch=x86_amd64 )
|
||||||
|
|
||||||
|
if "%Configuration%"=="14 2015" (
|
||||||
|
set SET_VS_ENV="C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%Configuration%"=="12 2013" (
|
||||||
|
set SET_VS_ENV="C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%Configuration%"=="11 2012" (
|
||||||
|
set SET_VS_ENV="C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat"
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%Configuration%"=="10 2010" (
|
||||||
|
set SET_VS_ENV="C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Visual Studio detected
|
||||||
|
endlocal & call %SET_VS_ENV% %arch%
|
||||||
|
goto :eof
|
||||||
|
|
||||||
|
:: MinGW detected
|
||||||
|
:mingw
|
||||||
|
endlocal & set PATH=c:\mingw\bin;%PATH%
|
|
@ -28,6 +28,7 @@ SET( TEST_SRCS
|
||||||
unit/utJoinVertices.cpp
|
unit/utJoinVertices.cpp
|
||||||
unit/utLimitBoneWeights.cpp
|
unit/utLimitBoneWeights.cpp
|
||||||
unit/utMaterialSystem.cpp
|
unit/utMaterialSystem.cpp
|
||||||
|
unit/utMatrix3x3.cpp
|
||||||
unit/utMatrix4x4.cpp
|
unit/utMatrix4x4.cpp
|
||||||
unit/utPretransformVertices.cpp
|
unit/utPretransformVertices.cpp
|
||||||
unit/utRemoveComments.cpp
|
unit/utRemoveComments.cpp
|
||||||
|
@ -44,6 +45,7 @@ SET( TEST_SRCS
|
||||||
unit/utNoBoostTest.cpp
|
unit/utNoBoostTest.cpp
|
||||||
unit/utColladaExportCamera.cpp
|
unit/utColladaExportCamera.cpp
|
||||||
unit/utColladaExportLight.cpp
|
unit/utColladaExportLight.cpp
|
||||||
|
unit/utIssues.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
SOURCE_GROUP( tests FILES ${TEST_SRCS} )
|
SOURCE_GROUP( tests FILES ${TEST_SRCS} )
|
||||||
|
|
|
@ -0,0 +1,623 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
|
||||||
|
<asset>
|
||||||
|
<contributor>
|
||||||
|
<author> Anonymous </author>
|
||||||
|
<authoring_tool> Collada Exporter for Blender 2.6+, by Juan Linietsky (juan@codenix.com) </authoring_tool>
|
||||||
|
</contributor>
|
||||||
|
<created>2016-02-04T00:44:39Z </created>
|
||||||
|
<modified>2016-02-04T00:44:39Z</modified>
|
||||||
|
<unit meter="1.0" name="meter"/>
|
||||||
|
<up_axis>Z_UP</up_axis>
|
||||||
|
</asset>
|
||||||
|
<library_images>
|
||||||
|
</library_images>
|
||||||
|
<library_effects>
|
||||||
|
<effect id="id-fx-8" name="Material-fx">
|
||||||
|
<profile_COMMON>
|
||||||
|
<technique sid="common">
|
||||||
|
<blinn>
|
||||||
|
<emission>
|
||||||
|
<color> 0.0 0.0 0.0 1.0 </color>
|
||||||
|
</emission>
|
||||||
|
<ambient>
|
||||||
|
<color> 0.0 0.0 0.0 1.0 </color>
|
||||||
|
</ambient>
|
||||||
|
<diffuse>
|
||||||
|
<color> 0.6400000190734865 0.6400000190734865 0.6400000190734865 1.0 </color>
|
||||||
|
</diffuse>
|
||||||
|
<specular>
|
||||||
|
<color> 0.5 0.5 0.5 1.0 </color>
|
||||||
|
</specular>
|
||||||
|
<shininess>
|
||||||
|
<float>50</float>
|
||||||
|
</shininess>
|
||||||
|
<reflective>
|
||||||
|
<color> 1.0 1.0 1.0 1.0 </color>
|
||||||
|
</reflective>
|
||||||
|
<index_of_refraction>
|
||||||
|
<float>4.0</float>
|
||||||
|
</index_of_refraction>
|
||||||
|
</blinn>
|
||||||
|
<extra>
|
||||||
|
<technique profile="FCOLLADA">
|
||||||
|
</technique>
|
||||||
|
<technique profile="GOOGLEEARTH">
|
||||||
|
<double_sided>0</double_sided>
|
||||||
|
</technique>
|
||||||
|
</extra>
|
||||||
|
</technique>
|
||||||
|
</profile_COMMON>
|
||||||
|
</effect>
|
||||||
|
</library_effects>
|
||||||
|
<library_materials>
|
||||||
|
<material id="id-material-9" name="Material">
|
||||||
|
<instance_effect url="#id-fx-8"/>
|
||||||
|
</material>
|
||||||
|
</library_materials>
|
||||||
|
<library_geometries>
|
||||||
|
<geometry id="id-mesh-10" name="Cube">
|
||||||
|
<mesh>
|
||||||
|
<source id="id-mesh-10-positions">
|
||||||
|
<float_array id="id-mesh-10-positions-array" count="216"> 1.0 0.9999999403953552 -1.0 1.0 -1.0 -1.0 -1.0000001192092896 -0.9999998211860657 -1.0 -0.9999996423721313 1.0000003576278687 -1.0 -0.9999999403953552 1.0 1.0 -1.0000003576278687 -0.9999996423721313 1.0 -1.0000003576278687 -0.9999996423721313 3.0 -0.9999999403953552 1.0 3.0 1.0 0.9999999403953552 -1.0 1.0000004768371582 0.999999463558197 1.0 0.9999993443489075 -1.0000005960464478 1.0 1.0 -1.0 -1.0 1.0 -1.0 -1.0 0.9999993443489075 -1.0000005960464478 1.0 -1.0000003576278687 -0.9999996423721313 1.0 -1.0000001192092896 -0.9999998211860657 -1.0 -1.0000001192092896 -0.9999998211860657 -1.0 -0.9999996423721313 1.0000003576278687 -1.0 1.0000004768371582 0.999999463558197 1.0 1.0 0.9999999403953552 -1.0 -0.9999996423721313 1.0000003576278687 -1.0 -0.9999999403953552 1.0 1.0 -0.9545343518257141 -0.9545336365699768 4.598935604095459 -0.9545339345932007 0.9545340538024902 4.598935604095459 0.9999993443489075 -1.0000005960464478 3.0 -1.0000003576278687 -0.9999996423721313 3.0 -0.9999999403953552 1.0 3.0 1.0000004768371582 0.999999463558197 3.0 1.0000004768371582 0.999999463558197 3.0 0.9999993443489075 -1.0000005960464478 3.0 -0.9025039672851562 0.9025040864944458 6.0 -0.9025043845176697 -0.9025037288665771 6.0 -0.8504744172096252 -0.8504738211631775 7.0 -0.8504740595817566 0.8504741191864014 7.0 0.9545333385467529 -0.954534649848938 4.598935604095459 -0.9545343518257141 -0.9545336365699768 4.598935604095459 -0.9545339345932007 0.9545340538024902 4.598935604095459 0.9545344710350037 0.9545334577560425 4.598935604095459 0.9545344710350037 0.9545334577560425 4.598935604095459 0.9545333385467529 -0.954534649848938 4.598935604095459 0.8504745364189148 0.8504736423492432 7.0 -0.8504740595817566 0.8504741191864014 7.0 -0.8504744172096252 -0.8504738211631775 7.0 0.8504735231399536 -0.8504747152328491 7.0 -0.9025043845176697 -0.9025037288665771 6.0 0.9025034308433533 -0.9025046825408936 6.0 0.8504735231399536 -0.8504747152328491 7.0 -0.8504744172096252 -0.8504738211631775 7.0 0.9025045037269592 0.9025035500526428 6.0 -0.9025039672851562 0.9025040864944458 6.0 -0.8504740595817566 0.8504741191864014 7.0 0.8504745364189148 0.8504736423492432 7.0 0.9025034308433533 -0.9025046825408936 6.0 0.9025045037269592 0.9025035500526428 6.0 0.8504745364189148 0.8504736423492432 7.0 0.8504735231399536 -0.8504747152328491 7.0 -0.9025039672851562 0.9025040864944458 6.0 0.9025045037269592 0.9025035500526428 6.0 0.9025050401687622 2.9289722442626953 6.009448051452637 -0.9025033712387085 2.9289727210998535 6.009448051452637 0.9545350074768066 2.925309658050537 4.607422351837158 -0.9545333385467529 2.9253101348876953 4.607422351837158 -0.9025033712387085 2.9289727210998535 6.009448051452637 0.9025050401687622 2.9289722442626953 6.009448051452637 -0.9025033712387085 2.9289727210998535 6.009448051452637 -0.9545333385467529 2.9253101348876953 4.607422351837158 0.9545344710350037 0.9545334577560425 4.598935604095459 -0.9545339345932007 0.9545340538024902 4.598935604095459 -0.9545333385467529 2.9253101348876953 4.607422351837158 0.9545350074768066 2.925309658050537 4.607422351837158 0.9545350074768066 2.925309658050537 4.607422351837158 0.9025050401687622 2.9289722442626953 6.009448051452637</float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-mesh-10-positions-array" count="72" stride="3">
|
||||||
|
<param name="X" type="float"/>
|
||||||
|
<param name="Y" type="float"/>
|
||||||
|
<param name="Z" type="float"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-mesh-10-normals">
|
||||||
|
<float_array id="id-mesh-10-normals-array" count="216"> 0.0 0.0 -1.0 0.0 0.0 -1.0 0.0 0.0 -1.0 0.0 0.0 -1.0 -0.9999999403953552 2.2351740369686013e-07 -6.70552182668871e-08 -1.0 2.2351743211856956e-07 -6.70552182668871e-08 -0.9999008774757385 2.1862656751636678e-07 0.01408354565501213 -0.9999008774757385 2.1862656751636678e-07 0.01408354565501213 1.0 -2.980232238769531e-07 4.470339831641468e-08 0.9999999403953552 -4.321336461998726e-07 2.2351700934564178e-08 1.0 -4.3213370304329146e-07 2.235169560549366e-08 1.0 -2.980232238769531e-07 4.470339831641468e-08 -2.831220911048149e-07 -1.0 -1.7881397695873602e-07 -3.7997961044311523e-07 -0.9999999403953552 -8.940698847936801e-08 -3.799796957082435e-07 -1.0 -8.940698847936801e-08 -2.831220911048149e-07 -1.0 -1.7881397695873602e-07 -1.0 2.384185791015625e-07 -1.341104365337742e-07 -1.0 2.384185791015625e-07 -1.341104365337742e-07 2.533197118737007e-07 1.0 8.195638656616211e-08 2.384185791015625e-07 1.0 1.6391278734317893e-07 2.384185791015625e-07 1.0 1.6391278734317893e-07 2.533197118737007e-07 1.0 8.195638656616211e-08 -0.9994659423828125 2.2885373596182035e-07 0.03267655521631241 -0.9994159936904907 -5.6084059906424955e-05 0.03417250141501427 -4.903030230707373e-07 -0.999900758266449 0.014083554036915302 -4.903030230707373e-07 -0.999900758266449 0.014083554036915302 2.793038049730967e-07 0.9999008774757385 0.014083568938076496 2.793038049730967e-07 0.9999008774757385 0.014083568938076496 0.9999008774757385 -5.880169169358851e-07 0.014083541929721832 0.9999008774757385 -5.880169169358851e-07 0.014083541929721832 -0.9991201162338257 -5.4629024816676974e-05 0.041940946131944656 -0.9990172386169434 2.1669733030194038e-07 0.044324908405542374 -0.9986491799354553 2.0373587972244422e-07 0.05195961520075798 -0.9986491799354553 2.0373587972244422e-07 0.05195961520075798 -5.205995421420084e-07 -0.9994659423828125 0.0326765701174736 -5.205994852985896e-07 -0.9994659423828125 0.032676566392183304 2.9053398975520395e-07 0.9995959997177124 0.02842373587191105 2.9053398975520395e-07 0.9995959997177124 0.02842373587191105 0.9994159936904907 -5.6835739087546244e-05 0.03417249023914337 0.9994659423828125 -6.028049028827809e-07 0.032676540315151215 5.150363904249389e-07 0.0 1.0 5.150363904249389e-07 0.0 1.0 5.150363904249389e-07 0.0 1.0 5.150363904249389e-07 0.0 1.0 -5.323321374817169e-07 -0.9990172386169434 0.04432494565844536 -5.323321374817169e-07 -0.9990172386169434 0.04432494565844536 -5.263181037662434e-07 -0.9986491203308105 0.05195968598127365 -5.263181037662434e-07 -0.9986491203308105 0.05195968598127365 2.886259267143032e-07 0.9986491203308105 0.05195966362953186 2.886259267143032e-07 0.9986491203308105 0.05195966362953186 2.886259267143032e-07 0.9986491203308105 0.05195966362953186 2.886259267143032e-07 0.9986491203308105 0.05195966362953186 0.9990172386169434 -6.030014674252016e-07 0.04432491585612297 0.9991201162338257 -5.53747704543639e-05 0.04194095358252525 0.9986491799354553 -6.112079518061364e-07 0.051959652453660965 0.9986491799354553 -6.112079518061364e-07 0.051959652453660965 -1.2316533348766256e-09 -0.0046622720547020435 0.9999890923500061 -1.2316533348766256e-09 -0.0046622720547020435 0.9999890923500061 -1.2316533348766256e-09 -0.0046622720547020435 0.9999890923500061 -1.2316533348766256e-09 -0.0046622720547020435 0.9999890923500061 2.564144381267397e-07 0.9999966025352478 -0.0026121772825717926 2.564144381267397e-07 0.9999966025352478 -0.0026121772825717926 2.564144381267397e-07 0.9999966025352478 -0.0026121772825717926 2.564144381267397e-07 0.9999966025352478 -0.0026121772825717926 -0.9993117451667786 -0.00016610079910606146 0.03709486126899719 -0.9993117451667786 -0.00016610079910606146 0.03709486126899719 7.69835608593894e-08 0.004306257236748934 -0.999990701675415 7.69835608593894e-08 0.004306257236748934 -0.999990701675415 7.69835608593894e-08 0.004306257236748934 -0.999990701675415 7.69835608593894e-08 0.004306257236748934 -0.999990701675415 0.9993118047714233 -0.00016669620526954532 0.03709486499428749 0.9993118047714233 -0.00016669620526954532 0.03709486499428749</float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-mesh-10-normals-array" count="72" stride="3">
|
||||||
|
<param name="X" type="float"/>
|
||||||
|
<param name="Y" type="float"/>
|
||||||
|
<param name="Z" type="float"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-mesh-10-texcoord-0">
|
||||||
|
<float_array id="id-mesh-10-texcoord-0-array" count="144"> 0.853708028793335 0.1462918519973755 0.853708028793335 0.00016813237743917853 0.9998317956924438 0.00016813237743917853 0.9998317360877991 0.1462918221950531 0.41687875986099243 0.15038259327411652 0.5629437565803528 0.14623311161994934 0.5670932531356812 0.29229798913002014 0.42102837562561035 0.29644766449928284 0.1580430120229721 0.005586783867329359 0.15262427926063538 0.1516100913286209 0.006601004861295223 0.14619146287441254 0.012019664980471134 0.00016813237743917853 0.7135531306266785 0.00016813237743917853 0.7135540843009949 0.14629174768924713 0.5674304366111755 0.1462927609682083 0.5674294829368591 0.0001691012439550832 0.5587943196296692 0.00016813237743917853 0.4127293825149536 0.0043175434693694115 0.853708028793335 0.2924155592918396 0.853708028793335 0.1462918519973755 0.9998317360877991 0.1462918221950531 0.9998318552970886 0.2924154996871948 0.5670915842056274 0.4092135429382324 0.42766785621643066 0.41317465901374817 0.713555097579956 0.2924153804779053 0.5674314498901367 0.29241642355918884 0.9998318552970886 0.43853920698165894 0.8537081480026245 0.4385392665863037 0.14720562100410461 0.29763343930244446 0.0011823981767520308 0.29221469163894653 0.43437695503234863 0.5154602527618408 0.5662007331848145 0.5117148756980896 0.5644786357879639 0.5849537253379822 0.44025471806526184 0.5884833335876465 0.7102342247962952 0.4092837870121002 0.5707541108131409 0.4092848598957062 0.9965101480484009 0.5554076433181763 0.8570300936698914 0.555407702922821 0.13955222070217133 0.4142983853816986 0.00016813237743917853 0.40912580490112305 0.7214940786361694 0.46781307458877563 0.8457685708999634 0.46781307458877563 0.8457684516906738 0.5920873880386353 0.7214942574501038 0.5920873880386353 0.5745562314987183 0.5117197632789612 0.7064335942268372 0.51171875 0.7026327252388 0.5848795175552368 0.5783581733703613 0.584880530834198 0.7176926732063293 0.39465245604515076 0.8495699167251587 0.39465245604515076 0.8457685708999634 0.46781307458877563 0.7214940786361694 0.46781307458877563 0.00016824003250803798 0.5116311311721802 0.13195458054542542 0.5165219306945801 0.12544254958629608 0.5894912481307983 0.0012538435403257608 0.5848821997642517 0.8495699167251587 0.39465245604515076 0.7176926732063293 0.39465245604515076 0.7176927328109741 0.24659334123134613 0.8495699763298035 0.2465934455394745 0.7138913869857788 0.1441582441329956 0.8533715605735779 0.14415842294692993 0.8495699763298035 0.2465934455394745 0.7176927328109741 0.24659334123134613 0.28639882802963257 0.520354688167572 0.2837550938129425 0.4178834557533264 0.7138914465904236 0.00016813237743917853 0.8533717393875122 0.00016831178800202906 0.8533715605735779 0.14415842294692993 0.7138913869857788 0.1441582441329956 0.28341880440711975 0.4202575087547302 0.2798847556114197 0.5227020382881165</float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-mesh-10-texcoord-0-array" count="72" stride="2">
|
||||||
|
<param name="S" type="float"/>
|
||||||
|
<param name="T" type="float"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-mesh-10-colors">
|
||||||
|
<float_array id="id-mesh-10-colors-array" count="216"> 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0</float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-mesh-10-colors-array" count="72" stride="3">
|
||||||
|
<param name="X" type="float"/>
|
||||||
|
<param name="Y" type="float"/>
|
||||||
|
<param name="Z" type="float"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<vertices id="id-mesh-10-vertices">
|
||||||
|
<input semantic="POSITION" source="#id-mesh-10-positions"/>
|
||||||
|
</vertices>
|
||||||
|
<polygons count="26" material="id-trimat-11">
|
||||||
|
<input semantic="VERTEX" source="#id-mesh-10-vertices" offset="0"/>
|
||||||
|
<input semantic="NORMAL" source="#id-mesh-10-normals" offset="0"/>
|
||||||
|
<input semantic="TEXCOORD" source="#id-mesh-10-texcoord-0" offset="0" set="0"/>
|
||||||
|
<input semantic="COLOR" source="#id-mesh-10-colors" offset="0"/>
|
||||||
|
<p> 0 1 2 3 </p>
|
||||||
|
<p> 4 5 6 7 </p>
|
||||||
|
<p> 8 9 10 11 </p>
|
||||||
|
<p> 12 13 14 15 </p>
|
||||||
|
<p> 16 5 4 17 </p>
|
||||||
|
<p> 18 19 20 21 </p>
|
||||||
|
<p> 7 6 22 23 </p>
|
||||||
|
<p> 14 13 24 25 </p>
|
||||||
|
<p> 18 21 26 27 </p>
|
||||||
|
<p> 10 9 28 29 </p>
|
||||||
|
<p> 30 31 32 33 </p>
|
||||||
|
<p> 25 24 34 35 </p>
|
||||||
|
<p> 27 26 36 37 </p>
|
||||||
|
<p> 29 28 38 39 </p>
|
||||||
|
<p> 40 41 42 43 </p>
|
||||||
|
<p> 44 45 46 47 </p>
|
||||||
|
<p> 48 49 50 51 </p>
|
||||||
|
<p> 52 53 54 55 </p>
|
||||||
|
<p> 23 22 31 30 </p>
|
||||||
|
<p> 35 34 45 44 </p>
|
||||||
|
<p> 56 57 58 59 </p>
|
||||||
|
<p> 39 38 53 52 </p>
|
||||||
|
<p> 60 61 62 63 </p>
|
||||||
|
<p> 23 30 64 65 </p>
|
||||||
|
<p> 66 67 68 69 </p>
|
||||||
|
<p> 53 38 70 71 </p>
|
||||||
|
</polygons>
|
||||||
|
</mesh>
|
||||||
|
</geometry>
|
||||||
|
</library_geometries>
|
||||||
|
<library_controllers>
|
||||||
|
<controller id="id-controller-12">
|
||||||
|
<skin source="#id-mesh-10">
|
||||||
|
<bind_shape_matrix> 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 </bind_shape_matrix>
|
||||||
|
<source id="id-controller-12-joints">
|
||||||
|
<Name_array id="id-controller-12-joints-array" count="5"> id-skelbones-2-0 id-skelbones-2-1 id-skelbones-2-2 id-skelbones-2-3 id-skelbones-2-4</Name_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-controller-12-joints-array" count="5" stride="1">
|
||||||
|
<param name="JOINT" type="Name"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-controller-12-bind_poses">
|
||||||
|
<float_array id="id-controller-12-bind_poses-array" count="80"> 1.0 -0.0 0.0 -0.0 -0.0 7.549790126404332e-08 1.0 1.0 0.0 -1.0 7.549790126404332e-08 7.549790126404332e-08 -0.0 0.0 -0.0 1.0 1.0 -0.0 0.0 -0.0 -0.0 7.549790126404332e-08 1.0 -1.0 0.0 -1.0 7.549790126404332e-08 7.549790126404332e-08 -0.0 0.0 -0.0 1.0 1.0 3.019916050561733e-07 0.0 -9.11989328999073e-14 -2.2799733224976824e-14 7.549790126404332e-08 1.0 -3.0 3.019916050561733e-07 -1.0 7.549790126404332e-08 7.549789415861596e-08 -0.0 0.0 -0.0 1.0 1.0 -0.0 -0.0 4.559946644995365e-14 -0.0 7.549790126404332e-08 1.0 -5.0 0.0 -1.0 7.549790126404332e-08 7.54979225803254e-08 -0.0 0.0 -0.0 1.0 1.0 -0.0 1.6940658945086007e-21 4.559945628555828e-14 -0.0 1.0 -0.0 -4.5298742179511464e-07 5.621949100372871e-15 -0.0 1.0 -5.0 -0.0 0.0 -0.0 1.0 </float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-controller-12-bind_poses-array" count="5" stride="16">
|
||||||
|
<param name="TRANSFORM" type="float4x4"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-controller-12-skin_weights">
|
||||||
|
<float_array id="id-controller-12-skin_weights-array" count="112"> 1.0 1.0 1.0 1.0 0.9710749387741089 1.0 0.5 0.5 0.4995494484901428 0.5004505515098572 1.0 0.9998676180839539 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.9998676180839539 1.0 1.0 0.9710749387741089 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.4995494484901428 0.5004505515098572 0.5 0.5 0.5 0.5 0.5 0.5 0.3333333432674408 0.6666666865348816 0.6666666865348816 0.3333333432674408 1.0 1.0 0.4999999403953552 0.5000000596046448 0.5 0.5 0.5 0.5 0.49981489777565 0.5001850128173828 0.49981489777565 0.5001850128173828 0.4999999403953552 0.5000000596046448 0.999976634979248 1.0 1.0 1.0 0.6666666865348816 0.3333333432674408 0.6666667461395264 0.333333283662796 1.0 1.0 0.33317145705223083 0.6668285131454468 0.3333333432674408 0.6666666865348816 1.0 0.999976634979248 0.6666667461395264 0.333333283662796 0.33317145705223083 0.6668285131454468 0.999976634979248 1.0 0.3333333432674408 0.6666666865348816 0.33317145705223083 0.6668285131454468 0.33317145705223083 0.6668285131454468 0.3333333432674408 0.6666666865348816 0.49981483817100525 0.5001851320266724 0.5 0.5 0.3333333432674408 0.6666666865348816 0.33317145705223083 0.6668285131454468 0.3333333432674408 0.6666666865348816 0.5 0.5 0.49981489777565 0.5001850128173828 0.5 0.5 0.5 0.5 0.49981483817100525 0.5001851320266724 0.49981483817100525 0.5001851320266724 0.33317145705223083 0.6668285131454468</float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-controller-12-skin_weights-array" count="112" stride="1">
|
||||||
|
<param name="WEIGHT" type="float"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<joints>
|
||||||
|
<input semantic="JOINT" source="#id-controller-12-joints"/>
|
||||||
|
<input semantic="INV_BIND_MATRIX" source="#id-controller-12-bind_poses"/>
|
||||||
|
</joints>
|
||||||
|
<vertex_weights count="72">
|
||||||
|
<input semantic="JOINT" source="#id-controller-12-joints" offset="0"/>
|
||||||
|
<input semantic="WEIGHT" source="#id-controller-12-skin_weights" offset="1"/>
|
||||||
|
<vcount> 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 2 2 1 1 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2</vcount>
|
||||||
|
<v> 0 0 0 1 0 2 0 3 1 4 1 5 1 6 2 7 1 8 2 9 0 10 1 11 1 12 0 13 0 14 1 15 1 16 0 17 0 18 0 19 1 20 0 21 0 22 1 23 2 24 3 25 2 26 3 27 1 28 2 29 1 30 2 31 1 32 2 33 1 34 2 35 1 36 2 37 1 38 2 39 2 40 3 41 3 42 2 43 3 44 3 45 2 46 3 47 2 48 3 49 2 50 3 51 2 52 3 53 2 54 3 55 2 56 3 57 3 58 3 59 3 60 3 61 3 62 2 63 3 64 2 65 3 66 3 67 2 68 3 69 2 70 3 71 3 72 3 73 3 74 2 75 2 76 3 77 3 78 3 79 2 80 3 81 2 82 3 83 2 84 3 85 2 86 3 87 2 88 3 89 2 90 3 91 2 92 3 93 2 94 3 95 2 96 3 97 2 98 3 99 2 100 3 101 2 102 3 103 2 104 3 105 2 106 3 107 2 108 3 109 2 110 3 111</v>
|
||||||
|
</vertex_weights>
|
||||||
|
</skin>
|
||||||
|
</controller>
|
||||||
|
</library_controllers>
|
||||||
|
<library_cameras>
|
||||||
|
</library_cameras>
|
||||||
|
<library_lights>
|
||||||
|
</library_lights>
|
||||||
|
<library_animation_clips>
|
||||||
|
<animation_clip name="bend" start="0.041666666666666664" end="0.625">
|
||||||
|
<instance_animation url="#id-anim-13"/>
|
||||||
|
<instance_animation url="#id-anim-14"/>
|
||||||
|
<instance_animation url="#id-anim-15"/>
|
||||||
|
<instance_animation url="#id-anim-16"/>
|
||||||
|
<instance_animation url="#id-anim-17"/>
|
||||||
|
<instance_animation url="#id-anim-18"/>
|
||||||
|
</animation_clip>
|
||||||
|
<animation_clip name="turn" start="0.0" end="0.8333333333333333">
|
||||||
|
<instance_animation url="#id-anim-19"/>
|
||||||
|
<instance_animation url="#id-anim-20"/>
|
||||||
|
<instance_animation url="#id-anim-21"/>
|
||||||
|
<instance_animation url="#id-anim-22"/>
|
||||||
|
<instance_animation url="#id-anim-23"/>
|
||||||
|
<instance_animation url="#id-anim-24"/>
|
||||||
|
</animation_clip>
|
||||||
|
</library_animation_clips>
|
||||||
|
<library_visual_scenes>
|
||||||
|
<visual_scene id="id-scene-1" name="scene">
|
||||||
|
<node id="Armature" name="Armature" type="NODE">
|
||||||
|
<matrix sid="transform"> 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 </matrix>
|
||||||
|
<node id="id-bone-3" sid="id-skelbones-2-0" name="Bone" type="JOINT">
|
||||||
|
<matrix sid="transform"> 1.0 0.0 0.0 0.0 0.0 7.549790126404332e-08 -1.0 0.0 0.0 1.0 7.549790126404332e-08 -1.0 0.0 0.0 0.0 1.0 </matrix>
|
||||||
|
<node id="id-bone-4" sid="id-skelbones-2-1" name="Bone.001" type="JOINT">
|
||||||
|
<matrix sid="transform"> 1.0 0.0 0.0 0.0 0.0 1.0 0.0 2.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 </matrix>
|
||||||
|
<node id="id-bone-5" sid="id-skelbones-2-2" name="Bone.002" type="JOINT">
|
||||||
|
<matrix sid="transform"> 1.0 -2.2799733224976824e-14 3.019916050561733e-07 0.0 2.2799733224976824e-14 1.0 0.0 2.0 -3.019916050561733e-07 0.0 1.0 7.105427357601002e-15 0.0 0.0 0.0 1.0 </matrix>
|
||||||
|
<node id="id-bone-6" sid="id-skelbones-2-3" name="Bone.003" type="JOINT">
|
||||||
|
<matrix sid="transform"> 1.0 2.2799733224976824e-14 -3.019916050561733e-07 -3.3881317890172014e-21 -2.2799733224976824e-14 1.0 0.0 2.0 3.019916050561733e-07 0.0 1.0 -2.8421722982931164e-14 0.0 0.0 0.0 1.0 </matrix>
|
||||||
|
</node>
|
||||||
|
<node id="id-bone-7" sid="id-skelbones-2-4" name="Bone.004" type="JOINT">
|
||||||
|
<matrix sid="transform"> 1.0 3.019916050561733e-07 -1.6940658945086007e-21 -3.3881317890172014e-21 -2.8421682325349695e-14 7.549790126404332e-08 1.0 2.0 3.019916050561733e-07 -1.0 7.549790126404332e-08 -2.8421722982931164e-14 0.0 0.0 0.0 1.0 </matrix>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
<node id="Cube" name="Cube" type="NODE">
|
||||||
|
<matrix sid="transform"> 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 </matrix>
|
||||||
|
<instance_controller url="#id-controller-12">
|
||||||
|
<skeleton>#id-bone-3</skeleton>
|
||||||
|
<bind_material>
|
||||||
|
<technique_common>
|
||||||
|
<instance_material symbol="id-trimat-11" target="#id-material-9"/>
|
||||||
|
</technique_common>
|
||||||
|
</bind_material>
|
||||||
|
</instance_controller>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</visual_scene>
|
||||||
|
</library_visual_scenes>
|
||||||
|
<library_animations>
|
||||||
|
<animation id="id-anim-13">
|
||||||
|
<source id="id-anim-13-input">
|
||||||
|
<float_array id="id-anim-13-input-array" count="15"> 0.0 0.041666666666666664 0.08333333333333334 0.125 0.16666666666666666 0.20833333333333334 0.24999999999999997 0.29166666666666663 0.3333333333333333 0.37499999999999994 0.41666666666666663 0.4583333333333333 0.49999999999999994 0.5416666666666666 0.5833333333333334</float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-13-input-array" count="15" stride="1">
|
||||||
|
<param name="TIME" type="float"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-anim-13-transform-output">
|
||||||
|
<float_array id="id-anim-13-transform-output-array" count="240"> 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 </float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-13-transform-output-array" count="15" stride="16">
|
||||||
|
<param name="TRANSFORM" type="float4x4"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-anim-13-interpolation-output">
|
||||||
|
<Name_array id="id-anim-13-interpolation-output-array" count="15"> LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-13-interpolation-output-array" count="15" stride="1">
|
||||||
|
<param name="INTERPOLATION" type="Name"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<sampler id="id-anim-13-sampler">
|
||||||
|
<input semantic="INPUT" source="#id-anim-13-input"/>
|
||||||
|
<input semantic="OUTPUT" source="#id-anim-13-transform-output"/>
|
||||||
|
<input semantic="INTERPOLATION" source="#id-anim-13-interpolation-output"/>
|
||||||
|
</sampler>
|
||||||
|
<channel source="#id-anim-13-sampler" target="Armature/transform"/>
|
||||||
|
</animation>
|
||||||
|
<animation id="id-anim-14">
|
||||||
|
<source id="id-anim-14-input">
|
||||||
|
<float_array id="id-anim-14-input-array" count="15"> 0.0 0.041666666666666664 0.08333333333333334 0.125 0.16666666666666666 0.20833333333333334 0.24999999999999997 0.29166666666666663 0.3333333333333333 0.37499999999999994 0.41666666666666663 0.4583333333333333 0.49999999999999994 0.5416666666666666 0.5833333333333334</float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-14-input-array" count="15" stride="1">
|
||||||
|
<param name="TIME" type="float"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-anim-14-transform-output">
|
||||||
|
<float_array id="id-anim-14-transform-output-array" count="240"> 1.0 3.019916050561733e-07 -1.6940658945086007e-21 -3.3881317890172014e-21 -2.8421682325349695e-14 7.549790126404332e-08 1.0 2.0 3.019916050561733e-07 -1.0 7.549790126404332e-08 -2.8421722982931164e-14 0.0 0.0 0.0 1.0 1.0 3.0198953027138487e-07 -1.5963781407890565e-09 4.261721642251359e-09 -2.1282611228912174e-09 7.553694558737334e-08 1.0 1.9999998807907104 3.0198589229257777e-07 -1.0 7.570474735985044e-08 4.5565684558823705e-10 0.0 0.0 0.0 1.0 1.0 3.019813448190689e-07 -4.2969077185261995e-09 -2.3610937205376104e-08 -7.037897375994362e-09 7.6121068559587e-08 1.0 2.000000238418579 3.0177761800587177e-07 -1.0 7.702328730374575e-08 7.712515071034431e-09 0.0 0.0 0.0 1.0 1.0 3.0174851417541504e-07 -9.467839845456183e-09 4.011599230580032e-08 -1.7462298274040222e-10 7.724156603217125e-08 1.0000001192092896 2.000000238418579 3.019813448190689e-07 -1.0 7.700873538851738e-08 -1.6298145055770874e-09 0.0 0.0 0.0 1.0 0.9999998807907104 3.026798367500305e-07 8.192728273570538e-09 1.9393337424844503e-07 -3.0253431759774685e-08 7.59027898311615e-08 0.9999998807907104 1.9999990463256836 3.022141754627228e-07 -0.9999999403953552 7.613562047481537e-08 -1.7695128917694092e-08 0.0 0.0 0.0 1.0 1.0 3.012828528881073e-07 6.184563972055912e-09 2.486049197614193e-07 5.3958501666784286e-08 7.82310962677002e-08 1.0 1.9999995231628418 3.022141754627228e-07 -1.0 7.543712854385376e-08 -5.587935447692871e-09 0.0 0.0 0.0 1.0 1.0 3.050081431865692e-07 -1.2660166248679161e-08 -3.2654497772455215e-07 2.240994945168495e-09 7.264316082000732e-08 0.9999999403953552 1.999999761581421 3.012828528881073e-07 -0.9999999403953552 7.264316082000732e-08 1.1175870895385742e-08 0.0 0.0 0.0 1.0 1.0 3.026798367500305e-07 1.8044374883174896e-09 4.7672074288129807e-07 -4.5372871682047844e-08 6.891787052154541e-08 1.0000001192092896 2.000000238418579 3.0174851417541504e-07 -1.0 7.636845111846924e-08 0.0 0.0 0.0 0.0 1.0 1.0 3.0174851417541504e-07 -1.949956640601158e-08 -3.995373845100403e-07 -9.167706593871117e-09 7.82310962677002e-08 1.0 2.000000238418579 3.022141754627228e-07 -1.0 7.078051567077637e-08 -1.4901161193847656e-08 0.0 0.0 0.0 1.0 1.0 2.9546208679676056e-07 2.4141627363860607e-08 2.2811582311987877e-07 3.8853613659739494e-09 6.705522537231445e-08 1.0 2.000000238418579 3.0151568353176117e-07 -1.0000001192092896 7.450580596923828e-08 -1.4901161193847656e-08 0.0 0.0 0.0 1.0 1.0 3.0384398996829987e-07 -1.0943040251731873e-08 -2.1746382117271423e-07 -2.8172507882118225e-08 7.695052772760391e-08 1.000000238418579 2.000000476837158 2.9779039323329926e-07 -1.0000001192092896 7.566995918750763e-08 -1.862645149230957e-09 0.0 0.0 0.0 1.0 0.9999999403953552 3.0547380447387695e-07 -5.3551048040390015e-09 -3.5390257835388184e-08 -8.614733815193176e-09 8.009374141693115e-08 0.9999998807907104 1.9999996423721313 2.980232238769531e-07 -0.9999998807907104 8.195638656616211e-08 2.9802322387695312e-08 0.0 0.0 0.0 1.0 1.0 3.026798367500305e-07 9.19681042432785e-09 3.296881914138794e-07 -3.655441105365753e-08 7.729977369308472e-08 0.9999999403953552 1.999999761581421 3.129243850708008e-07 -0.9999999403953552 7.636845111846924e-08 1.4901161193847656e-08 0.0 0.0 0.0 1.0 1.0 2.975575625896454e-07 8.381903171539307e-09 1.1548399925231934e-07 1.1175870895385742e-08 7.636845111846924e-08 1.0 2.000000476837158 3.0314549803733826e-07 -1.0 7.636845111846924e-08 1.4901161193847656e-08 0.0 0.0 0.0 1.0 1.0 3.03611159324646e-07 -2.7939677238464355e-09 3.725290298461914e-09 8.381903171539307e-09 7.450580596923828e-08 1.0 2.000000476837158 2.905726432800293e-07 -1.0 7.450580596923828e-08 1.4901161193847656e-08 0.0 0.0 0.0 1.0 </float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-14-transform-output-array" count="15" stride="16">
|
||||||
|
<param name="TRANSFORM" type="float4x4"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-anim-14-interpolation-output">
|
||||||
|
<Name_array id="id-anim-14-interpolation-output-array" count="15"> LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-14-interpolation-output-array" count="15" stride="1">
|
||||||
|
<param name="INTERPOLATION" type="Name"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<sampler id="id-anim-14-sampler">
|
||||||
|
<input semantic="INPUT" source="#id-anim-14-input"/>
|
||||||
|
<input semantic="OUTPUT" source="#id-anim-14-transform-output"/>
|
||||||
|
<input semantic="INTERPOLATION" source="#id-anim-14-interpolation-output"/>
|
||||||
|
</sampler>
|
||||||
|
<channel source="#id-anim-14-sampler" target="id-bone-7/transform"/>
|
||||||
|
</animation>
|
||||||
|
<animation id="id-anim-15">
|
||||||
|
<source id="id-anim-15-input">
|
||||||
|
<float_array id="id-anim-15-input-array" count="15"> 0.0 0.041666666666666664 0.08333333333333334 0.125 0.16666666666666666 0.20833333333333334 0.24999999999999997 0.29166666666666663 0.3333333333333333 0.37499999999999994 0.41666666666666663 0.4583333333333333 0.49999999999999994 0.5416666666666666 0.5833333333333334</float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-15-input-array" count="15" stride="1">
|
||||||
|
<param name="TIME" type="float"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-anim-15-transform-output">
|
||||||
|
<float_array id="id-anim-15-transform-output-array" count="240"> 1.0 0.0 0.0 0.0 0.0 1.0 0.0 2.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.99998539686203 0.005406782031059265 2.0841630504753184e-11 0.0 -0.005406782031059265 0.99998539686203 -5.684341886080802e-14 2.0 -2.0841633974200136e-11 -5.684341886080802e-14 1.0 0.0 0.0 0.0 0.0 1.0 0.9996087551116943 0.02796982228755951 1.4218640154162188e-10 0.0 -0.02796982228755951 0.9996087551116943 -1.9895196601282805e-12 2.0 -1.4218648480834872e-10 -1.9895196601282805e-12 1.0 0.0 0.0 0.0 0.0 1.0 0.998104453086853 0.06154264137148857 4.495371852542007e-10 0.0 -0.06154264137148857 0.998104453086853 -1.3848477919964353e-11 2.0 -4.495372962765032e-10 -1.3848477919964353e-11 1.0 3.552713678800501e-15 0.0 0.0 0.0 1.0 0.9950810074806213 0.09906430542469025 1.1069893890436333e-09 0.0 -0.09906430542469025 0.9950810074806213 -5.496758603840135e-11 2.0 -1.1069891669990284e-09 -5.496758603840135e-11 1.0 1.1546319456101628e-14 0.0 0.0 0.0 1.0 0.9903477430343628 0.1386050283908844 2.387212427734653e-09 0.0 -0.1386050283908844 0.9903477430343628 -1.6624568388579064e-10 1.9999998807907104 -2.387212205690048e-09 -1.6623857845843304e-10 1.0 -1.4210854715202004e-14 0.0 0.0 0.0 1.0 0.9839622974395752 0.1783764809370041 4.3626333656732186e-09 0.0 -0.1783764809370041 0.9839622974395752 -3.922409064216481e-10 2.000000238418579 -4.362632921584009e-09 -3.922409064216481e-10 1.0 1.4210854715202004e-14 0.0 0.0 0.0 1.0 0.9762129187583923 0.21681401133537292 7.393061718374838e-09 0.0 -0.21681401133537292 0.9762129187583923 -8.111058491522272e-10 2.0 -7.393062162464048e-09 -8.111058491522272e-10 1.0 0.0 0.0 0.0 0.0 1.0 0.9676145911216736 0.2524321675300598 1.2406852434310167e-08 0.0 -0.2524321675300598 0.9676145911216736 -1.5917152040856308e-09 2.0 -1.2406852434310167e-08 -1.5917152040856308e-09 1.0 -1.4210854715202004e-14 0.0 0.0 0.0 1.0 0.9592233300209045 0.28264933824539185 2.133943155513407e-08 0.0 -0.28264933824539185 0.9592233300209045 -3.078554300373071e-09 2.0 -2.133943155513407e-08 -3.078554300373071e-09 1.0 -1.4210854715202004e-14 0.0 0.0 0.0 1.0 0.950993537902832 0.3092101812362671 0.0005914760404266417 4.874891601502895e-09 -0.30921056866645813 0.9509932994842529 0.000737061258405447 2.000000238418579 -0.0003345829900354147 -0.0008838316425681114 0.9999995827674866 -1.0477378964424133e-09 0.0 0.0 0.0 1.0 0.9428225159645081 0.333288311958313 0.002140357159078121 6.129266694188118e-08 -0.33329325914382935 0.9428195953369141 0.002598921302706003 2.0 -0.0011517815291881561 -0.003163686953485012 0.9999943375587463 -9.313225746154785e-10 0.0 0.0 0.0 1.0 0.9348953366279602 0.3548996150493622 0.00411301851272583 3.3527612686157227e-08 -0.35491713881492615 0.9348850250244141 0.004878699779510498 2.0 -0.00211375136859715 -0.006020858883857727 0.9999796152114868 -4.6566128730773926e-09 0.0 0.0 0.0 1.0 0.9280365705490112 0.37244030833244324 0.006034713238477707 1.1874362826347351e-08 -0.3724772334098816 0.9280148148536682 0.007022818550467491 2.0 -0.0029847193509340286 -0.008765213191509247 0.9999571442604065 1.4901161193847656e-08 0.0 0.0 0.0 1.0 0.9249669909477234 0.3799836039543152 0.006962517276406288 -5.052424967288971e-08 -0.38003233075141907 0.9249383211135864 0.008036060258746147 2.0 -0.003386327065527439 -0.010079077444970608 0.9999434947967529 7.450580596923828e-09 0.0 0.0 0.0 1.0 </float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-15-transform-output-array" count="15" stride="16">
|
||||||
|
<param name="TRANSFORM" type="float4x4"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-anim-15-interpolation-output">
|
||||||
|
<Name_array id="id-anim-15-interpolation-output-array" count="15"> LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-15-interpolation-output-array" count="15" stride="1">
|
||||||
|
<param name="INTERPOLATION" type="Name"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<sampler id="id-anim-15-sampler">
|
||||||
|
<input semantic="INPUT" source="#id-anim-15-input"/>
|
||||||
|
<input semantic="OUTPUT" source="#id-anim-15-transform-output"/>
|
||||||
|
<input semantic="INTERPOLATION" source="#id-anim-15-interpolation-output"/>
|
||||||
|
</sampler>
|
||||||
|
<channel source="#id-anim-15-sampler" target="id-bone-4/transform"/>
|
||||||
|
</animation>
|
||||||
|
<animation id="id-anim-16">
|
||||||
|
<source id="id-anim-16-input">
|
||||||
|
<float_array id="id-anim-16-input-array" count="15"> 0.0 0.041666666666666664 0.08333333333333334 0.125 0.16666666666666666 0.20833333333333334 0.24999999999999997 0.29166666666666663 0.3333333333333333 0.37499999999999994 0.41666666666666663 0.4583333333333333 0.49999999999999994 0.5416666666666666 0.5833333333333334</float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-16-input-array" count="15" stride="1">
|
||||||
|
<param name="TIME" type="float"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-anim-16-transform-output">
|
||||||
|
<float_array id="id-anim-16-transform-output-array" count="240"> 1.0 -2.2799733224976824e-14 3.019916050561733e-07 0.0 2.2799733224976824e-14 1.0 0.0 2.0 -3.019916050561733e-07 0.0 1.0 7.105427357601002e-15 0.0 0.0 0.0 1.0 0.9998303651809692 0.01841968111693859 4.1081955714616925e-05 -1.1622647289044608e-16 -0.018419725820422173 0.9998288154602051 0.0017628732603043318 2.0 -8.603356945968699e-06 -0.0017633308889344335 0.9999984502792358 -2.001030634593559e-15 0.0 0.0 0.0 1.0 0.9955697059631348 0.09402430802583694 0.0005926893791183829 -5.967448757360216e-16 -0.09402582794427872 0.9955291152000427 0.008997068740427494 2.0 0.0002559037529863417 -0.009012939408421516 0.9999593496322632 9.993741945102386e-15 0.0 0.0 0.0 1.0 0.9817259907722473 0.19028612971305847 0.0022829289082437754 7.4505792646561986e-09 -0.19029591977596283 0.9815584421157837 0.018178554251790047 1.9999998807907104 0.0012182984501123428 -0.018280791118741035 0.9998321533203125 1.5727003033205733e-14 0.0 0.0 0.0 1.0 0.957146942615509 0.2895524203777313 0.005411616992205381 -1.915134717478395e-15 -0.28958943486213684 0.9567543268203735 0.027551069855690002 1.9999998807907104 0.00279989093542099 -0.027937568724155426 0.9996057748794556 6.661338147750939e-16 0.0 0.0 0.0 1.0 0.9201236367225647 0.3914887011051178 0.010444517247378826 -2.4424906541753444e-15 -0.3915977478027344 0.9193943738937378 0.03694813698530197 1.9999996423721313 0.004862145520746708 -0.0380869023501873 0.9992626309394836 -2.248201624865942e-14 0.0 0.0 0.0 1.0 0.8738107681274414 0.48596465587615967 0.017122987657785416 -2.7200464103316335e-15 -0.4862149953842163 0.8726656436920166 0.0452730767428875 2.0 0.007058470044285059 -0.04788554832339287 0.9988278746604919 5.928590951498336e-14 0.0 0.0 0.0 1.0 0.8255134224891663 0.5638235807418823 0.025112418457865715 2.9802318834981634e-08 -0.5643211603164673 0.8239501118659973 0.05145721137523651 2.000000238418579 0.008321406319737434 -0.05665009096264839 0.9983594417572021 2.6423307986078726e-14 0.0 0.0 0.0 1.0 0.7873582243919373 0.6155419945716858 0.03428023308515549 -2.980232594040899e-08 -0.616461992263794 0.7855148911476135 0.054230671375989914 1.999999761581421 0.0064536212012171745 -0.06383142620325089 0.9979398250579834 4.4853010194856324e-14 0.0 0.0 0.0 1.0 0.7748236656188965 0.6305439472198486 0.04541659727692604 -1.1920928955078125e-07 -0.6321731805801392 0.7730801701545715 0.05200223997235298 2.000000238418579 -0.0023209722712635994 -0.06900371611118317 0.9976137280464172 1.9539925233402755e-14 0.0 0.0 0.0 1.0 0.8074691891670227 0.5863681435585022 0.06454403698444366 6.511982064694166e-08 -0.5886243581771851 0.8080913424491882 0.022573528811335564 1.999999761581421 -0.03892108052968979 -0.05621962994337082 0.9976595044136047 -1.3969838619232178e-09 0.0 0.0 0.0 1.0 0.8808358907699585 0.4656791687011719 0.08527038991451263 1.8748687580227852e-07 -0.46402132511138916 0.8849409818649292 -0.039543673396110535 1.9999998807907104 -0.09387392550706863 -0.0047357818111777306 0.9955728650093079 -1.30385160446167e-08 0.0 0.0 0.0 1.0 0.9460473656654358 0.3024177849292755 0.11635156720876694 7.392372936010361e-08 -0.29019874334335327 0.950512170791626 -0.11095613986253738 1.9999995231628418 -0.14414867758750916 0.07120470702648163 0.9869908094406128 -1.862645149230957e-09 0.0 0.0 0.0 1.0 0.9779367446899414 0.14079925417900085 0.15432208776474 2.561137080192566e-07 -0.11382761597633362 0.9785844683647156 -0.17151015996932983 1.9999998807907104 -0.17516569793224335 0.15015996992588043 0.9730204939842224 -1.30385160446167e-08 0.0 0.0 0.0 1.0 0.9825076460838318 0.06423753499984741 0.17479248344898224 3.725290298461914e-08 -0.029007764533162117 0.9799563884735107 -0.19708888232707977 1.9999998807907104 -0.1839495152235031 0.1885710060596466 0.9646779298782349 2.2351741790771484e-08 0.0 0.0 0.0 1.0 </float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-16-transform-output-array" count="15" stride="16">
|
||||||
|
<param name="TRANSFORM" type="float4x4"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-anim-16-interpolation-output">
|
||||||
|
<Name_array id="id-anim-16-interpolation-output-array" count="15"> LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-16-interpolation-output-array" count="15" stride="1">
|
||||||
|
<param name="INTERPOLATION" type="Name"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<sampler id="id-anim-16-sampler">
|
||||||
|
<input semantic="INPUT" source="#id-anim-16-input"/>
|
||||||
|
<input semantic="OUTPUT" source="#id-anim-16-transform-output"/>
|
||||||
|
<input semantic="INTERPOLATION" source="#id-anim-16-interpolation-output"/>
|
||||||
|
</sampler>
|
||||||
|
<channel source="#id-anim-16-sampler" target="id-bone-5/transform"/>
|
||||||
|
</animation>
|
||||||
|
<animation id="id-anim-17">
|
||||||
|
<source id="id-anim-17-input">
|
||||||
|
<float_array id="id-anim-17-input-array" count="15"> 0.0 0.041666666666666664 0.08333333333333334 0.125 0.16666666666666666 0.20833333333333334 0.24999999999999997 0.29166666666666663 0.3333333333333333 0.37499999999999994 0.41666666666666663 0.4583333333333333 0.49999999999999994 0.5416666666666666 0.5833333333333334</float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-17-input-array" count="15" stride="1">
|
||||||
|
<param name="TIME" type="float"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-anim-17-transform-output">
|
||||||
|
<float_array id="id-anim-17-transform-output-array" count="240"> 1.0 2.2799733224976824e-14 -3.019916050561733e-07 -3.3881317890172014e-21 -2.2799733224976824e-14 1.0 0.0 2.0 3.019916050561733e-07 0.0 1.0 -2.8421722982931164e-14 0.0 0.0 0.0 1.0 0.9998536109924316 0.01711064949631691 0.00039659717003814876 4.261721642251359e-09 -0.0171112772077322 0.9998522400856018 0.0016349750803783536 1.9999998807907104 -0.00036856307997368276 -0.001641521812416613 0.9999986290931702 4.5565684558823705e-10 0.0 0.0 0.0 1.0 0.99617999792099 0.08729173988103867 0.0023786951787769794 -2.3610937205376104e-08 -0.08730863034725189 0.9961469769477844 0.008274005725979805 2.000000238418579 -0.0016472784336656332 -0.00845007598400116 0.9999629259109497 7.712515071034431e-09 0.0 0.0 0.0 1.0 0.9842609167098999 0.17661483585834503 0.00612880103290081 4.011599230580032e-08 -0.17669369280338287 0.984127402305603 0.01651296205818653 2.000000238418579 -0.0031150872819125652 -0.017335979267954826 0.9998448491096497 -1.6298145055770874e-09 0.0 0.0 0.0 1.0 0.9631130695343018 0.2688666880130768 0.011120881885290146 1.9393337424844503e-07 -0.2690659761428833 0.9628040194511414 0.02473120391368866 1.9999990463256836 -0.0040578339248895645 -0.026811204850673676 0.9996322393417358 -1.7695128917694092e-08 0.0 0.0 0.0 1.0 0.931238055229187 0.36400336027145386 0.017243409529328346 2.486049197614193e-07 -0.36438867449760437 0.9306660890579224 0.032886967062950134 1.9999995231628418 -0.004076894372701645 -0.036908891052007675 0.999310314655304 -5.587935447692871e-09 0.0 0.0 0.0 1.0 0.8912754058837891 0.4528215229511261 0.02409932389855385 -3.2654497772455215e-07 -0.45345044136047363 0.8903771638870239 0.04014023765921593 1.999999761581421 -0.003281119279563427 -0.04670385271310806 0.9989033341407776 1.1175870895385742e-08 0.0 0.0 0.0 1.0 0.8494575619697571 0.5267446041107178 0.031019873917102814 4.7672074288129807e-07 -0.5276526808738708 0.8482257723808289 0.045782655477523804 2.000000238418579 -0.002196100540459156 -0.0552581250667572 0.9984697103500366 0.0 0.0 0.0 0.0 1.0 0.8163167238235474 0.5764156579971313 0.037040553987026215 -3.995373845100403e-07 -0.5776014924049377 0.8148404955863953 0.0491071380674839 2.000000238418579 -0.00187602115329355 -0.06148165464401245 0.9981064200401306 -1.4901161193847656e-08 0.0 0.0 0.0 1.0 0.8055055141448975 0.5911691188812256 0.040987249463796616 2.2811582311987877e-07 -0.592576265335083 0.8039996027946472 0.04937676340341568 2.000000238418579 -0.0037637173663824797 -0.06406132876873016 0.9979389309883118 -1.4901161193847656e-08 0.0 0.0 0.0 1.0 0.8542895317077637 0.5183570981025696 0.038668498396873474 -2.1746382117271423e-07 -0.5196048021316528 0.8536322116851807 0.03637533634901047 2.000000476837158 -0.014153261668980122 -0.05116738751530647 0.9985899329185486 -1.862645149230957e-09 0.0 0.0 0.0 1.0 0.9508073925971985 0.30806994438171387 0.03252604231238365 -3.5390257835388184e-08 -0.3083057403564453 0.9512842297554016 0.002376377582550049 1.9999996423721313 -0.030209438875317574 -0.012287446297705173 0.9994679689407349 2.9802322387695312e-08 0.0 0.0 0.0 1.0 0.9992246031761169 0.01764739491045475 0.03519628569483757 3.296881914138794e-07 -0.016185099259018898 0.999011218547821 -0.041407715529203415 1.999999761581421 -0.03589221462607384 0.04080595448613167 0.9985222220420837 1.4901161193847656e-08 0.0 0.0 0.0 1.0 0.9651545882225037 -0.25707417726516724 0.04888274520635605 1.1548399925231934e-07 0.26034310460090637 0.9621813893318176 -0.08017843961715698 2.000000476837158 -0.026422247290611267 0.09011086821556091 0.9955812096595764 1.4901161193847656e-08 0.0 0.0 0.0 1.0 0.9240012168884277 -0.37787526845932007 0.05858353525400162 3.725290298461914e-09 0.38199254870414734 0.919124186038971 -0.09639789164066315 2.000000476837158 -0.01741916500031948 0.11145025491714478 0.9936173558235168 1.4901161193847656e-08 0.0 0.0 0.0 1.0 </float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-17-transform-output-array" count="15" stride="16">
|
||||||
|
<param name="TRANSFORM" type="float4x4"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-anim-17-interpolation-output">
|
||||||
|
<Name_array id="id-anim-17-interpolation-output-array" count="15"> LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-17-interpolation-output-array" count="15" stride="1">
|
||||||
|
<param name="INTERPOLATION" type="Name"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<sampler id="id-anim-17-sampler">
|
||||||
|
<input semantic="INPUT" source="#id-anim-17-input"/>
|
||||||
|
<input semantic="OUTPUT" source="#id-anim-17-transform-output"/>
|
||||||
|
<input semantic="INTERPOLATION" source="#id-anim-17-interpolation-output"/>
|
||||||
|
</sampler>
|
||||||
|
<channel source="#id-anim-17-sampler" target="id-bone-6/transform"/>
|
||||||
|
</animation>
|
||||||
|
<animation id="id-anim-18">
|
||||||
|
<source id="id-anim-18-input">
|
||||||
|
<float_array id="id-anim-18-input-array" count="15"> 0.0 0.041666666666666664 0.08333333333333334 0.125 0.16666666666666666 0.20833333333333334 0.24999999999999997 0.29166666666666663 0.3333333333333333 0.37499999999999994 0.41666666666666663 0.4583333333333333 0.49999999999999994 0.5416666666666666 0.5833333333333334</float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-18-input-array" count="15" stride="1">
|
||||||
|
<param name="TIME" type="float"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-anim-18-transform-output">
|
||||||
|
<float_array id="id-anim-18-transform-output-array" count="240"> 1.0 0.0 0.0 0.0 0.0 7.549790126404332e-08 -1.0 0.0 0.0 1.0 7.549790126404332e-08 -1.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 7.549790126404332e-08 -1.0 0.0 0.0 1.0 7.549790126404332e-08 -0.9340413808822632 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 7.549790126404332e-08 -1.0 1.7763568394002505e-15 0.0 1.0 7.549790126404332e-08 -0.6646065711975098 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 7.549790126404332e-08 -1.0 -7.105427357601002e-15 0.0 1.0 7.549790126404332e-08 -0.3219858407974243 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 7.549790126404332e-08 -1.0 -7.105427357601002e-15 0.0 1.0 7.549790126404332e-08 0.03573417663574219 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 7.549790126404332e-08 -1.0 -1.4210854715202004e-14 0.0 1.0 7.549790126404332e-08 0.41436636447906494 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 7.549790126404332e-08 -1.0 -1.4210854715202004e-14 0.0 1.0 7.549790126404332e-08 0.7831066846847534 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 7.549790126404332e-08 -1.0 -2.842170943040401e-14 0.0 1.0 7.549790126404332e-08 1.107043743133545 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 7.549790126404332e-08 -1.0 0.0 0.0 1.0 7.549790126404332e-08 1.336852788925171 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 7.549790126404332e-08 -1.0 0.0 0.0 1.0 7.549790126404332e-08 1.407799482345581 0.0 0.0 0.0 1.0 0.9968345761299133 0.07932797819375992 0.005282554775476456 0.0 0.004770305939018726 0.006645471788942814 -0.999966561794281 -1.4210854715202004e-14 -0.07936043292284012 0.9968264102935791 0.006246017292141914 1.193772792816162 0.0 0.0 0.0 1.0 0.9586331844329834 0.2838432192802429 0.021341901272535324 0.0 0.014647725969552994 0.02568591572344303 -0.9995627403259277 0.0 -0.2842673063278198 0.958526611328125 0.02046571485698223 0.6453161239624023 0.0 0.0 0.0 1.0 0.8506482243537903 0.5237787365913391 0.04531409963965416 0.0 0.02114533632993698 0.05203593522310257 -0.998421311378479 -7.105427357601002e-15 -0.5253098607063293 0.8502635359764099 0.033188797533512115 -0.037257254123687744 0.0 0.0 0.0 1.0 0.6941251158714294 0.7164199352264404 0.0702333077788353 0.0 0.020735301077365875 0.07762672752141953 -0.9967668652534485 3.552713678800501e-15 -0.7195556163787842 0.6933372616767883 0.03902747482061386 -0.6890351176261902 0.0 0.0 0.0 1.0 0.6061614155769348 0.7910918593406677 0.08210963010787964 0.0 0.018376974388957024 0.08927963674068451 -0.9958370327949524 0.0 -0.7951292991638184 0.6051469445228577 0.039580002427101135 -1.0 0.0 0.0 0.0 1.0 </float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-18-transform-output-array" count="15" stride="16">
|
||||||
|
<param name="TRANSFORM" type="float4x4"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-anim-18-interpolation-output">
|
||||||
|
<Name_array id="id-anim-18-interpolation-output-array" count="15"> LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-18-interpolation-output-array" count="15" stride="1">
|
||||||
|
<param name="INTERPOLATION" type="Name"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<sampler id="id-anim-18-sampler">
|
||||||
|
<input semantic="INPUT" source="#id-anim-18-input"/>
|
||||||
|
<input semantic="OUTPUT" source="#id-anim-18-transform-output"/>
|
||||||
|
<input semantic="INTERPOLATION" source="#id-anim-18-interpolation-output"/>
|
||||||
|
</sampler>
|
||||||
|
<channel source="#id-anim-18-sampler" target="id-bone-3/transform"/>
|
||||||
|
</animation>
|
||||||
|
<animation id="id-anim-19">
|
||||||
|
<source id="id-anim-19-input">
|
||||||
|
<float_array id="id-anim-19-input-array" count="21"> 0.0 0.041666666666666664 0.08333333333333333 0.125 0.16666666666666666 0.20833333333333331 0.25 0.29166666666666663 0.3333333333333333 0.375 0.41666666666666663 0.4583333333333333 0.5 0.5416666666666666 0.5833333333333333 0.625 0.6666666666666666 0.7083333333333333 0.75 0.7916666666666666 0.8333333333333333</float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-19-input-array" count="21" stride="1">
|
||||||
|
<param name="TIME" type="float"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-anim-19-transform-output">
|
||||||
|
<float_array id="id-anim-19-transform-output-array" count="336"> 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 </float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-19-transform-output-array" count="21" stride="16">
|
||||||
|
<param name="TRANSFORM" type="float4x4"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-anim-19-interpolation-output">
|
||||||
|
<Name_array id="id-anim-19-interpolation-output-array" count="21"> LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-19-interpolation-output-array" count="21" stride="1">
|
||||||
|
<param name="INTERPOLATION" type="Name"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<sampler id="id-anim-19-sampler">
|
||||||
|
<input semantic="INPUT" source="#id-anim-19-input"/>
|
||||||
|
<input semantic="OUTPUT" source="#id-anim-19-transform-output"/>
|
||||||
|
<input semantic="INTERPOLATION" source="#id-anim-19-interpolation-output"/>
|
||||||
|
</sampler>
|
||||||
|
<channel source="#id-anim-19-sampler" target="Armature/transform"/>
|
||||||
|
</animation>
|
||||||
|
<animation id="id-anim-20">
|
||||||
|
<source id="id-anim-20-input">
|
||||||
|
<float_array id="id-anim-20-input-array" count="21"> 0.0 0.041666666666666664 0.08333333333333333 0.125 0.16666666666666666 0.20833333333333331 0.25 0.29166666666666663 0.3333333333333333 0.375 0.41666666666666663 0.4583333333333333 0.5 0.5416666666666666 0.5833333333333333 0.625 0.6666666666666666 0.7083333333333333 0.75 0.7916666666666666 0.8333333333333333</float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-20-input-array" count="21" stride="1">
|
||||||
|
<param name="TIME" type="float"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-anim-20-transform-output">
|
||||||
|
<float_array id="id-anim-20-transform-output-array" count="336"> 1.0 3.019916050561733e-07 -1.6940658945086007e-21 -3.3881317890172014e-21 -2.8421682325349695e-14 7.549790126404332e-08 1.0 2.0 3.019916050561733e-07 -1.0 7.549790126404332e-08 -2.8421722982931164e-14 0.0 0.0 0.0 1.0 1.0 2.980232238769531e-07 2.740863092043355e-16 4.542739340078483e-15 -2.787898662197797e-14 7.549790126404332e-08 1.0 1.999999761581421 2.980232238769531e-07 -1.0 7.549790126404332e-08 -6.111760132276184e-14 0.0 0.0 0.0 1.0 1.0 2.980232238769531e-07 -4.440892098500626e-16 -3.693798874626966e-15 -2.509833839240208e-14 7.549790836947068e-08 1.0 2.0 2.980232238769531e-07 -1.0 7.549790836947068e-08 1.9710300828545274e-14 0.0 0.0 0.0 1.0 1.0 2.980232238769531e-07 0.0 -2.5217366850282044e-14 -2.7558835272970157e-14 7.549790126404332e-08 1.0 1.999999761581421 2.980232238769531e-07 -1.0 7.549790126404332e-08 1.2755667358412166e-14 0.0 0.0 0.0 1.0 1.0 2.980232238769531e-07 -1.7763568394002505e-15 -5.464224111704184e-14 -2.4811610963492922e-14 7.549790126404332e-08 1.0 2.0 2.980232238769531e-07 -1.0 7.549790126404332e-08 -8.798196444667356e-15 0.0 0.0 0.0 1.0 1.0 3.0199157663446385e-07 -7.111923615526905e-22 -2.0328790734103208e-20 -2.84216806312838e-14 7.549789415861596e-08 1.0 1.999999761581421 3.019916050561733e-07 -1.0 7.549789415861596e-08 -1.4210912313442417e-14 0.0 0.0 0.0 1.0 1.0 2.980232238769531e-07 -4.440892098500626e-16 1.5987211554602254e-14 -3.019806626980426e-14 7.549790126404332e-08 1.0 1.999999761581421 2.980232238769531e-07 -1.0 7.549790836947068e-08 -3.552713678800501e-15 0.0 0.0 0.0 1.0 1.0 2.980232238769531e-07 -8.881784197001252e-16 -4.440892098500626e-15 -2.842170943040401e-14 7.549789415861596e-08 1.0 2.000000238418579 2.980232238769531e-07 -0.9999999403953552 7.549789415861596e-08 2.1316282072803006e-14 0.0 0.0 0.0 1.0 1.0000001192092896 2.980232238769531e-07 -1.7763568394002505e-15 1.3322676295501878e-14 -2.842170943040401e-14 7.549790836947068e-08 1.0 1.999999761581421 2.980232238769531e-07 -1.0000001192092896 7.549790126404332e-08 -1.0658141036401503e-14 0.0 0.0 0.0 1.0 1.0 2.980232238769531e-07 -4.440892098500626e-16 1.3322676295501878e-15 -2.7977620220553945e-14 7.549790126404332e-08 1.0 2.000000238418579 2.980232238769531e-07 -1.0 7.549789415861596e-08 -2.3092638912203256e-14 0.0 0.0 0.0 1.0 1.0 3.019916050561733e-07 -7.9063885886186065e-22 -1.0164395367051604e-20 -2.8421682325349695e-14 7.549790126404332e-08 1.0 2.0 3.019916050561733e-07 -1.0 7.549790126404332e-08 2.842169587787685e-14 0.0 0.0 0.0 1.0 1.0 3.2782554626464844e-07 1.3322676295501878e-15 5.6066262743570405e-15 -2.693678613496786e-14 7.549790836947068e-08 1.0 2.0 3.2782554626464844e-07 -1.0 7.549789415861596e-08 -7.105427357601002e-15 0.0 0.0 0.0 1.0 1.0 2.980232238769531e-07 -1.6653345369377348e-15 9.325873406851315e-15 -2.3314683517128287e-14 7.549790836947068e-08 1.0 2.000000238418579 2.980232238769531e-07 -1.0000001192092896 7.549789415861596e-08 -7.105427357601002e-14 0.0 0.0 0.0 1.0 1.0 2.682209014892578e-07 1.3322676295501878e-15 -5.329070518200751e-15 -3.019806626980426e-14 7.549791547489804e-08 1.0 1.999999761581421 2.682209014892578e-07 -1.0000001192092896 7.549790126404332e-08 -3.552713678800501e-14 0.0 0.0 0.0 1.0 0.9999999403953552 2.980232238769531e-07 -3.1086244689504383e-15 3.552713678800501e-15 -2.842170943040401e-14 7.549789415861596e-08 1.0 2.0 2.980232238769531e-07 -0.9999999403953552 7.549789415861596e-08 -4.263256414560601e-14 0.0 0.0 0.0 1.0 1.0 3.0199157663446385e-07 -2.117582368135751e-21 -1.6940658945086007e-21 -2.84216806312838e-14 7.549789415861596e-08 1.0 1.999999761581421 3.0199157663446385e-07 -1.0 7.549789415861596e-08 -2.842170265414043e-14 0.0 0.0 0.0 1.0 0.9999999403953552 2.980232238769531e-07 -1.7763568394002505e-15 -1.4210854715202004e-14 -3.108624468950438e-14 7.549789415861596e-08 1.0 2.000000238418579 2.980232238769531e-07 -0.9999999403953552 7.549789415861596e-08 1.2434497875801753e-14 0.0 0.0 0.0 1.0 1.0000001192092896 2.980232238769531e-07 2.6645352591003757e-15 2.1316282072803006e-14 -3.197442310920451e-14 7.549790836947068e-08 1.0 2.0 2.980232238769531e-07 -1.0000001192092896 7.549790126404332e-08 -7.105427357601002e-14 0.0 0.0 0.0 1.0 0.9999999403953552 2.980232238769531e-07 4.884981308350689e-15 0.0 -2.4868995751603507e-14 7.549790126404332e-08 1.0 2.000000238418579 2.980232238769531e-07 -0.9999999403953552 7.549790126404332e-08 0.0 0.0 0.0 0.0 1.0 1.0 2.905726432800293e-07 -2.831068712794149e-15 7.105427357601002e-14 -2.9753977059954195e-14 7.549790836947068e-08 1.0 1.999999761581421 2.905726432800293e-07 -1.0 7.549790126404332e-08 2.1316282072803006e-14 0.0 0.0 0.0 1.0 1.0 3.019916050561733e-07 -4.5171351782337e-22 8.470329472543003e-21 -2.8421682325349695e-14 7.549790126404332e-08 1.0 2.0 3.019916050561733e-07 -1.0 7.549790126404332e-08 -4.658681209898652e-21 0.0 0.0 0.0 1.0 </float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-20-transform-output-array" count="21" stride="16">
|
||||||
|
<param name="TRANSFORM" type="float4x4"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-anim-20-interpolation-output">
|
||||||
|
<Name_array id="id-anim-20-interpolation-output-array" count="21"> LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-20-interpolation-output-array" count="21" stride="1">
|
||||||
|
<param name="INTERPOLATION" type="Name"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<sampler id="id-anim-20-sampler">
|
||||||
|
<input semantic="INPUT" source="#id-anim-20-input"/>
|
||||||
|
<input semantic="OUTPUT" source="#id-anim-20-transform-output"/>
|
||||||
|
<input semantic="INTERPOLATION" source="#id-anim-20-interpolation-output"/>
|
||||||
|
</sampler>
|
||||||
|
<channel source="#id-anim-20-sampler" target="id-bone-7/transform"/>
|
||||||
|
</animation>
|
||||||
|
<animation id="id-anim-21">
|
||||||
|
<source id="id-anim-21-input">
|
||||||
|
<float_array id="id-anim-21-input-array" count="21"> 0.0 0.041666666666666664 0.08333333333333333 0.125 0.16666666666666666 0.20833333333333331 0.25 0.29166666666666663 0.3333333333333333 0.375 0.41666666666666663 0.4583333333333333 0.5 0.5416666666666666 0.5833333333333333 0.625 0.6666666666666666 0.7083333333333333 0.75 0.7916666666666666 0.8333333333333333</float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-21-input-array" count="21" stride="1">
|
||||||
|
<param name="TIME" type="float"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-anim-21-transform-output">
|
||||||
|
<float_array id="id-anim-21-transform-output-array" count="336"> 1.0 0.0 0.0 0.0 0.0 1.0 0.0 2.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 -5.342710077992151e-16 0.0 8.862057858450884e-16 1.0 -7.0636156937421615e-15 2.0 -5.342710607387743e-16 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0000001192092896 0.0 -1.9771030126248092e-15 0.0 3.552713678800501e-15 1.0 -7.105427357601002e-15 2.0 -1.9771030126248092e-15 0.0 1.0000001192092896 0.0 0.0 0.0 0.0 1.0 1.0 0.0 -2.8464326199079213e-15 0.0 0.0 1.0 0.0 2.0 -2.8464326199079213e-15 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 -1.7659080527211582e-15 0.0 -5.825547445289072e-16 1.0 9.824089292580348e-17 2.0 -1.7659079468420398e-15 -1.7763568394002505e-15 1.0 -3.552713678800501e-15 0.0 0.0 0.0 1.0 1.0 8.470329472543003e-22 3.070531895223506e-22 1.6940658945086007e-21 0.0 1.0 7.105425240018634e-15 2.0 5.364448530829927e-22 -7.105429051666896e-15 1.0 -1.4210858103333793e-14 0.0 0.0 0.0 1.0 0.9999999403953552 -8.881784197001252e-16 -5.579573312571159e-16 -1.7763568394002505e-15 -8.881784197001252e-16 1.0 3.1086244689504383e-15 2.0 -5.579571194988791e-16 -3.774758283725532e-15 0.9999999403953552 -7.549516567451064e-15 0.0 0.0 0.0 1.0 0.9999999403953552 8.881784197001252e-16 -6.462154115039354e-16 1.7763568394002505e-15 1.7763568394002505e-15 1.0 1.7763568394002505e-15 2.0 -6.462157291412906e-16 8.881784197001252e-16 0.9999999403953552 1.7763568394002505e-15 0.0 0.0 0.0 1.0 1.0 8.881784197001252e-16 2.9802322387695312e-08 1.7763568394002505e-15 1.7763568394002505e-15 1.0 -3.552713678800501e-15 2.0 -2.9802322387695312e-08 -5.329070518200751e-15 1.0 -1.0658141036401503e-14 0.0 0.0 0.0 1.0 1.0 -8.881784197001252e-16 -2.101767204219329e-16 -1.7763568394002505e-15 0.0 1.0 4.440892098500626e-16 2.0 -2.101765748381451e-16 -4.440892098500626e-16 1.0 -8.881784197001252e-16 0.0 0.0 0.0 1.0 1.0 0.0 -3.81167065240496e-36 0.0 0.0 1.0 0.0 2.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 2.7755575615628914e-17 -1.699426852058557e-17 5.551115123125783e-17 0.0 1.0 -6.661338147750939e-15 2.0 -1.699427182930802e-17 7.549516567451064e-15 1.0 1.509903313490213e-14 0.0 0.0 0.0 1.0 1.0 3.9968028886505635e-15 -2.9802322387695312e-08 7.993605777301127e-15 3.552713678800501e-15 1.0 -7.105427357601002e-15 2.0 2.9802322387695312e-08 -5.329070518200751e-15 1.0 -1.0658141036401503e-14 0.0 0.0 0.0 1.0 1.0 -1.7763568394002505e-15 -6.745567104025907e-16 -3.552713678800501e-15 0.0 1.0 -7.105427357601002e-15 2.0 -6.745576103750971e-16 -3.552713678800501e-15 1.0000001192092896 -7.105427357601002e-15 0.0 0.0 0.0 1.0 1.0 -1.7763568394002505e-15 -1.7359223452345271e-15 -3.552713678800501e-15 -1.7763568394002505e-15 1.0 -1.7763568394002505e-15 2.0 -1.7359214982015799e-15 -2.6645352591003757e-15 1.0 -5.329070518200751e-15 0.0 0.0 0.0 1.0 1.0 -8.470329472543003e-22 -3.0705321476589955e-22 -1.6940658945086007e-21 8.470329472543003e-22 1.0 7.105425240018634e-15 2.0 -5.364448025958947e-22 -7.105429051666896e-15 1.0 -1.4210858103333793e-14 0.0 0.0 0.0 1.0 0.9999999403953552 -1.7763568394002505e-15 -1.4652425907858116e-15 -3.552713678800501e-15 8.881784197001252e-16 1.0 1.7763568394002505e-15 2.0 -1.4652424849066932e-15 2.220446049250313e-15 0.9999999403953552 4.440892098500626e-15 0.0 0.0 0.0 1.0 1.0 1.7763568394002505e-15 -4.434845130290178e-15 3.552713678800501e-15 1.7763568394002505e-15 1.0 1.7763568394002505e-15 2.0 -4.434845553806651e-15 -7.105427357601002e-15 1.0 -1.4210854715202004e-14 0.0 0.0 0.0 1.0 1.0 0.0 2.9802315282267955e-08 0.0 -1.7763568394002505e-15 1.0 0.0 2.0 -2.980232949312267e-08 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 -8.881784197001252e-16 -8.063171746226176e-15 -1.7763568394002505e-15 -1.3322676295501878e-15 1.0 -6.217248937900877e-15 2.0 -8.063172593259123e-15 7.105427357601002e-15 1.0 1.4210854715202004e-14 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 2.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 </float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-21-transform-output-array" count="21" stride="16">
|
||||||
|
<param name="TRANSFORM" type="float4x4"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-anim-21-interpolation-output">
|
||||||
|
<Name_array id="id-anim-21-interpolation-output-array" count="21"> LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-21-interpolation-output-array" count="21" stride="1">
|
||||||
|
<param name="INTERPOLATION" type="Name"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<sampler id="id-anim-21-sampler">
|
||||||
|
<input semantic="INPUT" source="#id-anim-21-input"/>
|
||||||
|
<input semantic="OUTPUT" source="#id-anim-21-transform-output"/>
|
||||||
|
<input semantic="INTERPOLATION" source="#id-anim-21-interpolation-output"/>
|
||||||
|
</sampler>
|
||||||
|
<channel source="#id-anim-21-sampler" target="id-bone-4/transform"/>
|
||||||
|
</animation>
|
||||||
|
<animation id="id-anim-22">
|
||||||
|
<source id="id-anim-22-input">
|
||||||
|
<float_array id="id-anim-22-input-array" count="21"> 0.0 0.041666666666666664 0.08333333333333333 0.125 0.16666666666666666 0.20833333333333331 0.25 0.29166666666666663 0.3333333333333333 0.375 0.41666666666666663 0.4583333333333333 0.5 0.5416666666666666 0.5833333333333333 0.625 0.6666666666666666 0.7083333333333333 0.75 0.7916666666666666 0.8333333333333333</float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-22-input-array" count="21" stride="1">
|
||||||
|
<param name="TIME" type="float"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-anim-22-transform-output">
|
||||||
|
<float_array id="id-anim-22-transform-output-array" count="336"> 1.0 -2.2799733224976824e-14 3.019916050561733e-07 0.0 2.2799733224976824e-14 1.0 0.0 2.0 -3.019916050561733e-07 0.0 1.0 7.105427357601002e-15 0.0 0.0 0.0 1.0 1.0 -2.259762777563016e-14 2.980232238769531e-07 -4.440892098500626e-16 2.353475622935211e-14 1.0 -7.0636156937421615e-15 2.0 -2.980232238769531e-07 -2.137084242955097e-15 1.0 -7.105427357601002e-15 0.0 0.0 0.0 1.0 1.0 -2.1386826364782133e-14 2.980232238769531e-07 -3.552713678800501e-15 2.4868995751603507e-14 1.0 -7.105427357601002e-15 2.0 -2.980232238769531e-07 -8.02984692898235e-16 1.0 -7.105427357601002e-15 0.0 0.0 0.0 1.0 1.0 -2.149046931620817e-14 2.980232238769531e-07 -7.105427357601002e-15 2.1316282072803006e-14 1.0 0.0 2.0 -2.980232238769531e-07 -7.275902902631297e-16 1.0 -3.552713678800501e-15 0.0 0.0 0.0 1.0 1.0 -2.3768408573786315e-14 3.2782554626464844e-07 7.105427357601002e-15 2.0733728387065282e-14 1.0 1.8745974146886987e-15 2.0 -3.2782554626464844e-07 -1.7345621162003552e-15 1.0 -7.105427357601002e-15 0.0 0.0 0.0 1.0 1.0 -2.279973153091093e-14 3.019916050561733e-07 3.3881317890172014e-21 2.2799733224976824e-14 1.0 7.1054197343044766e-15 2.0 -3.0199157663446385e-07 -7.105432439798685e-15 1.0 -2.1316288849066584e-14 0.0 0.0 0.0 1.0 1.0 -2.398081733190338e-14 2.980232238769531e-07 -2.6645352591003757e-15 2.220446049250313e-14 1.0 0.0 2.0 -2.980232238769531e-07 -3.1086244689504383e-15 1.0 -1.509903313490213e-14 0.0 0.0 0.0 1.0 1.0 -2.398081733190338e-14 2.980232238769531e-07 2.6645352591003757e-15 2.220446049250313e-14 1.0 4.440892098500626e-15 2.0 -2.980232238769531e-07 1.7763568394002505e-15 1.0 0.0 0.0 0.0 0.0 1.0 1.0000001192092896 -2.042810365310288e-14 2.980232238769531e-07 2.6645352591003757e-15 2.3092638912203256e-14 1.0 -3.552713678800501e-15 2.0 -2.980232238769531e-07 -3.552713678800501e-15 1.0000001192092896 -1.7763568394002505e-14 0.0 0.0 0.0 1.0 0.9999999403953552 -2.220446049250313e-14 2.980232238769531e-07 -3.552713678800501e-15 2.1316282072803006e-14 1.0 0.0 2.0 -2.980232238769531e-07 8.881784197001252e-16 0.9999999403953552 -5.329070518200751e-15 0.0 0.0 0.0 1.0 1.0 -2.2799733224976824e-14 3.019916050561733e-07 0.0 2.2799733224976824e-14 1.0 0.0 2.0 -3.019916050561733e-07 0.0 1.0 -7.105427357601002e-15 0.0 0.0 0.0 1.0 1.0000001192092896 -2.1288526497187377e-14 2.980232238769531e-07 1.3877787807814457e-16 2.4424906541753444e-14 1.0 -6.217248937900877e-15 2.0 -2.980232238769531e-07 8.43769498715119e-15 1.0000001192092896 3.730349362740526e-14 0.0 0.0 0.0 1.0 1.0 -1.7319479184152442e-14 2.980232238769531e-07 1.5987211554602254e-14 2.3092638912203256e-14 1.0 -3.552713678800501e-15 2.0 -2.980232238769531e-07 -1.7763568394002505e-15 1.0000001192092896 -7.105427357601002e-15 0.0 0.0 0.0 1.0 1.0 -2.3092638912203256e-14 3.2782554626464844e-07 -7.105427357601002e-15 2.042810365310288e-14 1.0 -3.552713678800501e-15 2.0 -3.2782554626464844e-07 -3.552713678800501e-15 1.0000001192092896 -2.1316282072803006e-14 0.0 0.0 0.0 1.0 0.9999999403953552 -2.1316282072803006e-14 2.980232238769531e-07 -7.105427357601002e-15 1.7763568394002505e-14 1.0 -1.7763568394002505e-15 2.0 -2.980232238769531e-07 -3.552713678800501e-15 0.9999999403953552 -3.552713678800501e-15 0.0 0.0 0.0 1.0 1.0 -2.279973491904272e-14 3.019916050561733e-07 -3.3881317890172014e-21 2.279973153091093e-14 1.0 7.105429898699844e-15 2.0 -3.019916050561733e-07 -7.105426087051581e-15 1.0 -2.8421716206667585e-14 0.0 0.0 0.0 1.0 0.9999999403953552 -2.5757174171303632e-14 3.2782554626464844e-07 -7.105427357601002e-15 2.398081733190338e-14 1.0 -1.7763568394002505e-15 2.0 -3.2782554626464844e-07 2.220446049250313e-15 0.9999999403953552 1.5987211554602254e-14 0.0 0.0 0.0 1.0 1.0000001192092896 -1.7763568394002505e-14 2.980232238769531e-07 1.0658141036401503e-14 2.1316282072803006e-14 1.0 1.7763568394002505e-15 2.0 -2.980232238769531e-07 -5.329070518200751e-15 1.0000001192092896 -2.1316282072803006e-14 0.0 0.0 0.0 1.0 1.0 -1.7763568394002505e-14 2.980232238769531e-07 7.105427357601002e-15 1.9539925233402755e-14 1.0 0.0 2.0 -2.980232238769531e-07 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 -2.220446049250313e-14 2.980232238769531e-07 -3.552713678800501e-15 1.9984014443252818e-14 1.0 -2.6645352591003757e-15 2.0 -2.980232238769531e-07 8.881784197001252e-15 1.0 2.1316282072803006e-14 0.0 0.0 0.0 1.0 1.0 -2.2799733224976824e-14 3.019916050561733e-07 -4.235164736271502e-22 2.2799733224976824e-14 1.0 1.522012327097571e-21 2.0 -3.019916050561733e-07 0.0 1.0 0.0 0.0 0.0 0.0 1.0 </float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-22-transform-output-array" count="21" stride="16">
|
||||||
|
<param name="TRANSFORM" type="float4x4"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-anim-22-interpolation-output">
|
||||||
|
<Name_array id="id-anim-22-interpolation-output-array" count="21"> LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-22-interpolation-output-array" count="21" stride="1">
|
||||||
|
<param name="INTERPOLATION" type="Name"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<sampler id="id-anim-22-sampler">
|
||||||
|
<input semantic="INPUT" source="#id-anim-22-input"/>
|
||||||
|
<input semantic="OUTPUT" source="#id-anim-22-transform-output"/>
|
||||||
|
<input semantic="INTERPOLATION" source="#id-anim-22-interpolation-output"/>
|
||||||
|
</sampler>
|
||||||
|
<channel source="#id-anim-22-sampler" target="id-bone-5/transform"/>
|
||||||
|
</animation>
|
||||||
|
<animation id="id-anim-23">
|
||||||
|
<source id="id-anim-23-input">
|
||||||
|
<float_array id="id-anim-23-input-array" count="21"> 0.0 0.041666666666666664 0.08333333333333333 0.125 0.16666666666666666 0.20833333333333331 0.25 0.29166666666666663 0.3333333333333333 0.375 0.41666666666666663 0.4583333333333333 0.5 0.5416666666666666 0.5833333333333333 0.625 0.6666666666666666 0.7083333333333333 0.75 0.7916666666666666 0.8333333333333333</float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-23-input-array" count="21" stride="1">
|
||||||
|
<param name="TIME" type="float"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-anim-23-transform-output">
|
||||||
|
<float_array id="id-anim-23-transform-output-array" count="336"> 1.0 2.2799733224976824e-14 -3.019916050561733e-07 -3.3881317890172014e-21 -2.2799733224976824e-14 1.0 0.0 2.0 3.019916050561733e-07 0.0 1.0 -2.8421722982931164e-14 0.0 0.0 0.0 1.0 1.0 2.2648549702353193e-14 -2.980232238769531e-07 4.542739340078483e-15 -2.2105826893927157e-14 1.0 -2.0905738755796002e-15 1.999999761581421 2.980232238769531e-07 0.0 1.0 -6.111760132276184e-14 0.0 0.0 0.0 1.0 1.0 2.309263721813736e-14 -2.980232238769531e-07 -3.693798874626966e-15 -1.976926787420133e-14 1.0 -7.972451129443451e-15 2.0 2.980232238769531e-07 -6.352747104407253e-22 1.0 1.9710300828545274e-14 0.0 0.0 0.0 1.0 1.0 2.1316276990605322e-14 -2.980232238769531e-07 -2.5217366850282044e-14 -2.0453407915369155e-14 1.0 3.6245386845958766e-16 1.999999761581421 2.980232238769531e-07 -4.910144116114772e-21 1.0 1.2755667358412166e-14 0.0 0.0 0.0 1.0 1.0 1.4210852174103162e-14 -2.980232238769531e-07 -5.464224111704184e-14 -1.770618360589192e-14 1.0 -2.963268533003917e-15 2.0 2.980232238769531e-07 -1.776363192147355e-15 1.0 -8.798196444667356e-15 0.0 0.0 0.0 1.0 1.0 2.279973491904272e-14 -3.0199157663446385e-07 -2.0328790734103208e-20 -2.279973153091093e-14 1.0 7.105421851886845e-15 1.999999761581421 3.019916050561733e-07 -7.105433286831633e-15 1.0 -1.4210912313442417e-14 0.0 0.0 0.0 1.0 1.0 2.4868995751603507e-14 -2.980232238769531e-07 1.5987211554602254e-14 -2.4868995751603507e-14 1.0 3.3306690738754696e-15 1.999999761581421 2.980232238769531e-07 4.440892098500626e-16 1.0 -3.552713678800501e-15 0.0 0.0 0.0 1.0 1.0 2.220446049250313e-14 -2.980232238769531e-07 -4.440892098500626e-15 -2.3092638912203256e-14 1.0 8.881784197001252e-16 2.000000238418579 2.980232238769531e-07 -3.552713678800501e-15 1.0 2.1316282072803006e-14 0.0 0.0 0.0 1.0 1.0000001192092896 2.220446049250313e-14 -2.980232238769531e-07 1.3322676295501878e-14 -2.3092638912203256e-14 1.0 0.0 1.999999761581421 2.980232238769531e-07 -1.7763568394002505e-15 1.0000001192092896 -1.0658141036401503e-14 0.0 0.0 0.0 1.0 1.0 2.0872192862952943e-14 -2.980232238769531e-07 1.3322676295501878e-15 -2.220446049250313e-14 1.0 3.552713678800501e-15 2.000000238418579 2.980232238769531e-07 -3.1086244689504383e-15 1.0 -2.3092638912203256e-14 0.0 0.0 0.0 1.0 1.0 2.2799733224976824e-14 -3.019916050561733e-07 -1.0164395367051604e-20 -2.2799733224976824e-14 1.0 0.0 2.0 3.019916050561733e-07 0.0 1.0 2.842169587787685e-14 0.0 0.0 0.0 1.0 1.0 2.3148150063434514e-14 -3.2782554626464844e-07 5.6066262743570405e-15 -2.1316282072803006e-14 1.0 -5.329070518200751e-15 2.0 3.2782554626464844e-07 -5.329070518200751e-15 1.0 -7.105427357601002e-15 0.0 0.0 0.0 1.0 1.0 2.1760371282653068e-14 -2.980232238769531e-07 9.325873406851315e-15 -1.7763568394002505e-14 1.0 -7.105427357601002e-15 2.000000238418579 2.980232238769531e-07 -8.881784197001252e-15 1.0000001192092896 -7.105427357601002e-14 0.0 0.0 0.0 1.0 1.0 2.3092638912203256e-14 -2.682209014892578e-07 -5.329070518200751e-15 -2.4868995751603507e-14 1.0 -1.4210854715202004e-14 1.999999761581421 2.682209014892578e-07 0.0 1.0000001192092896 -3.552713678800501e-14 0.0 0.0 0.0 1.0 0.9999999403953552 2.1316282072803006e-14 -2.980232238769531e-07 3.552713678800501e-15 -2.3092638912203256e-14 1.0 4.440892098500626e-15 2.0 2.980232238769531e-07 -4.440892098500626e-15 0.9999999403953552 -4.263256414560601e-14 0.0 0.0 0.0 1.0 1.0 2.2799733224976824e-14 -3.019916050561733e-07 -1.6940658945086007e-21 -2.2799733224976824e-14 1.0 7.105428204633949e-15 1.999999761581421 3.0199157663446385e-07 -7.10542481650216e-15 1.0 -2.842170265414043e-14 0.0 0.0 0.0 1.0 0.9999999403953552 1.9539925233402755e-14 -2.980232238769531e-07 -1.4210854715202004e-14 -2.5757174171303632e-14 1.0 9.325873406851315e-15 2.000000238418579 2.980232238769531e-07 -1.7763568394002505e-15 0.9999999403953552 1.2434497875801753e-14 0.0 0.0 0.0 1.0 1.0000001192092896 2.842170943040401e-14 -2.980232238769531e-07 2.1316282072803006e-14 -2.4868995751603507e-14 1.0 -3.552713678800501e-15 2.0 2.980232238769531e-07 -1.7763568394002505e-15 1.0000001192092896 -7.105427357601002e-14 0.0 0.0 0.0 1.0 0.9999999403953552 2.3092638912203256e-14 -2.980232238769531e-07 0.0 -1.7763568394002505e-14 1.0 0.0 2.000000238418579 2.980232238769531e-07 0.0 0.9999999403953552 0.0 0.0 0.0 0.0 1.0 1.0 1.9984014443252818e-14 -2.905726432800293e-07 7.105427357601002e-14 -2.2648549702353193e-14 1.0 -4.440892098500626e-15 1.999999761581421 2.905726432800293e-07 3.552713678800501e-15 1.0 2.1316282072803006e-14 0.0 0.0 0.0 1.0 1.0 2.2799733224976824e-14 -3.019916050561733e-07 8.470329472543003e-21 -2.2799733224976824e-14 1.0 0.0 2.0 3.019916050561733e-07 1.522012327097571e-21 1.0 -4.658681209898652e-21 0.0 0.0 0.0 1.0 </float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-23-transform-output-array" count="21" stride="16">
|
||||||
|
<param name="TRANSFORM" type="float4x4"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-anim-23-interpolation-output">
|
||||||
|
<Name_array id="id-anim-23-interpolation-output-array" count="21"> LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-23-interpolation-output-array" count="21" stride="1">
|
||||||
|
<param name="INTERPOLATION" type="Name"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<sampler id="id-anim-23-sampler">
|
||||||
|
<input semantic="INPUT" source="#id-anim-23-input"/>
|
||||||
|
<input semantic="OUTPUT" source="#id-anim-23-transform-output"/>
|
||||||
|
<input semantic="INTERPOLATION" source="#id-anim-23-interpolation-output"/>
|
||||||
|
</sampler>
|
||||||
|
<channel source="#id-anim-23-sampler" target="id-bone-6/transform"/>
|
||||||
|
</animation>
|
||||||
|
<animation id="id-anim-24">
|
||||||
|
<source id="id-anim-24-input">
|
||||||
|
<float_array id="id-anim-24-input-array" count="21"> 0.0 0.041666666666666664 0.08333333333333333 0.125 0.16666666666666666 0.20833333333333331 0.25 0.29166666666666663 0.3333333333333333 0.375 0.41666666666666663 0.4583333333333333 0.5 0.5416666666666666 0.5833333333333333 0.625 0.6666666666666666 0.7083333333333333 0.75 0.7916666666666666 0.8333333333333333</float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-24-input-array" count="21" stride="1">
|
||||||
|
<param name="TIME" type="float"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-anim-24-transform-output">
|
||||||
|
<float_array id="id-anim-24-transform-output-array" count="336"> 1.0 0.0 0.0 0.0 0.0 7.549790126404332e-08 -1.0 0.0 0.0 1.0 7.549790126404332e-08 -1.0 0.0 0.0 0.0 1.0 0.9955579042434692 0.0 0.0941510796546936 0.0 0.0941510796546936 7.549790126404332e-08 -0.9955579042434692 0.0 -7.108209132411503e-09 1.0 7.516253219819191e-08 -1.0 0.0 0.0 0.0 1.0 0.9274256825447083 0.0 0.37400758266448975 0.0 0.37400758266448975 7.549790126404332e-08 -0.9274256825447083 0.0 -2.8236787130708763e-08 1.0 7.001869306577646e-08 -1.0 0.0 0.0 0.0 1.0 0.6892805695533752 0.0 0.7244945168495178 0.0 0.7244945168495178 7.549790126404332e-08 -0.6892805695533752 0.0 -5.469781427791531e-08 1.0 5.2039236919654286e-08 -1.0 0.0 0.0 0.0 1.0 0.327949196100235 0.0 0.9446954131126404 0.0 0.9446954131126404 7.549790126404332e-08 -0.327949196100235 0.0 -7.132251766961417e-08 1.0 2.4759476247027123e-08 -1.0 0.0 0.0 0.0 1.0 -1.3435885648505064e-07 -7.549791547489804e-08 1.0000001192092896 0.0 1.0000001192092896 -1.4210854715202004e-14 1.3435885648505064e-07 0.0 7.105427357601002e-15 1.0 7.549790836947068e-08 -1.0 0.0 0.0 0.0 1.0 -0.2926259934902191 -6.342676073245457e-08 0.9562267661094666 0.0 0.9562267661094666 -1.0242303005725262e-08 0.2926259934902191 0.0 -8.766356529577024e-09 1.0 6.364755478216466e-08 -1.0 0.0 0.0 0.0 1.0 -0.580210268497467 -4.877818682302859e-08 0.8144668340682983 0.0 0.8144668340682983 -1.914044389650371e-08 0.580210268497467 0.0 -1.2712352059907062e-08 1.0 5.0833687481599554e-08 -1.0 0.0 0.0 0.0 1.0 -0.8144670128822327 -3.242801938085904e-08 0.5802100896835327 0.0 0.5802100896835327 -2.5912903822700173e-08 0.8144670128822327 0.0 -1.1376624087233722e-08 1.0 3.9920251992953126e-08 -1.0 0.0 0.0 0.0 1.0 -0.9562267661094666 -1.5777985140630335e-08 0.29262611269950867 0.0 0.29262611269950867 -2.997906989321564e-08 0.9562267661094666 0.0 -6.314671452400944e-09 1.0 3.3283853895227367e-08 -1.0 0.0 0.0 0.0 1.0 -1.0 4.303330901289246e-22 -5.699934153277153e-15 0.0 -5.699934153277153e-15 -7.549791547489804e-08 1.0 0.0 0.0 1.0 7.549791547489804e-08 -1.0 0.0 0.0 0.0 1.0 -0.9562270045280457 2.2313441760957176e-08 -0.29262617230415344 0.0 -0.29262617230415344 -7.366906373817983e-08 0.9562270045280457 0.0 -2.2077983885537833e-10 1.0 7.697383352933684e-08 -1.0 0.0 0.0 0.0 1.0 -0.8144670128822327 4.5860144126663727e-08 -0.5802100896835327 0.0 -0.5802100896835327 -6.791864137767334e-08 0.8144670128822327 0.0 -2.0555006585709634e-09 1.0 8.192598954792629e-08 -1.0 0.0 0.0 0.0 1.0 -0.580210268497467 6.89827786004571e-08 -0.8144668936729431 0.0 -0.8144668936729431 -5.8340923203559214e-08 0.580210268497467 0.0 -7.492239717521443e-09 1.0 9.003416323594138e-08 -1.0 0.0 0.0 0.0 1.0 -0.29262620210647583 8.969897891120127e-08 -0.9562268257141113 0.0 -0.9562268257141113 -4.575706924470069e-08 0.29262620210647583 0.0 -1.7505861649169674e-08 1.0 9.916230681028537e-08 -1.0 0.0 0.0 0.0 1.0 -1.3435885648505064e-07 7.549790836947068e-08 -1.0000001192092896 0.0 -1.0000001192092896 -1.4210854715202004e-14 1.3435885648505064e-07 0.0 -7.105427357601002e-15 1.0 7.549790126404332e-08 -1.0 0.0 0.0 0.0 1.0 0.327949196100235 8.808321183551016e-08 -0.9446954727172852 0.0 -0.9446954727172852 1.283601136492507e-08 -0.327949196100235 0.0 -1.6760694165895984e-08 1.0 8.742135548800434e-08 -1.0 0.0 0.0 0.0 1.0 0.68928062915802 1.0117053506064622e-07 -0.7244945168495178 0.0 -0.7244945168495178 3.2108129488506165e-08 -0.68928062915802 0.0 -4.647272788815826e-08 1.0 9.542900158976408e-08 -1.0 0.0 0.0 0.0 1.0 0.9274256229400635 1.0772405545367292e-07 -0.37400758266448975 0.0 -0.37400758266448975 5.4594561760268334e-08 -0.9274256229400635 0.0 -7.948726477025048e-08 1.0 9.092201480598305e-08 -1.0 0.0 0.0 0.0 1.0 0.9955579042434692 1.0759762147927177e-07 -0.0941511020064354 0.0 -0.0941511020064354 7.042140026669585e-08 -0.9955579042434692 0.0 -1.0048940879414658e-07 1.0 8.023901898468466e-08 -1.0 0.0 0.0 0.0 1.0 1.0 5.024294934767972e-15 3.7932372841020008e-22 0.0 5.048709793414476e-29 7.549789415861596e-08 -1.0 0.0 -5.024294934767972e-15 1.0 7.549789415861596e-08 -1.0 0.0 0.0 0.0 1.0 </float_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-24-transform-output-array" count="21" stride="16">
|
||||||
|
<param name="TRANSFORM" type="float4x4"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<source id="id-anim-24-interpolation-output">
|
||||||
|
<Name_array id="id-anim-24-interpolation-output-array" count="21"> LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR LINEAR</Name_array>
|
||||||
|
<technique_common>
|
||||||
|
<accessor source="#id-anim-24-interpolation-output-array" count="21" stride="1">
|
||||||
|
<param name="INTERPOLATION" type="Name"/>
|
||||||
|
</accessor>
|
||||||
|
</technique_common>
|
||||||
|
</source>
|
||||||
|
<sampler id="id-anim-24-sampler">
|
||||||
|
<input semantic="INPUT" source="#id-anim-24-input"/>
|
||||||
|
<input semantic="OUTPUT" source="#id-anim-24-transform-output"/>
|
||||||
|
<input semantic="INTERPOLATION" source="#id-anim-24-interpolation-output"/>
|
||||||
|
</sampler>
|
||||||
|
<channel source="#id-anim-24-sampler" target="id-bone-3/transform"/>
|
||||||
|
</animation>
|
||||||
|
</library_animations>
|
||||||
|
<scene>
|
||||||
|
<instance_visual_scene url="#id-scene-1" />
|
||||||
|
</scene>
|
||||||
|
</COLLADA>
|
|
@ -0,0 +1,28 @@
|
||||||
|
# Vertices: 8
|
||||||
|
# Points: 0
|
||||||
|
# Lines: 0
|
||||||
|
# Faces: 6
|
||||||
|
# Materials: 1
|
||||||
|
|
||||||
|
o 1
|
||||||
|
|
||||||
|
# Vertex list
|
||||||
|
|
||||||
|
v -0.5 -0.5 0.5
|
||||||
|
v -0.5 -0.5 -0.5
|
||||||
|
v -0.5 0.5 -0.5
|
||||||
|
v -0.5 0.5 0.5
|
||||||
|
v 0.5 -0.5 0.5
|
||||||
|
v 0.5 -0.5 -0.5
|
||||||
|
v 0.5 0.5 -0.5
|
||||||
|
v 0.5 0.5 0.5
|
||||||
|
|
||||||
|
# Point/Line/Face list
|
||||||
|
|
||||||
|
usemtl Default
|
||||||
|
f 4 3 2 1
|
||||||
|
f 2 6 5 1
|
||||||
|
f 3 7 6 2
|
||||||
|
f 8 7 3 4
|
||||||
|
f 5 8 4 1
|
||||||
|
f 6 7 8 5
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
@ -54,7 +54,6 @@ public:
|
||||||
{
|
{
|
||||||
ex = new Assimp::Exporter();
|
ex = new Assimp::Exporter();
|
||||||
im = new Assimp::Importer();
|
im = new Assimp::Importer();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void TearDown()
|
virtual void TearDown()
|
||||||
|
@ -73,7 +72,7 @@ protected:
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
TEST_F(ColladaExportLight, testExportLight)
|
TEST_F(ColladaExportLight, testExportLight)
|
||||||
{
|
{
|
||||||
const char* file = "cameraExp.dae";
|
const char* file = "lightsExp.dae";
|
||||||
|
|
||||||
const aiScene* pTest = im->ReadFile(ASSIMP_TEST_MODELS_DIR "/Collada/lights.dae",0);
|
const aiScene* pTest = im->ReadFile(ASSIMP_TEST_MODELS_DIR "/Collada/lights.dae",0);
|
||||||
ASSERT_TRUE(pTest!=NULL);
|
ASSERT_TRUE(pTest!=NULL);
|
||||||
|
@ -88,7 +87,6 @@ TEST_F(ColladaExportLight, testExportLight)
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPECT_EQ(AI_SUCCESS,ex->Export(pTest,"collada",file));
|
EXPECT_EQ(AI_SUCCESS,ex->Export(pTest,"collada",file));
|
||||||
EXPECT_EQ(AI_SUCCESS,ex->Export(pTest,"collada","lightsExp.dae"));
|
|
||||||
|
|
||||||
const aiScene* imported = im->ReadFile(file,0);
|
const aiScene* imported = im->ReadFile(file,0);
|
||||||
|
|
||||||
|
@ -123,7 +121,9 @@ TEST_F(ColladaExportLight, testExportLight)
|
||||||
EXPECT_NEAR(orig->mAngleInnerCone,read->mAngleInnerCone,0.001);
|
EXPECT_NEAR(orig->mAngleInnerCone,read->mAngleInnerCone,0.001);
|
||||||
EXPECT_NEAR(orig->mAngleOuterCone,read->mAngleOuterCone,0.001);
|
EXPECT_NEAR(orig->mAngleOuterCone,read->mAngleOuterCone,0.001);
|
||||||
}
|
}
|
||||||
|
|
||||||
delete [] origLights;
|
delete [] origLights;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,109 @@
|
||||||
|
/*
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
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.
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
#include "UnitTestPCH.h"
|
||||||
|
|
||||||
|
#include <assimp/scene.h>
|
||||||
|
#include <assimp/Importer.hpp>
|
||||||
|
#include <assimp/Exporter.hpp>
|
||||||
|
|
||||||
|
using namespace Assimp;
|
||||||
|
|
||||||
|
class utIssues : public ::testing::Test {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifndef ASSIMP_BUILD_NO_EXPORT
|
||||||
|
|
||||||
|
TEST_F( utIssues, OpacityBugWhenExporting_727 ) {
|
||||||
|
aiScene *scene( new aiScene );
|
||||||
|
|
||||||
|
scene->mNumMaterials = 1;
|
||||||
|
scene->mMaterials = new aiMaterial*;
|
||||||
|
scene->mMaterials[ 0 ] = new aiMaterial;
|
||||||
|
aiColor3D color( 1, 0, 0 );
|
||||||
|
EXPECT_EQ( AI_SUCCESS, scene->mMaterials[ 0 ]->AddProperty( &color, 1, AI_MATKEY_COLOR_DIFFUSE ) );
|
||||||
|
|
||||||
|
::srand( static_cast<unsigned int>( ::time( NULL ) ) );
|
||||||
|
float opacity( float( rand() ) / float( RAND_MAX ) );
|
||||||
|
EXPECT_EQ( AI_SUCCESS, scene->mMaterials[ 0 ]->AddProperty( &opacity, 1, AI_MATKEY_OPACITY ) );
|
||||||
|
|
||||||
|
scene->mNumMeshes = 1;
|
||||||
|
scene->mMeshes = new aiMesh*;
|
||||||
|
scene->mMeshes[ 0 ] = new aiMesh;
|
||||||
|
scene->mMeshes[ 0 ]->mMaterialIndex = 0;
|
||||||
|
scene->mMeshes[ 0 ]->mPrimitiveTypes = aiPrimitiveType_TRIANGLE;
|
||||||
|
scene->mMeshes[ 0 ]->mNumVertices = 3;
|
||||||
|
scene->mMeshes[ 0 ]->mVertices = new aiVector3D[ 3 ];
|
||||||
|
scene->mMeshes[ 0 ]->mVertices[ 0 ] = aiVector3D( 1, 0, 0 );
|
||||||
|
scene->mMeshes[ 0 ]->mVertices[ 1 ] = aiVector3D( 0, 1, 0 );
|
||||||
|
scene->mMeshes[ 0 ]->mVertices[ 2 ] = aiVector3D( 0, 0, 1 );
|
||||||
|
scene->mMeshes[ 0 ]->mNumFaces = 1;
|
||||||
|
scene->mMeshes[ 0 ]->mFaces = new aiFace;
|
||||||
|
scene->mMeshes[ 0 ]->mFaces[ 0 ].mNumIndices = 3;
|
||||||
|
scene->mMeshes[ 0 ]->mFaces[ 0 ].mIndices = new unsigned int[ 3 ];
|
||||||
|
scene->mMeshes[ 0 ]->mFaces[ 0 ].mIndices[ 0 ] = 0;
|
||||||
|
scene->mMeshes[ 0 ]->mFaces[ 0 ].mIndices[ 1 ] = 1;
|
||||||
|
scene->mMeshes[ 0 ]->mFaces[ 0 ].mIndices[ 2 ] = 2;
|
||||||
|
|
||||||
|
scene->mRootNode = new aiNode;
|
||||||
|
scene->mRootNode->mNumMeshes = 1;
|
||||||
|
scene->mRootNode->mMeshes = new unsigned int( 0 );
|
||||||
|
|
||||||
|
Assimp::Importer importer;
|
||||||
|
Assimp::Exporter exporter;
|
||||||
|
for ( std::size_t i( 0 ); i < exporter.GetExportFormatCount(); ++i ) {
|
||||||
|
/*const aiExportFormatDesc *desc( exporter.GetExportFormatDescription( i ) );
|
||||||
|
std::cout << "[" << desc->id << "] ";
|
||||||
|
std::string path( "scene." );
|
||||||
|
path.append( desc->fileExtension );
|
||||||
|
|
||||||
|
ASSERT_EQ( AI_SUCCESS, exporter.Export( scene, desc->id, path ) );
|
||||||
|
const aiScene *newScene( importer.ReadFile( path, 0 ) );
|
||||||
|
ASSERT_TRUE( NULL != newScene );
|
||||||
|
float newOpacity;
|
||||||
|
if ( newScene->mNumMaterials > 0 ) {
|
||||||
|
//ASSERT_EQ( AI_SUCCESS, newScene->mMaterials[ 0 ]->Get( AI_MATKEY_OPACITY, newOpacity ) );
|
||||||
|
//EXPECT_EQ( opacity, newOpacity );
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // ASSIMP_BUILD_NO_EXPORT
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,99 @@
|
||||||
|
/*
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
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.
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "UnitTestPCH.h"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
using namespace Assimp;
|
||||||
|
|
||||||
|
class utMatrix3x3Test : public ::testing::Test {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
TEST_F( utMatrix3x3Test, FromToMatrixTest ) {
|
||||||
|
aiVector3D res;
|
||||||
|
aiMatrix3x3 trafo;
|
||||||
|
|
||||||
|
const double PRECISION = 0.000001;
|
||||||
|
|
||||||
|
// axes test
|
||||||
|
aiVector3D axes[] =
|
||||||
|
{ aiVector3D(1, 0, 0)
|
||||||
|
, aiVector3D(0, 1, 0)
|
||||||
|
, aiVector3D(0, 0, 1)
|
||||||
|
};
|
||||||
|
|
||||||
|
for (int i = 0; i < 3; ++i) {
|
||||||
|
for (int j = 0; j < 3; ++j) {
|
||||||
|
aiMatrix3x3::FromToMatrix( axes[i], axes[j], trafo );
|
||||||
|
res = trafo * axes[i];
|
||||||
|
|
||||||
|
ASSERT_NEAR( axes[j].x, res.x, PRECISION );
|
||||||
|
ASSERT_NEAR( axes[j].y, res.y, PRECISION );
|
||||||
|
ASSERT_NEAR( axes[j].z, res.z, PRECISION );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// random test
|
||||||
|
const int NUM_SAMPLES = 10000;
|
||||||
|
|
||||||
|
aiVector3D from, to;
|
||||||
|
|
||||||
|
for (int i = 0; i < NUM_SAMPLES; ++i) {
|
||||||
|
from = aiVector3D
|
||||||
|
( 1.f * rand() / RAND_MAX
|
||||||
|
, 1.f * rand() / RAND_MAX
|
||||||
|
, 1.f * rand() / RAND_MAX
|
||||||
|
).Normalize();
|
||||||
|
to = aiVector3D
|
||||||
|
( 1.f * rand() / RAND_MAX
|
||||||
|
, 1.f * rand() / RAND_MAX
|
||||||
|
, 1.f * rand() / RAND_MAX
|
||||||
|
).Normalize();
|
||||||
|
|
||||||
|
aiMatrix3x3::FromToMatrix( from, to, trafo );
|
||||||
|
res = trafo * from;
|
||||||
|
|
||||||
|
ASSERT_NEAR( to.x, res.x, PRECISION );
|
||||||
|
ASSERT_NEAR( to.y, res.y, PRECISION );
|
||||||
|
ASSERT_NEAR( to.z, res.z, PRECISION );
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
@ -76,7 +76,8 @@ TEST(NoBoostTest, Tuple) {
|
||||||
EXPECT_EQ(4U, first.get<1>());
|
EXPECT_EQ(4U, first.get<1>());
|
||||||
EXPECT_EQ(4U, first.get<2>());
|
EXPECT_EQ(4U, first.get<2>());
|
||||||
|
|
||||||
boost::tuple<int, float, double, bool, another> second;
|
boost::tuple<int, float, double, bool, another> second=
|
||||||
|
boost::make_tuple(1,1.0f,0.0,false,another());
|
||||||
bool b = second.get<3>();
|
bool b = second.get<3>();
|
||||||
|
|
||||||
// check empty tuple
|
// check empty tuple
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
@ -60,7 +60,6 @@ protected:
|
||||||
RemoveRedundantMatsProcess* piProcess;
|
RemoveRedundantMatsProcess* piProcess;
|
||||||
|
|
||||||
aiScene* pcScene1;
|
aiScene* pcScene1;
|
||||||
aiScene* pcScene2;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
@ -59,28 +59,16 @@ protected:
|
||||||
SharedPostProcessInfo* shared;
|
SharedPostProcessInfo* shared;
|
||||||
};
|
};
|
||||||
|
|
||||||
static bool destructed;
|
|
||||||
|
|
||||||
struct TestType
|
|
||||||
{
|
|
||||||
~TestType()
|
|
||||||
{
|
|
||||||
destructed = true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void SharedPPDataTest::SetUp()
|
void SharedPPDataTest::SetUp()
|
||||||
{
|
{
|
||||||
shared = new SharedPostProcessInfo();
|
shared = new SharedPostProcessInfo();
|
||||||
destructed = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void SharedPPDataTest::TearDown()
|
void SharedPPDataTest::TearDown()
|
||||||
{
|
{
|
||||||
|
delete shared;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
@ -112,14 +100,26 @@ TEST_F(SharedPPDataTest, testPropertyPointer)
|
||||||
EXPECT_FALSE(shared->GetProperty("test16",o));
|
EXPECT_FALSE(shared->GetProperty("test16",o));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool destructed;
|
||||||
|
|
||||||
|
struct TestType
|
||||||
|
{
|
||||||
|
~TestType()
|
||||||
|
{
|
||||||
|
destructed = true;
|
||||||
|
}
|
||||||
|
};
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
TEST_F(SharedPPDataTest, testPropertyDeallocation)
|
TEST_F(SharedPPDataTest, testPropertyDeallocation)
|
||||||
{
|
{
|
||||||
|
SharedPostProcessInfo* localShared = new SharedPostProcessInfo();
|
||||||
|
destructed = false;
|
||||||
|
|
||||||
TestType *out, * pip = new TestType();
|
TestType *out, * pip = new TestType();
|
||||||
shared->AddProperty("quak",pip);
|
localShared->AddProperty("quak",pip);
|
||||||
EXPECT_TRUE(shared->GetProperty("quak",out));
|
EXPECT_TRUE(localShared->GetProperty("quak",out));
|
||||||
EXPECT_EQ(pip, out);
|
EXPECT_EQ(pip, out);
|
||||||
|
|
||||||
delete shared;
|
delete localShared;
|
||||||
EXPECT_TRUE(destructed);
|
EXPECT_TRUE(destructed);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
@ -58,8 +58,7 @@ protected:
|
||||||
|
|
||||||
SplitLargeMeshesProcess_Triangle* piProcessTriangle;
|
SplitLargeMeshesProcess_Triangle* piProcessTriangle;
|
||||||
SplitLargeMeshesProcess_Vertex* piProcessVertex;
|
SplitLargeMeshesProcess_Vertex* piProcessVertex;
|
||||||
aiMesh* pcMesh1;
|
|
||||||
aiMesh* pcMesh2;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
@ -72,7 +71,21 @@ void SplitLargeMeshesTest::SetUp()
|
||||||
this->piProcessTriangle->SetLimit(1000);
|
this->piProcessTriangle->SetLimit(1000);
|
||||||
this->piProcessVertex->SetLimit(1000);
|
this->piProcessVertex->SetLimit(1000);
|
||||||
|
|
||||||
this->pcMesh1 = new aiMesh();
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
void SplitLargeMeshesTest::TearDown()
|
||||||
|
{
|
||||||
|
delete this->piProcessTriangle;
|
||||||
|
delete this->piProcessVertex;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
TEST_F(SplitLargeMeshesTest, testVertexSplit)
|
||||||
|
{
|
||||||
|
std::vector< std::pair<aiMesh*, unsigned int> > avOut;
|
||||||
|
|
||||||
|
aiMesh *pcMesh1 = new aiMesh();
|
||||||
pcMesh1->mNumVertices = 2100; // quersumme: 3
|
pcMesh1->mNumVertices = 2100; // quersumme: 3
|
||||||
pcMesh1->mVertices = new aiVector3D[pcMesh1->mNumVertices];
|
pcMesh1->mVertices = new aiVector3D[pcMesh1->mNumVertices];
|
||||||
pcMesh1->mNormals = new aiVector3D[pcMesh1->mNumVertices];
|
pcMesh1->mNormals = new aiVector3D[pcMesh1->mNumVertices];
|
||||||
|
@ -91,38 +104,6 @@ void SplitLargeMeshesTest::SetUp()
|
||||||
face.mIndices[2] = qq++;
|
face.mIndices[2] = qq++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// generate many, many faces with randomized indices for
|
|
||||||
// the second mesh
|
|
||||||
this->pcMesh2 = new aiMesh();
|
|
||||||
pcMesh2->mNumVertices = 3000;
|
|
||||||
pcMesh2->mVertices = new aiVector3D[pcMesh2->mNumVertices];
|
|
||||||
pcMesh2->mNormals = new aiVector3D[pcMesh2->mNumVertices];
|
|
||||||
|
|
||||||
pcMesh2->mNumFaces = 10000;
|
|
||||||
pcMesh2->mFaces = new aiFace[pcMesh2->mNumFaces];
|
|
||||||
|
|
||||||
for (unsigned int i = 0; i < pcMesh2->mNumFaces;++i)
|
|
||||||
{
|
|
||||||
aiFace& face = pcMesh2->mFaces[i];
|
|
||||||
face.mNumIndices = 3;
|
|
||||||
face.mIndices = new unsigned int[3];
|
|
||||||
face.mIndices[0] = (unsigned int)((rand() / (float)RAND_MAX) * pcMesh2->mNumVertices);
|
|
||||||
face.mIndices[1] = (unsigned int)((rand() / (float)RAND_MAX) * pcMesh2->mNumVertices);
|
|
||||||
face.mIndices[2] = (unsigned int)((rand() / (float)RAND_MAX) * pcMesh2->mNumVertices);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
|
||||||
void SplitLargeMeshesTest::TearDown()
|
|
||||||
{
|
|
||||||
delete this->piProcessTriangle;
|
|
||||||
delete this->piProcessVertex;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
|
||||||
TEST_F(SplitLargeMeshesTest, testVertexSplit)
|
|
||||||
{
|
|
||||||
std::vector< std::pair<aiMesh*, unsigned int> > avOut;
|
|
||||||
|
|
||||||
int iOldFaceNum = (int)pcMesh1->mNumFaces;
|
int iOldFaceNum = (int)pcMesh1->mNumFaces;
|
||||||
piProcessVertex->SplitMesh(0,pcMesh1,avOut);
|
piProcessVertex->SplitMesh(0,pcMesh1,avOut);
|
||||||
|
@ -147,6 +128,26 @@ TEST_F(SplitLargeMeshesTest, testTriangleSplit)
|
||||||
{
|
{
|
||||||
std::vector< std::pair<aiMesh*, unsigned int> > avOut;
|
std::vector< std::pair<aiMesh*, unsigned int> > avOut;
|
||||||
|
|
||||||
|
// generate many, many faces with randomized indices for
|
||||||
|
// the second mesh
|
||||||
|
aiMesh *pcMesh2 = new aiMesh();
|
||||||
|
pcMesh2->mNumVertices = 3000;
|
||||||
|
pcMesh2->mVertices = new aiVector3D[pcMesh2->mNumVertices];
|
||||||
|
pcMesh2->mNormals = new aiVector3D[pcMesh2->mNumVertices];
|
||||||
|
|
||||||
|
pcMesh2->mNumFaces = 10000;
|
||||||
|
pcMesh2->mFaces = new aiFace[pcMesh2->mNumFaces];
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < pcMesh2->mNumFaces;++i)
|
||||||
|
{
|
||||||
|
aiFace& face = pcMesh2->mFaces[i];
|
||||||
|
face.mNumIndices = 3;
|
||||||
|
face.mIndices = new unsigned int[3];
|
||||||
|
face.mIndices[0] = (unsigned int)((rand() / (float)RAND_MAX) * pcMesh2->mNumVertices);
|
||||||
|
face.mIndices[1] = (unsigned int)((rand() / (float)RAND_MAX) * pcMesh2->mNumVertices);
|
||||||
|
face.mIndices[2] = (unsigned int)((rand() / (float)RAND_MAX) * pcMesh2->mNumVertices);
|
||||||
|
}
|
||||||
|
|
||||||
// the number of faces shouldn't change
|
// the number of faces shouldn't change
|
||||||
int iOldFaceNum = (int)pcMesh2->mNumFaces;
|
int iOldFaceNum = (int)pcMesh2->mNumFaces;
|
||||||
piProcessTriangle->SplitMesh(0,pcMesh2,avOut);
|
piProcessTriangle->SplitMesh(0,pcMesh2,avOut);
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Open Asset Import Library (assimp)
|
Open Asset Import Library (assimp)
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2014, assimp team
|
Copyright (c) 2006-2016, assimp team
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue